for (Enumeration rowsEnum = classIndicators.elements(); rowsEnum.hasMoreElements();) { AbstractRecord row = (AbstractRecord)rowsEnum.nextElement(); Class concreteClass = classFromRow(row, query.getSession()); if (!classes.contains(concreteClass)) {//Ensure unique ** we should do a distinct.. we do classes.addElement(concreteClass);
/** * INTERNAL: */ public AbstractRecord trimRowForJoin(AbstractRecord row, Object value, AbstractSession executionSession) { // CR #... the field for many objects may be in the row, // so build the subpartion of the row through the computed values in the query, // this also helps the field indexing match. int fieldStartIndex; if(value instanceof Integer) { fieldStartIndex = ((Integer)value).intValue(); } else { // must be Map of classes to Integers Map map = (Map)value; Class cls; if (getDescriptor().hasInheritance() && getDescriptor().getInheritancePolicy().shouldReadSubclasses()) { cls = getDescriptor().getInheritancePolicy().classFromRow(row, executionSession); } else { cls = getDescriptor().getJavaClass(); } fieldStartIndex = ((Integer)map.get(cls)).intValue(); } Vector trimedFields = Helper.copyVector(row.getFields(), fieldStartIndex, row.size()); Vector trimedValues = Helper.copyVector(row.getValues(), fieldStartIndex, row.size()); return new DatabaseRecord(trimedFields, trimedValues); } }
Class classValue = descriptor.getInheritancePolicy().classFromRow(entityRecord, query.getSession()); descriptor = query.getSession().getDescriptor(classValue);
/** * INTERNAL: * Select one row of any concrete subclass, * This must use two selects, the first retreives the type field only. */ protected AbstractRecord selectOneRowUsingDefaultMultipleTableSubclassRead(ReadObjectQuery query) throws DatabaseException, QueryException { // Get the row for the given class indicator field // The indicator select is prepared in the original query, so can just be executed. AbstractRecord typeRow = ((ExpressionQueryMechanism)query.getQueryMechanism()).selectOneRowFromTable(); if (typeRow == null) { return null; } Class concreteClass = classFromRow(typeRow, query.getSession()); ClassDescriptor concreteDescriptor = query.getSession().getDescriptor(concreteClass); if (concreteDescriptor == null) { throw QueryException.noDescriptorForClassFromInheritancePolicy(query, concreteClass); } ReadObjectQuery concreteQuery = (ReadObjectQuery)query.clone(); concreteQuery.setReferenceClass(concreteClass); concreteQuery.setDescriptor(concreteDescriptor); AbstractRecord resultRow = ((ExpressionQueryMechanism)concreteQuery.getQueryMechanism()).selectOneRowFromConcreteTable(); return resultRow; }
Class classValue = concreteDescriptor.getInheritancePolicy().classFromRow(databaseRow, session); concreteDescriptor = session.getDescriptor(classValue); if ((concreteDescriptor == null) && query.hasPartialAttributeExpressions()) {
boolean refreshing = true; if (descriptor.hasInheritance()) { Class newAggregateClass = descriptor.getInheritancePolicy().classFromRow(databaseRow, session); descriptor = getReferenceDescriptor(newAggregateClass, session);