Select-query side effect
When you write:

`return selection or model.select()`

Python needs to determine if `selection` is truth-y, so it calls its `__len__()` method to see if it's empty. This causes the query to be evaluated. The better way to do this is:

`return selection if selection is not None else model.select()`
In my application I have a function that accepts an optional `ModelSelect` argument. If it is not set, `model.select()` shall be used.

The line `selection or model.select()` causes an SQL query to be executed. Why is this (side) effect? I looked at the [docs](http://docs.peewee-orm.com/en/latest/peewee/querying.html#selecting-multiple-records) but could not find any hint.

```python
from peewee import SqliteDatabase, CharField, Model
import logging

logger = logging.getLogger("peewee")
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

db = SqliteDatabase(":memory:")


class User(Model):
    name = CharField()

    class Meta:
        database = db


def some_logic(model, selection=None):
    return selection or model.select()


def main():
    db.create_tables([User])
    User.insert_many([{"name": n} for n in "abcdef"]).execute()

    logger.warning(0)
    selection = User.select()
    logger.warning(1)
    selection = some_logic(User, selection)
    logger.warning(2)


main()
```

The log output is
```
('CREATE TABLE IF NOT EXISTS "user" ("id" INTEGER NOT NULL PRIMARY KEY, "name" VARCHAR(255) NOT NULL)', [])
('INSERT INTO "user" ("name") VALUES (?), (?), (?), (?), (?), (?)', ['a', 'b', 'c', 'd', 'e', 'f'])
0
1
('SELECT "t1"."id", "t1"."name" FROM "user" AS "t1"', [])
2
```