Class DefaultSelectTranslator
- java.lang.Object
-
- org.apache.cayenne.access.translator.select.QueryAssembler
-
- org.apache.cayenne.access.translator.select.DefaultSelectTranslator
-
- All Implemented Interfaces:
SelectTranslator
- Direct Known Subclasses:
IngresSelectTranslator,SQLServerSelectTranslator,SybaseSelectTranslator
public class DefaultSelectTranslator extends QueryAssembler implements SelectTranslator
- Since:
- 4.0
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.cayenne.access.translator.select.QueryAssembler
QueryAssembler.AddBindingListener
-
-
Field Summary
Fields Modifier and Type Field Description protected static int[]UNSUPPORTED_DISTINCT_TYPES-
Fields inherited from class org.apache.cayenne.access.translator.select.QueryAssembler
adapter, addBindingListener, bindings, entityResolver, query, queryMetadata, sql, translated
-
-
Constructor Summary
Constructors Constructor Description DefaultSelectTranslator(Query query, DbAdapter adapter, EntityResolver entityResolver)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidappendGroupByColumn(StringBuilder buffer, Map.Entry<ColumnDescriptor,List<DbAttributeBinding>> entry)Append single column to GROUP BY clauseprotected voidappendGroupByColumns(StringBuilder buffer, Map<ColumnDescriptor,List<DbAttributeBinding>> groupByColumns)Append columns to GROUP BY clauseprotected voidappendLimitAndOffsetClauses(StringBuilder buffer)Handles appending optional limit and offset clauses.protected voidappendSelectColumns(StringBuilder buffer, List<String> selectColumnExpList)protected StringbuildDistinctStatement()Allows subclasses to insert their own dialect of DISTINCT statement to improve performance.protected List<ColumnDescriptor>buildResultColumns()protected JoinStackcreateJoinStack()voiddbRelationshipAdded(DbRelationship relationship, JoinType joinType, String joinSplitAlias)Appends a join with given semantics to the query.protected voiddoTranslate()StringgetAliasForExpression(Expression exp)Map<ObjAttribute,ColumnDescriptor>getAttributeOverrides()Returns a map of ColumnDescriptors keyed by ObjAttribute for columns that may need to be reprocessed manually due to incompatible mappings along the inheritance hierarchy.StringgetCurrentAlias()Returns an alias of the table which is currently at the top of the join stack.protected JoinStackgetJoinStack()ColumnDescriptor[]getResultColumns()Returns a list of ColumnDescriptors for the query columns.booleanhasJoins()booleanisSuppressingDistinct()Returns true if SelectTranslator determined that a query requiring DISTINCT can't be run with DISTINCT keyword for internal reasons.protected static booleanisUnsupportedForDistinct(int type)voidresetJoinStack()A callback invoked by a child qualifier or ordering processor allowing query assembler to reset its join stack.booleansupportsTableAliases()Always returns true.-
Methods inherited from class org.apache.cayenne.access.translator.select.QueryAssembler
addToParamList, ensureTranslated, getAdapter, getBindings, getEntityResolver, getPathAliases, getQuery, getQueryMetadata, getSql, setAddBindingListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.cayenne.access.translator.select.SelectTranslator
getBindings, getSql
-
-
-
-
Constructor Detail
-
DefaultSelectTranslator
public DefaultSelectTranslator(Query query, DbAdapter adapter, EntityResolver entityResolver)
-
-
Method Detail
-
isUnsupportedForDistinct
protected static boolean isUnsupportedForDistinct(int type)
-
getJoinStack
protected JoinStack getJoinStack()
-
createJoinStack
protected JoinStack createJoinStack()
-
doTranslate
protected void doTranslate()
- Specified by:
doTranslatein classQueryAssembler
-
buildDistinctStatement
protected String buildDistinctStatement()
Allows subclasses to insert their own dialect of DISTINCT statement to improve performance.- Returns:
- string representing the DISTINCT statement
- Since:
- 4.0
-
appendSelectColumns
protected void appendSelectColumns(StringBuilder buffer, List<String> selectColumnExpList)
- Since:
- 3.1
-
appendGroupByColumns
protected void appendGroupByColumns(StringBuilder buffer, Map<ColumnDescriptor,List<DbAttributeBinding>> groupByColumns)
Append columns to GROUP BY clause- Since:
- 4.0
-
appendGroupByColumn
protected void appendGroupByColumn(StringBuilder buffer, Map.Entry<ColumnDescriptor,List<DbAttributeBinding>> entry)
Append single column to GROUP BY clause- Since:
- 4.0
-
appendLimitAndOffsetClauses
protected void appendLimitAndOffsetClauses(StringBuilder buffer)
Handles appending optional limit and offset clauses. This implementation does nothing, deferring to subclasses to define the LIMIT/OFFSET clause syntax.- Since:
- 3.0
-
getCurrentAlias
public String getCurrentAlias()
Description copied from class:QueryAssemblerReturns an alias of the table which is currently at the top of the join stack.- Specified by:
getCurrentAliasin classQueryAssembler
-
getResultColumns
public ColumnDescriptor[] getResultColumns()
Returns a list of ColumnDescriptors for the query columns.- Specified by:
getResultColumnsin interfaceSelectTranslator- Since:
- 1.2
-
getAttributeOverrides
public Map<ObjAttribute,ColumnDescriptor> getAttributeOverrides()
Returns a map of ColumnDescriptors keyed by ObjAttribute for columns that may need to be reprocessed manually due to incompatible mappings along the inheritance hierarchy.- Specified by:
getAttributeOverridesin interfaceSelectTranslator- Since:
- 1.2
-
isSuppressingDistinct
public boolean isSuppressingDistinct()
Returns true if SelectTranslator determined that a query requiring DISTINCT can't be run with DISTINCT keyword for internal reasons. If this method returns true, DataNode may need to do in-memory distinct filtering.- Specified by:
isSuppressingDistinctin interfaceSelectTranslator- Since:
- 1.1
-
buildResultColumns
protected List<ColumnDescriptor> buildResultColumns()
-
resetJoinStack
public void resetJoinStack()
Description copied from class:QueryAssemblerA callback invoked by a child qualifier or ordering processor allowing query assembler to reset its join stack.- Specified by:
resetJoinStackin classQueryAssembler- Since:
- 3.0
-
dbRelationshipAdded
public void dbRelationshipAdded(DbRelationship relationship, JoinType joinType, String joinSplitAlias)
Description copied from class:QueryAssemblerAppends a join with given semantics to the query.- Specified by:
dbRelationshipAddedin classQueryAssembler- Since:
- 3.0
-
supportsTableAliases
public boolean supportsTableAliases()
Always returns true.- Overrides:
supportsTableAliasesin classQueryAssembler
-
getAliasForExpression
public String getAliasForExpression(Expression exp)
- Specified by:
getAliasForExpressionin classQueryAssembler
-
hasJoins
public boolean hasJoins()
- Specified by:
hasJoinsin interfaceSelectTranslator- Returns:
- do query has at least one join
- Since:
- 4.0
-
-