org.qi4j.index.sql.support.skeletons
Class AbstractSQLQuerying

java.lang.Object
  extended by org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying
All Implemented Interfaces:
Activatable, SQLQuerying
Direct Known Subclasses:
PostgreSQLQuerying

public abstract class AbstractSQLQuerying
extends Object
implements SQLQuerying, Activatable


Nested Class Summary
static interface AbstractSQLQuerying.SQLBooleanCreator
           
 
Constructor Summary
AbstractSQLQuerying()
           
 
Method Summary
 void activate()
          This is invoked on the service when the instance is being activated
 String constructQuery(Class<?> resultType, BooleanExpression whereClause, OrderBy[] orderBySegments, Integer firstResult, Integer maxResults, List<Object> values, List<Integer> valueSQLTypes, Boolean countOnly)
          This method will be called when parsing needs to be done from Qi4j query to SQL query.
protected  org.sql.generation.api.grammar.query.QuerySpecification constructQueryForPredicate(Predicate predicate, PropertyReference<?> propRef, AssociationReference assoRef, Boolean includeLastAssoPathTable, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.WhereClauseProcessor whereClauseGenerator)
           
protected  org.sql.generation.api.grammar.booleans.BooleanExpression createTypeCondition(Class<?> resultType, org.sql.generation.api.vendor.SQLVendor vendor)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder finalizeContainsQuery(org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.query.QuerySpecification contains, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, Boolean negationActive)
           
protected abstract  org.sql.generation.api.grammar.query.QueryExpression finalizeQuery(org.sql.generation.api.vendor.SQLVendor sqlVendor, org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder specBuilder, Class<?> resultType, BooleanExpression whereClause, OrderBy[] orderBySegments, Integer firstResult, Integer maxResults, List<Object> values, List<Integer> valueSQLTypes, Boolean countOnly)
           
protected
<ReturnType>
ReturnType
findFromLookupTables(Map<Class<? extends Predicate>,ReturnType> normal, Map<Class<? extends Predicate>,ReturnType> negated, Predicate predicate, Boolean negationActive)
           
protected  org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder getBuilderForPredicate(org.sql.generation.api.vendor.SQLVendor vendor, String tableAlias)
           
protected  List<Integer> getEntityTypeIDs(Class<?> entityType)
           
protected  AbstractSQLQuerying.SQLBooleanCreator getOperator(Predicate predicate)
           
 Integer getResultSetType(Integer firstResult, Integer maxResults)
           
protected  org.sql.generation.api.grammar.query.joins.JoinType getTableJoinStyle(Predicate predicate, Boolean negationActive)
           
 Boolean isFirstResultSettingSupported()
           
protected  Integer modifyFromClauseAndWhereClauseToGetValue(QualifiedName qName, Object value, Predicate predicate, Boolean negationActive, Integer currentTableIndex, org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.ModifiableInt maxTableIndex, String columnName, String collectionPath, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.builders.booleans.BooleanBuilder whereClause, org.sql.generation.api.grammar.builders.booleans.BooleanBuilder afterWhere, org.sql.generation.api.grammar.builders.query.TableReferenceBuilder fromClause, org.sql.generation.api.grammar.builders.query.GroupByBuilder groupBy, org.sql.generation.api.grammar.builders.booleans.BooleanBuilder having, List<org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.QNameJoin> qNameJoins, List<Object> values, List<Integer> valueSQLTypes)
           
 void passivate()
          This is invoked on the service when the instance is being passivated
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processAssociationNullPredicate(AssociationNullPredicate predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processBooleanExpression(BooleanExpression expression, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processComparisonPredicate(ComparisonPredicate<?> predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processContainsAllPredicate(ContainsAllPredicate<?,? extends Collection<?>> predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processContainsPredicate(ContainsPredicate<?,? extends Collection<?>> predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processManyAssociationContainsPredicate(ManyAssociationContainsPredicate<?> predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processMatchesPredicate(MatchesPredicate predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, List<Object> values, List<Integer> valueSQLTypes)
           
protected  void processOrderBySegments(OrderBy[] orderBy, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder builder)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder processPropertyNullPredicate(PropertyNullPredicate<?> predicate, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)
           
protected  org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder selectAllEntitiesOfCorrectType(org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)
           
protected  org.sql.generation.api.grammar.builders.query.QueryBuilder singleQuery(Predicate predicate, PropertyReference<?> propRef, AssociationReference assoRef, Boolean includeLastAssoPathTable, Boolean negationActive, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition, org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.WhereClauseProcessor whereClauseGenerator)
           
protected  String translateJavaRegexpToPGSQLRegexp(String javaRegexp)
           
protected  Integer traverseAssociationPath(AssociationReference reference, Integer lastTableIndex, Integer nextAvailableIndex, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.builders.query.TableReferenceBuilder builder, org.sql.generation.api.grammar.query.joins.JoinType joinStyle, Boolean includeLastTable)
           
protected  Integer traversePropertyPath(PropertyReference<?> reference, Integer lastTableIndex, Integer nextAvailableIndex, org.sql.generation.api.vendor.SQLVendor vendor, org.sql.generation.api.grammar.builders.query.TableReferenceBuilder builder, org.sql.generation.api.grammar.query.joins.JoinType joinStyle)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractSQLQuerying

public AbstractSQLQuerying()
Method Detail

getResultSetType

public Integer getResultSetType(Integer firstResult,
                                Integer maxResults)
Specified by:
getResultSetType in interface SQLQuerying

isFirstResultSettingSupported

public Boolean isFirstResultSettingSupported()
Specified by:
isFirstResultSettingSupported in interface SQLQuerying

activate

public void activate()
              throws Exception
Description copied from interface: Activatable
This is invoked on the service when the instance is being activated

Specified by:
activate in interface Activatable
Throws:
Exception - if service could not be activated

passivate

public void passivate()
               throws Exception
Description copied from interface: Activatable
This is invoked on the service when the instance is being passivated

Specified by:
passivate in interface Activatable
Throws:
Exception - if the service could not be passivated

constructQuery

public String constructQuery(Class<?> resultType,
                             BooleanExpression whereClause,
                             OrderBy[] orderBySegments,
                             Integer firstResult,
                             Integer maxResults,
                             List<Object> values,
                             List<Integer> valueSQLTypes,
                             Boolean countOnly)
                      throws EntityFinderException
Description copied from interface: SQLQuerying
This method will be called when parsing needs to be done from Qi4j query to SQL query. This method is supposed to return one single SQL query, which can be used with PreparedStatement.

Specified by:
constructQuery in interface SQLQuerying
Parameters:
resultType - The result type of Qi4j query.
whereClause - The where clause of Qi4j query.
orderBySegments - The order by segments of Qi4j query.
firstResult - The first result index of Qi4j query.
maxResults - The max amount of returned results.
values - Values to put into PreparedStatement, in the order of the list. This List is created from the outside and this method is supposed to fill it with necessary values, if any.
valueSQLTypes - The SQL types of the objects in values. Each SQL type at index x is interpreted as type of value at index x of the values -list.
countOnly - True if this query should return only the number of matching entities, false otherwise.
Returns:
The SQL query, which may be used with PreparedStatement.
Throws:
EntityFinderException - If SQLException or something else bad happens.

createTypeCondition

protected org.sql.generation.api.grammar.booleans.BooleanExpression createTypeCondition(Class<?> resultType,
                                                                                        org.sql.generation.api.vendor.SQLVendor vendor)

finalizeQuery

protected abstract org.sql.generation.api.grammar.query.QueryExpression finalizeQuery(org.sql.generation.api.vendor.SQLVendor sqlVendor,
                                                                                      org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder specBuilder,
                                                                                      Class<?> resultType,
                                                                                      BooleanExpression whereClause,
                                                                                      OrderBy[] orderBySegments,
                                                                                      Integer firstResult,
                                                                                      Integer maxResults,
                                                                                      List<Object> values,
                                                                                      List<Integer> valueSQLTypes,
                                                                                      Boolean countOnly)

processBooleanExpression

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processBooleanExpression(BooleanExpression expression,
                                                                                              Boolean negationActive,
                                                                                              org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                              org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                              List<Object> values,
                                                                                              List<Integer> valueSQLTypes)

selectAllEntitiesOfCorrectType

protected org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder selectAllEntitiesOfCorrectType(org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                                 org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)

processMatchesPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processMatchesPredicate(MatchesPredicate predicate,
                                                                                             Boolean negationActive,
                                                                                             org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                             org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                             List<Object> values,
                                                                                             List<Integer> valueSQLTypes)

processComparisonPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processComparisonPredicate(ComparisonPredicate<?> predicate,
                                                                                                Boolean negationActive,
                                                                                                org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                                List<Object> values,
                                                                                                List<Integer> valueSQLTypes)

processManyAssociationContainsPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processManyAssociationContainsPredicate(ManyAssociationContainsPredicate<?> predicate,
                                                                                                             Boolean negationActive,
                                                                                                             org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                             org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                                             List<Object> values,
                                                                                                             List<Integer> valueSQLTypes)

processPropertyNullPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processPropertyNullPredicate(PropertyNullPredicate<?> predicate,
                                                                                                  Boolean negationActive,
                                                                                                  org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                  org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)

processAssociationNullPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processAssociationNullPredicate(AssociationNullPredicate predicate,
                                                                                                     Boolean negationActive,
                                                                                                     org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                     org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition)

processContainsPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processContainsPredicate(ContainsPredicate<?,? extends Collection<?>> predicate,
                                                                                              Boolean negationActive,
                                                                                              org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                              org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                              List<Object> values,
                                                                                              List<Integer> valueSQLTypes)

finalizeContainsQuery

protected org.sql.generation.api.grammar.builders.query.QueryBuilder finalizeContainsQuery(org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                           org.sql.generation.api.grammar.query.QuerySpecification contains,
                                                                                           org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                           Boolean negationActive)

processContainsAllPredicate

protected org.sql.generation.api.grammar.builders.query.QueryBuilder processContainsAllPredicate(ContainsAllPredicate<?,? extends Collection<?>> predicate,
                                                                                                 Boolean negationActive,
                                                                                                 org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                 org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                                 List<Object> values,
                                                                                                 List<Integer> valueSQLTypes)

singleQuery

protected org.sql.generation.api.grammar.builders.query.QueryBuilder singleQuery(Predicate predicate,
                                                                                 PropertyReference<?> propRef,
                                                                                 AssociationReference assoRef,
                                                                                 Boolean includeLastAssoPathTable,
                                                                                 Boolean negationActive,
                                                                                 org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                 org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                 org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.WhereClauseProcessor whereClauseGenerator)

constructQueryForPredicate

protected org.sql.generation.api.grammar.query.QuerySpecification constructQueryForPredicate(Predicate predicate,
                                                                                             PropertyReference<?> propRef,
                                                                                             AssociationReference assoRef,
                                                                                             Boolean includeLastAssoPathTable,
                                                                                             Boolean negationActive,
                                                                                             org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                             org.sql.generation.api.grammar.booleans.BooleanExpression entityTypeCondition,
                                                                                             org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.WhereClauseProcessor whereClauseGenerator)

getOperator

protected AbstractSQLQuerying.SQLBooleanCreator getOperator(Predicate predicate)

getTableJoinStyle

protected org.sql.generation.api.grammar.query.joins.JoinType getTableJoinStyle(Predicate predicate,
                                                                                Boolean negationActive)

findFromLookupTables

protected <ReturnType> ReturnType findFromLookupTables(Map<Class<? extends Predicate>,ReturnType> normal,
                                                       Map<Class<? extends Predicate>,ReturnType> negated,
                                                       Predicate predicate,
                                                       Boolean negationActive)

getBuilderForPredicate

protected org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder getBuilderForPredicate(org.sql.generation.api.vendor.SQLVendor vendor,
                                                                                                         String tableAlias)

translateJavaRegexpToPGSQLRegexp

protected String translateJavaRegexpToPGSQLRegexp(String javaRegexp)

processOrderBySegments

protected void processOrderBySegments(OrderBy[] orderBy,
                                      org.sql.generation.api.vendor.SQLVendor vendor,
                                      org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder builder)

traversePropertyPath

protected Integer traversePropertyPath(PropertyReference<?> reference,
                                       Integer lastTableIndex,
                                       Integer nextAvailableIndex,
                                       org.sql.generation.api.vendor.SQLVendor vendor,
                                       org.sql.generation.api.grammar.builders.query.TableReferenceBuilder builder,
                                       org.sql.generation.api.grammar.query.joins.JoinType joinStyle)

traverseAssociationPath

protected Integer traverseAssociationPath(AssociationReference reference,
                                          Integer lastTableIndex,
                                          Integer nextAvailableIndex,
                                          org.sql.generation.api.vendor.SQLVendor vendor,
                                          org.sql.generation.api.grammar.builders.query.TableReferenceBuilder builder,
                                          org.sql.generation.api.grammar.query.joins.JoinType joinStyle,
                                          Boolean includeLastTable)

getEntityTypeIDs

protected List<Integer> getEntityTypeIDs(Class<?> entityType)

modifyFromClauseAndWhereClauseToGetValue

protected Integer modifyFromClauseAndWhereClauseToGetValue(QualifiedName qName,
                                                           Object value,
                                                           Predicate predicate,
                                                           Boolean negationActive,
                                                           Integer currentTableIndex,
                                                           org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.ModifiableInt maxTableIndex,
                                                           String columnName,
                                                           String collectionPath,
                                                           org.sql.generation.api.vendor.SQLVendor vendor,
                                                           org.sql.generation.api.grammar.builders.booleans.BooleanBuilder whereClause,
                                                           org.sql.generation.api.grammar.builders.booleans.BooleanBuilder afterWhere,
                                                           org.sql.generation.api.grammar.builders.query.TableReferenceBuilder fromClause,
                                                           org.sql.generation.api.grammar.builders.query.GroupByBuilder groupBy,
                                                           org.sql.generation.api.grammar.builders.booleans.BooleanBuilder having,
                                                           List<org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying.QNameJoin> qNameJoins,
                                                           List<Object> values,
                                                           List<Integer> valueSQLTypes)