/** * INTERNAL: * Return the base expression to use for adding fields to the query. * Normally this is the query's builder, but may be the join table for m-m. */ @Override protected Expression getAdditionalFieldsBaseExpression(ReadQuery query) { return ((ReadAllQuery)query).getExpressionBuilder().getTable(getRelationTable()); }
/** * INTERNAL: * Return the base expression to use for adding fields to the query. * Normally this is the query's builder, but may be the join table for m-m. */ @Override protected Expression getAdditionalFieldsBaseExpression(ReadQuery query) { return ((ReadAllQuery)query).getExpressionBuilder().getTable(getRelationTable()); }
/** * INTERNAL: * Add the addition join fields to the batch query. */ public void postPrepareNestedBatchQuery(ReadQuery batchQuery, ObjectLevelReadQuery query) { ReadAllQuery mappingBatchQuery = (ReadAllQuery)batchQuery; mappingBatchQuery.setShouldIncludeData(true); Expression linkTable = mappingBatchQuery.getExpressionBuilder().getTable(this.relationTable); for (DatabaseField relationField : this.sourceRelationKeyFields) { mappingBatchQuery.getAdditionalFields().add(linkTable.getField(relationField)); } }
/** * INTERNAL: * Add the addition join fields to the batch query. */ public void postPrepareNestedBatchQuery(ReadQuery batchQuery, ObjectLevelReadQuery query) { ReadAllQuery mappingBatchQuery = (ReadAllQuery)batchQuery; mappingBatchQuery.setShouldIncludeData(true); Expression linkTable = mappingBatchQuery.getExpressionBuilder().getTable(this.relationTable); for (DatabaseField relationField : this.sourceRelationKeyFields) { mappingBatchQuery.getAdditionalFields().add(linkTable.getField(relationField)); } }
protected void initializeSelectionCriteria(AbstractSession session) { Expression criteria = null; ExpressionBuilder base = new ExpressionBuilder(); TableExpression table = (TableExpression)base.getTable(getReferenceTable()); Iterator<DatabaseField> referenceKeys = getReferenceKeyFields().iterator(); Iterator<DatabaseField> sourceKeys = getSourceKeyFields().iterator(); while (referenceKeys.hasNext()) { DatabaseField referenceKey = referenceKeys.next(); DatabaseField sourceKey = sourceKeys.next(); Expression expression = table.getField(referenceKey).equal(base.getParameter(sourceKey)); if (criteria == null) { criteria = expression; } else { criteria = expression.and(criteria); } } setSelectionCriteria(criteria); }
/** * INTERNAL: * Allow the mapping the do any further batch preparation. */ protected void postPrepareNestedBatchQuery(ReadQuery batchQuery, ReadAllQuery query) { // Force a distinct to filter out m-1 duplicates. if (!query.isDistinctComputed()) { ((ObjectLevelReadQuery)batchQuery).useDistinct(); } if(this.mechanism != null) { ReadAllQuery mappingBatchQuery = (ReadAllQuery)batchQuery; mappingBatchQuery.setShouldIncludeData(true); for (Enumeration relationFieldsEnum = this.mechanism.getSourceRelationKeyFields().elements(); relationFieldsEnum.hasMoreElements();) { mappingBatchQuery.getAdditionalFields().add(mappingBatchQuery.getExpressionBuilder().getTable(this.mechanism.getRelationTable()).getField((DatabaseField)relationFieldsEnum.nextElement())); } } }
protected void initializeSelectionCriteria(AbstractSession session) { Expression criteria = null; ExpressionBuilder base = new ExpressionBuilder(); TableExpression table = (TableExpression)base.getTable(getReferenceTable()); Iterator<DatabaseField> referenceKeys = getReferenceKeyFields().iterator(); Iterator<DatabaseField> sourceKeys = getSourceKeyFields().iterator(); while (referenceKeys.hasNext()) { DatabaseField referenceKey = referenceKeys.next(); DatabaseField sourceKey = sourceKeys.next(); Expression expression = table.getField(referenceKey).equal(base.getParameter(sourceKey)); if (criteria == null) { criteria = expression; } else { criteria = expression.and(criteria); } } setSelectionCriteria(criteria); }
/** * INTERNAL: * Return the selection criteria used to IN batch fetching. */ @Override protected Expression buildBatchCriteria(ExpressionBuilder builder, ObjectLevelReadQuery query) { int size = this.referenceKeyFields.size(); Expression table = builder.getTable(this.referenceTable); if (size > 1) { // Support composite keys using nested IN. List<Expression> fields = new ArrayList<Expression>(size); for (DatabaseField referenceKeyField : this.referenceKeyFields) { fields.add(table.getField(referenceKeyField)); } return query.getSession().getPlatform().buildBatchCriteriaForComplexId(builder, fields); } else { return query.getSession().getPlatform().buildBatchCriteria(builder, table.getField(this.referenceKeyFields.get(0))); } }
/** * INTERNAL: * Return the selection criteria used to IN batch fetching. */ @Override protected Expression buildBatchCriteria(ExpressionBuilder builder, ObjectLevelReadQuery query) { int size = this.referenceKeyFields.size(); Expression table = builder.getTable(this.referenceTable); if (size > 1) { // Support composite keys using nested IN. List<Expression> fields = new ArrayList<Expression>(size); for (DatabaseField referenceKeyField : this.referenceKeyFields) { fields.add(table.getField(referenceKeyField)); } return query.getSession().getPlatform().buildBatchCriteriaForComplexId(builder, fields); } else { return query.getSession().getPlatform().buildBatchCriteria(builder, table.getField(this.referenceKeyFields.get(0))); } }
protected void initializeSelectionCriteria(AbstractSession session) { Expression exp1; Expression exp2; Expression expression; Expression criteria = null; Enumeration referenceKeysEnum; Enumeration sourceKeysEnum; ExpressionBuilder base = new ExpressionBuilder(); TableExpression table = (TableExpression)base.getTable(getReferenceTable()); referenceKeysEnum = getReferenceKeyFields().elements(); sourceKeysEnum = getSourceKeyFields().elements(); for (; referenceKeysEnum.hasMoreElements();) { DatabaseField referenceKey = (DatabaseField)referenceKeysEnum.nextElement(); DatabaseField sourceKey = (DatabaseField)sourceKeysEnum.nextElement(); exp1 = table.getField(referenceKey); exp2 = base.getParameter(sourceKey); expression = exp1.equal(exp2); if (criteria == null) { criteria = expression; } else { criteria = expression.and(criteria); } } setSelectionCriteria(criteria); }
/** * INTERNAL: * Return the base expression to use for adding fields to the query. * This is the reference table. */ @Override protected Expression getAdditionalFieldsBaseExpression(ReadQuery query) { if (query.isReadAllQuery()) { return ((ReadAllQuery)query).getExpressionBuilder(); } else { return ((DataReadQuery)query).getSQLStatement().getBuilder().getTable(getReferenceTable()); } }
/** * INTERNAL: * Return the base expression to use for adding fields to the query. * This is the reference table. */ @Override protected Expression getAdditionalFieldsBaseExpression(ReadQuery query) { if (query.isReadAllQuery()) { return ((ReadAllQuery)query).getExpressionBuilder(); } else { return ((DataReadQuery)query).getSQLStatement().getBuilder().getTable(getReferenceTable()); } }
/** * INTERNAL: * Return the selection criteria used to IN batch fetching. */ protected Expression buildBatchCriteria(ExpressionBuilder builder, ObjectLevelReadQuery query) { Expression linkTable = builder.getTable(this.relationTable); Expression criteria = null; int size = this.targetRelationKeyFields.size(); for (int index = 0; index < size; index++) { DatabaseField relationKey = this.targetRelationKeyFields.get(index); DatabaseField targetKey = this.targetKeyFields.get(index); criteria = builder.getField(targetKey).equal(linkTable.getField(relationKey)).and(criteria); } size = this.sourceRelationKeyFields.size(); if (size > 1) { // Support composite keys using nested IN. List<Expression> fields = new ArrayList<Expression>(size); for (DatabaseField sourceRelationKeyField : this.sourceRelationKeyFields) { fields.add(linkTable.getField(sourceRelationKeyField)); } return criteria.and(query.getSession().getPlatform().buildBatchCriteriaForComplexId(builder, fields)); } else { return criteria.and(query.getSession().getPlatform().buildBatchCriteria(builder, linkTable.getField(this.sourceRelationKeyFields.get(0)))); } }
/** * INTERNAL: * Return the selection criteria used to IN batch fetching. */ protected Expression buildBatchCriteria(ExpressionBuilder builder, ObjectLevelReadQuery query) { Expression linkTable = builder.getTable(this.relationTable); Expression criteria = null; int size = this.targetRelationKeyFields.size(); for (int index = 0; index < size; index++) { DatabaseField relationKey = this.targetRelationKeyFields.get(index); DatabaseField targetKey = this.targetKeyFields.get(index); criteria = builder.getField(targetKey).equal(linkTable.getField(relationKey)).and(criteria); } size = this.sourceRelationKeyFields.size(); if (size > 1) { // Support composite keys using nested IN. List<Expression> fields = new ArrayList<Expression>(size); for (DatabaseField sourceRelationKeyField : this.sourceRelationKeyFields) { fields.add(linkTable.getField(sourceRelationKeyField)); } return criteria.and(query.getSession().getPlatform().buildBatchCriteriaForComplexId(builder, fields)); } else { return criteria.and(query.getSession().getPlatform().buildBatchCriteria(builder, linkTable.getField(this.sourceRelationKeyFields.get(0)))); } }
/** * INTERNAL: * Return relation table locking clause. */ public void setRelationTableLockingClause(ObjectLevelReadQuery targetQuery, ObjectBuildingQuery sourceQuery) { ForUpdateOfClause lockingClause = new ForUpdateOfClause(); lockingClause.setLockMode(sourceQuery.getLockMode()); FieldExpression exp = (FieldExpression)targetQuery.getExpressionBuilder().getTable(this.relationTable).getField(this.sourceRelationKeyFields.get(0)); lockingClause.addLockedExpression(exp); targetQuery.setLockingClause(lockingClause); // locking clause is not compatible with DISTINCT targetQuery.setShouldOuterJoinSubclasses(true); }
/** * INTERNAL: * Return relation table locking clause. */ public void setRelationTableLockingClause(ObjectLevelReadQuery targetQuery, ObjectBuildingQuery sourceQuery) { ForUpdateOfClause lockingClause = new ForUpdateOfClause(); lockingClause.setLockMode(sourceQuery.getLockMode()); FieldExpression exp = (FieldExpression)targetQuery.getExpressionBuilder().getTable(this.relationTable).getField(this.sourceRelationKeyFields.get(0)); lockingClause.addLockedExpression(exp); targetQuery.setLockingClause(lockingClause); // locking clause is not compatible with DISTINCT targetQuery.setShouldOuterJoinSubclasses(true); }
/** * INTERNAL: * Return relation table locking clause. */ public void setRelationTableLockingClause(ObjectLevelReadQuery targetQuery, ObjectBuildingQuery sourceQuery) { ForUpdateOfClause lockingClause = new ForUpdateOfClause(); lockingClause.setLockMode(sourceQuery.getLockMode()); FieldExpression exp = (FieldExpression)targetQuery.getExpressionBuilder().getTable(this.relationTable).getField(this.sourceRelationKeyFields.get(0)); lockingClause.addLockedExpression(exp); targetQuery.setLockingClause(lockingClause); // locking clause is not compatible with DISTINCT targetQuery.setShouldOuterJoinSubclasses(true); }
/** * INTERNAL: * Add additional fields and check for history. */ protected void postPrepareNestedBatchQuery(ReadQuery batchQuery, ReadAllQuery query) { ReadAllQuery mappingBatchQuery = (ReadAllQuery)batchQuery; mappingBatchQuery.setShouldIncludeData(true); for (Enumeration relationFieldsEnum = getSourceRelationKeyFields().elements(); relationFieldsEnum.hasMoreElements();) { mappingBatchQuery.getAdditionalFields().add(mappingBatchQuery.getExpressionBuilder().getTable(getRelationTable()).getField((DatabaseField)relationFieldsEnum.nextElement())); } if (getHistoryPolicy() != null) { ExpressionBuilder builder = mappingBatchQuery.getExpressionBuilder(); Expression twisted = batchQuery.getSelectionCriteria(); if (query.getSession().getAsOfClause() != null) { builder.asOf(query.getSession().getAsOfClause()); } else if (builder.getAsOfClause() == null) { builder.asOf(AsOfClause.NO_CLAUSE); } twisted = twisted.and(getHistoryPolicy().additionalHistoryExpression(builder)); mappingBatchQuery.setSelectionCriteria(twisted); } }
Expression relationTableExp = subQuery.getExpressionBuilder().getTable(this.mechanism.relationTable); Expression subSelectExp = null; for(int i=0; i < size; i++) {