Title: Query Notes
name conflict: QueryImpl from JDBC vs. QueryImpl from kernel
openjpa.kernel.jpql.JPQLParser
joins are done by SelectImpl
subselects have some issues especially with non-relationship 
src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt has rules
all queries always have a "candidate class" 
openjpa.jdbc.kernel.exps.JDBCExpressionFactory implements
openjpa.kernel.exps.ExpressionFactory
openjpa.kernel.exps.InMemoryExpressionFactory implements
openjpa.kernel.exps.ExpressionFactory
can do in memory filtering by downcasting the JPA Query instance and
passing it a collection to filter
can traverse entity parameters via :param.firstname or
:param.relationship.deptname
DBDictionary contains fields that can be customized per database type
JPQLExpressionBuilder does semantic analysis by walking the syntax tree and
generating the semantic tree
SQLFactoryImpl constructs the SQL for the query
SQLBuffer is the result of applying DBDictionary rules to the semantic tree
Can append SQLBuffer to another SQLBuffer for e.g. subselects
SQLBuffer is almost a StringBuffer
ResultSetResult will call ResultSet.getInt etc.