/** * INTERNAL: * Check if the object conforms to the expression in memory. * This is used for in-memory querying. * If the expression in not able to determine if the object conform throw a not supported exception. */ public boolean doesConform(Object object, AbstractSession session, AbstractRecord translationRow, int valueHolderPolicy, boolean objectIsUnregistered) { // This should always be and or or. if (getOperator().getSelector() == ExpressionOperator.And) { return getFirstChild().doesConform(object, session, translationRow, valueHolderPolicy, objectIsUnregistered) && getSecondChild().doesConform(object, session, translationRow, valueHolderPolicy, objectIsUnregistered); } else if (getOperator().getSelector() == ExpressionOperator.Or) { return getFirstChild().doesConform(object, session, translationRow, valueHolderPolicy, objectIsUnregistered) || getSecondChild().doesConform(object, session, translationRow, valueHolderPolicy, objectIsUnregistered); } throw QueryException.cannotConformExpression(); }
return new RelationExpression(); } else if (this.nodeClass == ClassConstants.LogicalExpression_Class) { return new LogicalExpression();
criteria = ((LogicalExpression)criteria).getFirstChild();
criteria = ((LogicalExpression)criteria).getFirstChild();
/** * INTERNAL: * Extract the primary key from the expression into the row. * Ensure that the query is querying the exact primary key. * Return false if not on the primary key. */ public boolean extractPrimaryKeyValues(boolean requireExactMatch, ClassDescriptor descriptor, AbstractRecord primaryKeyRow, AbstractRecord translationRow) { // If this is a primary key expression then it can only have and/or relationships. if (getOperator().getSelector() != ExpressionOperator.And) { // If this is an exact primary key expression it can not have ors. // After fixing bug 2782991 this must now work correctly. if (requireExactMatch || (getOperator().getSelector() != ExpressionOperator.Or)) { return false; } } boolean validExpression = getFirstChild().extractPrimaryKeyValues(requireExactMatch, descriptor, primaryKeyRow, translationRow); if (requireExactMatch && (!validExpression)) { return false; } return getSecondChild().extractPrimaryKeyValues(requireExactMatch, descriptor, primaryKeyRow, translationRow); }
criteria = ((LogicalExpression)criteria).getFirstChild();
return new RelationExpression(); } else if (this.nodeClass == ClassConstants.LogicalExpression_Class) { return new LogicalExpression();
DatabaseRecord first = new DatabaseRecord(); DatabaseRecord second = new DatabaseRecord(); appendExpressionToQueryRow(logic.getFirstChild(), first, query); appendExpressionToQueryRow(logic.getSecondChild(), second, query); List nested = new Vector(); nested.add(first); nested.add(second); if (logic.getOperator().getSelector() == ExpressionOperator.And) { row.put("$and", nested); } else if (logic.getOperator().getSelector() == ExpressionOperator.Or) { row.put("$or", nested); } else {
return new RelationExpression(); } else if (this.nodeClass == ClassConstants.LogicalExpression_Class) { return new LogicalExpression();