Search in sources :

Example 11 with ColumnsFactory

use of org.sql.generation.api.grammar.factories.ColumnsFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLQuerying method createTypeCondition.

protected org.sql.generation.api.grammar.booleans.BooleanExpression createTypeCondition(Class<?> resultType, SQLVendor vendor) {
    BooleanFactory b = vendor.getBooleanFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    ColumnsFactory c = vendor.getColumnsFactory();
    List<Integer> typeIDs = this.getEntityTypeIDs(resultType);
    InBuilder in = b.inBuilder(c.colName(TABLE_NAME_PREFIX + TYPE_TABLE_SUFFIX, DBNames.ENTITY_TYPES_TABLE_PK_COLUMN_NAME));
    for (Integer i : typeIDs) {
        in.addValues(l.n(i));
    }
    return in.createExpression();
}
Also used : ColumnsFactory(org.sql.generation.api.grammar.factories.ColumnsFactory) InBuilder(org.sql.generation.api.grammar.builders.booleans.InBuilder) BooleanFactory(org.sql.generation.api.grammar.factories.BooleanFactory) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory)

Example 12 with ColumnsFactory

use of org.sql.generation.api.grammar.factories.ColumnsFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLQuerying method constructQuery.

@Override
public //
String constructQuery(//
Class<?> resultType, //
Specification<Composite> whereClause, //
OrderBy[] orderBySegments, //
Integer firstResult, //
Integer maxResults, //
Map<String, Object> variables, //
List<Object> values, //
List<Integer> valueSQLTypes, //
Boolean countOnly) throws EntityFinderException {
    SQLVendor vendor = this.descriptor.metaInfo(SQLVendor.class);
    QueryFactory q = vendor.getQueryFactory();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    ColumnsFactory c = vendor.getColumnsFactory();
    ColumnReference mainColumn = c.colName(TABLE_NAME_PREFIX + "0", DBNames.ENTITY_TABLE_IDENTITY_COLUMN_NAME);
    if (countOnly) {
        mainColumn = c.colExp(l.func(SQLFunctions.COUNT, mainColumn));
    }
    QueryBuilder innerBuilder = this.processBooleanExpression(whereClause, false, vendor, this.createTypeCondition(resultType, vendor), variables, values, valueSQLTypes);
    QuerySpecificationBuilder mainQuery = q.querySpecificationBuilder();
    mainQuery.getSelect().addUnnamedColumns(mainColumn);
    mainQuery.getFrom().addTableReferences(t.tableBuilder(t.table(q.createQuery(innerBuilder.createExpression()), t.tableAlias(TABLE_NAME_PREFIX + "0"))));
    this.processOrderBySegments(orderBySegments, vendor, mainQuery);
    QueryExpression finalMainQuery = this.finalizeQuery(vendor, mainQuery, resultType, whereClause, orderBySegments, firstResult, maxResults, variables, values, valueSQLTypes, countOnly);
    String result = vendor.toString(finalMainQuery);
    LOGGER.info("SQL query:\n" + result);
    return result;
}
Also used : TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) QueryFactory(org.sql.generation.api.grammar.factories.QueryFactory) ColumnsFactory(org.sql.generation.api.grammar.factories.ColumnsFactory) QuerySpecificationBuilder(org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder) SQLVendor(org.sql.generation.api.vendor.SQLVendor) QueryBuilder(org.sql.generation.api.grammar.builders.query.QueryBuilder) QueryExpression(org.sql.generation.api.grammar.query.QueryExpression) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory) ColumnReference(org.sql.generation.api.grammar.query.ColumnReference)

Example 13 with ColumnsFactory

use of org.sql.generation.api.grammar.factories.ColumnsFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLQuerying method traverseAssociationPath.

protected Integer traverseAssociationPath(TraversedAssoOrManyAssoRef reference, Integer lastTableIndex, Integer nextAvailableIndex, SQLVendor vendor, TableReferenceBuilder builder, JoinType joinStyle, Boolean includeLastTable) {
    Stack<QualifiedName> qNameStack = new Stack<>();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    BooleanFactory b = vendor.getBooleanFactory();
    ColumnsFactory c = vendor.getColumnsFactory();
    String schemaName = this._state.schemaName().get();
    while (reference._hasRefs) {
        qNameStack.add(QualifiedName.fromAccessor(reference.getAccessor()));
        reference = reference.getTraversedAssociation();
    }
    while (!qNameStack.isEmpty()) {
        QualifiedName qName = qNameStack.pop();
        QNameInfo info = this._state.qNameInfos().get().get(qName);
        if (info == null) {
            throw new InternalError("No qName info found for qName [" + qName + "].");
        }
        // @formatter:off
        builder.addQualifiedJoin(joinStyle, t.table(t.tableName(schemaName, info.getTableName()), t.tableAlias(TABLE_NAME_PREFIX + nextAvailableIndex)), t.jc(b.eq(c.colName(TABLE_NAME_PREFIX + lastTableIndex, DBNames.ENTITY_TABLE_PK_COLUMN_NAME), c.colName(TABLE_NAME_PREFIX + nextAvailableIndex, DBNames.ENTITY_TABLE_PK_COLUMN_NAME))));
        lastTableIndex = nextAvailableIndex;
        ++nextAvailableIndex;
        if (includeLastTable || !qNameStack.isEmpty()) {
            builder.addQualifiedJoin(joinStyle, t.table(t.tableName(schemaName, DBNames.ENTITY_TABLE_NAME), t.tableAlias(TABLE_NAME_PREFIX + nextAvailableIndex)), t.jc(b.eq(c.colName(TABLE_NAME_PREFIX + lastTableIndex, DBNames.QNAME_TABLE_VALUE_COLUMN_NAME), c.colName(TABLE_NAME_PREFIX + nextAvailableIndex, DBNames.ENTITY_TABLE_PK_COLUMN_NAME))));
            lastTableIndex = nextAvailableIndex;
            ++nextAvailableIndex;
        }
    // @formatter:on
    }
    return lastTableIndex;
}
Also used : TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) QualifiedName(org.qi4j.api.common.QualifiedName) ColumnsFactory(org.sql.generation.api.grammar.factories.ColumnsFactory) QNameInfo(org.qi4j.index.sql.support.common.QNameInfo) BooleanFactory(org.sql.generation.api.grammar.factories.BooleanFactory) Stack(java.util.Stack)

Aggregations

ColumnsFactory (org.sql.generation.api.grammar.factories.ColumnsFactory)13 TableReferenceFactory (org.sql.generation.api.grammar.factories.TableReferenceFactory)10 BooleanFactory (org.sql.generation.api.grammar.factories.BooleanFactory)9 LiteralFactory (org.sql.generation.api.grammar.factories.LiteralFactory)8 QueryFactory (org.sql.generation.api.grammar.factories.QueryFactory)6 QNameInfo (org.qi4j.index.sql.support.common.QNameInfo)4 QuerySpecificationBuilder (org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder)4 ModificationFactory (org.sql.generation.api.grammar.factories.ModificationFactory)4 QualifiedName (org.qi4j.api.common.QualifiedName)3 Stack (java.util.Stack)2 AccessibleObject (java.lang.reflect.AccessibleObject)1 Member (java.lang.reflect.Member)1 ResultSet (java.sql.ResultSet)1 Collection (java.util.Collection)1 Set (java.util.Set)1 Property (org.qi4j.api.property.Property)1 PropertyFunction (org.qi4j.api.query.grammar.PropertyFunction)1 Variable (org.qi4j.api.query.grammar.Variable)1 ValueComposite (org.qi4j.api.value.ValueComposite)1 BooleanBuilder (org.sql.generation.api.grammar.builders.booleans.BooleanBuilder)1