Initial commit, see other repositories for history
Always use LEFT JOIN when the referred-to table comes from a LEFT JOIN relation

In "a LEFT JOIN b INNER JOIN c", the last jointure can reject results that
were previously accepted by the LEFT JOIN. This is the case if a is not null,
b is null and c is matched against b. The correct result is to have b and c
null, but keeping the inner join will find no c matching the null b, and thus
will remove the entire row.
Use precomplied headers (GCC only)
Add QForeignKey::value(), an explicit method name for the -> operator.
Ensure that the model of a field is built before joining it
Do not free a QFieldPrivate more than one time

In QForeignKeyPrivate, a QFieldPrivate was casted to a QField using a
private QField constructor. This constructor did not reference the
QFieldPrivate, but the destructor de-referenced it, and freed it.
When the original QField of the QFieldPrivate was later de-referenced,
the QFieldPrivate was again de-referenced.
Allow to set the QModel representing a foreign-key relation
Use Q_DECLARE_TYPEINFO to optimize vectors of QField's
Add a QF method for comparisons against flags (testing if a bit is set)
Don't cast int to bool when it is not needed
If C++11 is used, declare move operators
Use QF::in() instead of QF::operator>>(), it is more descriptive.
Per-thread database connection, and rewrite of QQuerySet (more simple and allowing defer/only)
Allow the client application to override how the per-thread database is created
Utility methods to add bunches of fields in a QuerySet in one method call
Don't double-free QFieldPrivate objects
Don't forget to bind values found in WHERE clauses of prepared statements
Add a QF::isNull() method allowing to match null fields
Every null QVariant must be the same
Keep the models working even in the absence of primary keys