private void extractInvolvedFields(Object left, List<String> list) { if (left != null) { if (left instanceof OSQLFilterItemField) { if (((OSQLFilterItemField) left).isFieldChain()) { list.add(((OSQLFilterItemField) left).getFieldChain().getItemName( ((OSQLFilterItemField) left).getFieldChain().getItemCount() - 1)); } } else if (left instanceof OSQLFilterCondition) { ((OSQLFilterCondition) left).getInvolvedFields(list); } } }
private boolean isSameField(OSQLFilterItemField field, String fieldName) { return !field.hasChainOperators() && fieldName.equals(field.name); } }
public OCollate getCollate(OIdentifiable doc) { if (left instanceof OSQLFilterItemField) { return ((OSQLFilterItemField) left).getCollate(doc); } else if (right instanceof OSQLFilterItemField) { return ((OSQLFilterItemField) right).getCollate(doc); } return null; }
protected Set<String> computePrefetchFieldList(final OSQLFilterCondition iCondition, final Set<String> iFields) { Object left = iCondition.getLeft(); Object right = iCondition.getRight(); if (left instanceof OSQLFilterItemField) { ((OSQLFilterItemField) left).setPreLoadedFields(iFields); iFields.add(((OSQLFilterItemField) left).getRoot()); } else if (left instanceof OSQLFilterCondition) computePrefetchFieldList((OSQLFilterCondition) left, iFields); if (right instanceof OSQLFilterItemField) { ((OSQLFilterItemField) right).setPreLoadedFields(iFields); iFields.add(((OSQLFilterItemField) right).getRoot()); } else if (right instanceof OSQLFilterCondition) computePrefetchFieldList((OSQLFilterCondition) right, iFields); return iFields; } }
protected Collection<String> fields(OSQLFilterCondition iCondition) { Object left = iCondition.getLeft(); if (left instanceof String) { String fName = (String) left; return Arrays.asList(fName); } if (left instanceof Collection) { Collection<OSQLFilterItemField> f = (Collection<OSQLFilterItemField>) left; List<String> fields = new ArrayList<String>(); for (OSQLFilterItemField field : f) { fields.add(field.toString()); } return fields; } if (left instanceof OSQLFilterItemField) { OSQLFilterItemField fName = (OSQLFilterItemField) left; if (fName.isFieldChain()) { int itemCount = fName.getFieldChain().getItemCount(); return Arrays.asList(fName.getFieldChain().getItemName(itemCount - 1)); } else { return Arrays.asList(fName.toString()); } } return Collections.emptyList(); } }
public static OIndexSearchResult createIndexedProperty(final OSQLFilterCondition iCondition, final Object iItem) { if (iItem == null || !(iItem instanceof OSQLFilterItemField)) return null; if (iCondition.getLeft() instanceof OSQLFilterItemField && iCondition.getRight() instanceof OSQLFilterItemField) return null; final OSQLFilterItemField item = (OSQLFilterItemField) iItem; if (item.hasChainOperators() && !item.isFieldChain()) return null; final Object origValue = iCondition.getLeft() == iItem ? iCondition.getRight() : iCondition.getLeft(); if (iCondition.getOperator() instanceof OQueryOperatorBetween || iCondition.getOperator() instanceof OQueryOperatorIn) { return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), origValue); } final Object value = OSQLHelper.getValue(origValue); if (value == null) return null; return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); }
if (!itemField.isFieldChain()) { return null; if (itemField.getFieldChain().getItemCount() > 1) { return null; rightField = itemField.getRoot(); betweenBoundaries.add(rightCondition.getRight()); } else if (rightCondition.getRight() instanceof OSQLFilterItemField) { final OSQLFilterItemField itemField = (OSQLFilterItemField) rightCondition.getRight(); if (!itemField.isFieldChain()) { return null; if (itemField.getFieldChain().getItemCount() > 1) { return null; rightField = itemField.getRoot(); betweenBoundaries.add(rightCondition.getLeft()); } else { if (leftCondition.getLeft() instanceof OSQLFilterItemField) { final OSQLFilterItemField itemField = (OSQLFilterItemField) leftCondition.getLeft(); if (!itemField.isFieldChain()) { return null; if (itemField.getFieldChain().getItemCount() > 1) { return null; leftField = itemField.getRoot();
private Object[] parseParams(OIdentifiable iRecord, OSQLFilterCondition iCondition) { ODocument oDocument = (ODocument) iRecord; Collection left = (Collection) iCondition.getLeft(); Collection right = (Collection) iCondition.getRight(); Object[] params = new Object[(left.size() * 2) - 2]; int i = 0; for (Object obj : left) { if (obj instanceof OSQLFilterItemField) { String fName = ((OSQLFilterItemField) obj).getFieldChain().getItemName(0); params[i] = oDocument.field(fName); i++; } } for (Object obj : right) { if (obj instanceof Number) { params[i] = ((Double) OType.convert(obj, Double.class)).doubleValue(); ; i++; } } return params; }
private OIdentifiable getIndexValue(OCommandParameters commandParameters, Map<String, Object> candidate) { final Object parsedRid = candidate.get(KEYWORD_RID); if (parsedRid instanceof OSQLFilterItemField) { final OSQLFilterItemField f = (OSQLFilterItemField) parsedRid; if (f.getRoot().equals("?")) // POSITIONAL PARAMETER return (OIdentifiable) commandParameters.getNext(); else if (f.getRoot().startsWith(":")) // NAMED PARAMETER return (OIdentifiable) commandParameters.getByName(f.getRoot().substring(1)); } return (OIdentifiable) parsedRid; }
private boolean isChained(Object left) { if (left instanceof OSQLFilterItemField) { OSQLFilterItemField field = (OSQLFilterItemField) left; return field.isFieldChain(); } return false; }
public Object getValue(final OIdentifiable iRecord, final Object iCurrentResult, final OCommandContext iContext) { if (iRecord == null) throw new OCommandExecutionException("expression item '" + name + "' cannot be resolved because current record is NULL"); if (preLoadedFields != null && preLoadedFields.size() == 1) { if ("@rid".equalsIgnoreCase(preLoadedFields.iterator().next())) return iRecord.getIdentity(); } final ODocument doc = (ODocument) iRecord.getRecord(); if (preLoadedFieldsArray == null && preLoadedFields != null && preLoadedFields.size() > 0 && preLoadedFields.size() < 5) { // TRANSFORM THE SET IN ARRAY ONLY THE FIRST TIME AND IF FIELDS ARE MORE THAN ONE, OTHERWISE GO WITH THE DEFAULT BEHAVIOR preLoadedFieldsArray = new String[preLoadedFields.size()]; preLoadedFields.toArray(preLoadedFieldsArray); } // UNMARSHALL THE SINGLE FIELD if (preLoadedFieldsArray != null && !doc.deserializeFields(preLoadedFieldsArray)) return null; final Object v = stringValue == null ? doc.rawField(name) : stringValue; if (!collatePreset && doc != null) { OClass schemaClass = doc.getSchemaClass(); if (schemaClass != null) { collate = getCollateForField(schemaClass, name); } } return transformValue(iRecord, iContext, v); }
public OSQLFilterItemField(final OBaseParser iQueryToParse, final String iName, final OClass iClass) { super(iQueryToParse, iName); collate = getCollateForField(iClass, iName); if (iClass != null) { collatePreset = true; } }
runtimeParameters[i] = ((OSQLFilterItemField) configuredParameters[i]).getValue(iCurrentRecord, iCurrentResult, iContext); if (runtimeParameters[i] == null && iCurrentResult instanceof OIdentifiable) runtimeParameters[i] = ((OSQLFilterItemField) configuredParameters[i]).getValue((OIdentifiable) iCurrentResult, iCurrentResult, iContext); } else if (configuredParameters[i] instanceof OSQLMethodRuntime)
public void setRoot(final OBaseParser iQueryToParse, final String iRoot) { if (isStringLiteral(iRoot)) { this.stringValue = OIOUtils.getStringContent(iRoot); } //TODO support all the basic types this.name = OIOUtils.getStringContent(iRoot); }
public static Object parseValue(final OBaseParser iCommand, final String iWord, final OCommandContext iContext, boolean resolveContextVariables) { if (iWord.equals("*")) return "*"; // TRY TO PARSE AS RAW VALUE final Object v = parseValue(iWord, iContext, resolveContextVariables); if (v != VALUE_NOT_PARSED) return v; if (!iWord.equalsIgnoreCase("any()") && !iWord.equalsIgnoreCase("all()")) { // TRY TO PARSE AS FUNCTION final Object func = OSQLHelper.getFunction(iCommand, iWord); if (func != null) return func; } if (iWord.startsWith("$")) // CONTEXT VARIABLE return new OSQLFilterItemVariable(iCommand, iWord); // PARSE AS FIELD return new OSQLFilterItemField(iCommand, iWord, null); }
final OBinaryField bField = ((OSQLFilterItemField) iValue).getBinaryField(iCurrentRecord); if (bField != null) return bField;
public static OIndexSearchResult createIndexedProperty(final OSQLFilterCondition iCondition, final Object iItem) { if (iItem == null || !(iItem instanceof OSQLFilterItemField)) return null; if (iCondition.getLeft() instanceof OSQLFilterItemField && iCondition.getRight() instanceof OSQLFilterItemField) return null; final OSQLFilterItemField item = (OSQLFilterItemField) iItem; if (item.hasChainOperators() && !item.isFieldChain()) return null; final Object origValue = iCondition.getLeft() == iItem ? iCondition.getRight() : iCondition.getLeft(); if (iCondition.getOperator() instanceof OQueryOperatorBetween || iCondition.getOperator() instanceof OQueryOperatorIn) { return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), origValue); } final Object value = OSQLHelper.getValue(origValue); if (value == null) return null; return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); }
private Object[] parseParams(OIdentifiable iRecord, OSQLFilterCondition iCondition) { ODocument oDocument = (ODocument) iRecord; Collection left = (Collection) iCondition.getLeft(); Collection right = (Collection) iCondition.getRight(); Object[] params = new Object[(left.size() * 2) - 2]; int i = 0; for (Object obj : left) { if (obj instanceof OSQLFilterItemField) { String fName = ((OSQLFilterItemField) obj).getFieldChain().getItemName(0); params[i] = oDocument.field(fName); i++; } } for (Object obj : right) { if (obj instanceof Number) { params[i] = ((Double) OType.convert(obj, Double.class)).doubleValue(); ; i++; } } return params; }
private Object getIndexKeyValue(OCommandParameters commandParameters, Map<String, Object> candidate) { final Object parsedKey = candidate.get(KEYWORD_KEY); if (parsedKey instanceof OSQLFilterItemField) { final OSQLFilterItemField f = (OSQLFilterItemField) parsedKey; if (f.getRoot().equals("?")) // POSITIONAL PARAMETER return commandParameters.getNext(); else if (f.getRoot().startsWith(":")) // NAMED PARAMETER return commandParameters.getByName(f.getRoot().substring(1)); } return parsedKey; }
/** * Creates {@code FieldChain} in case when filter item can have such representation. * * @return {@code FieldChain} representation of this filter item. * @throws IllegalStateException if this filter item cannot be represented as {@code FieldChain}. */ public FieldChain getFieldChain() { if (!isFieldChain()) { throw new IllegalStateException("Filter item field contains not only field operators"); } return new FieldChain(); }