# Utility classes

## QueryChain

QueryChain is a wrapper for sequence of queries.

Features:

> - Easy iteration for sequence of queries

> - Limit, offset and count which are applied to all queries in the chain

> - Smart __getitem__ support

### Initialization

QueryChain takes iterable of queries as first argument. Additionally limit and offset parameters can be given

    chain = QueryChain([session.query(User), session.query(Article)])

    chain = QueryChain(
        [session.query(User), session.query(Article)],
        limit=4
    )

### Simple iteration

    chain = QueryChain([session.query(User), session.query(Article)])

    for obj in chain:
        print obj

### Limit and offset

Lets say you have 5 blog posts, 5 articles and 5 news items in your database.

    chain = QueryChain(
        [
            session.query(BlogPost),
            session.query(Article),
            session.query(NewsItem)
        ],
        limit=5
    )

    list(chain)  # all blog posts but not articles and news items

    chain = chain.offset(4)
    list(chain)  # last blog post, and first four articles

Just like with original query object the limit and offset can be chained to return a new QueryChain.

    chain = chain.limit(5).offset(7)

### Chain slicing

    chain = QueryChain(
        [
            session.query(BlogPost),
            session.query(Article),
            session.query(NewsItem)
        ]
    )

    chain[3:6]   # New QueryChain with offset=3 and limit=6

### Count

Let’s assume that there are five blog posts, five articles and five news items in the database, and you have the following query chain:

    chain = QueryChain(
        [
            session.query(BlogPost),
            session.query(Article),
            session.query(NewsItem)
        ]
    )

You can then get the total number rows returned by the query chain with `count()`:

    >>> chain.count()
    15

## API

class sqlalchemy_utils.query_chain.QueryChain(queries, limit=None, offset=None)

  QueryChain can be used as a wrapper for sequence of queries.

  Parameters:

    - queries – A sequence of SQLAlchemy Query objects

    - limit – Similar to normal query limit this parameter can be used for limiting the number of results for the whole query chain.

    - offset – Similar to normal query offset this parameter can be used for offsetting the query chain as a whole.

  count()

    Return the total number of rows this QueryChain’s queries would return.