public List<String> fields() { final List<String> result = new ArrayList<String>(fieldValuePairs.size() + 1); result.addAll(fieldValuePairs.keySet()); result.add(lastField.getItemName(0)); return result; }
private OIndexSearchResult mergeFields(OIndexSearchResult mainSearchResult, OIndexSearchResult searchResult) { OIndexSearchResult result = new OIndexSearchResult(mainSearchResult.lastOperator, mainSearchResult.lastField, mainSearchResult.lastValue); result.fieldValuePairs.putAll(searchResult.fieldValuePairs); result.fieldValuePairs.putAll(mainSearchResult.fieldValuePairs); result.fieldValuePairs.put(searchResult.lastField.getItemName(0), searchResult.lastValue); result.containsNullValues = searchResult.containsNullValues || this.containsNullValues; return result; }
private static Collection<OIndex<?>> prepareLastIndexVariants(OClass iSchemaClass, OSQLFilterItemField.FieldChain fieldChain) { OClass oClass = iSchemaClass; final Collection<OIndex<?>> result = new ArrayList<OIndex<?>>(); for (int i = 0; i < fieldChain.getItemCount() - 1; i++) { oClass = oClass.getProperty(fieldChain.getItemName(i)).getLinkedClass(); if (oClass == null) { return result; } } final Set<OIndex<?>> involvedIndexes = new TreeSet<OIndex<?>>(new Comparator<OIndex<?>>() { public int compare(OIndex<?> o1, OIndex<?> o2) { return o1.getDefinition().getParamCount() - o2.getDefinition().getParamCount(); } }); involvedIndexes.addAll(oClass.getInvolvedIndexes(fieldChain.getItemName(fieldChain.getItemCount() - 1))); final Collection<Class<? extends OIndex>> indexTypes = new HashSet<Class<? extends OIndex>>(3); for (OIndex<?> involvedIndex : involvedIndexes) { if (!indexTypes.contains(involvedIndex.getInternal().getClass())) { result.add(involvedIndex); indexTypes.add(involvedIndex.getInternal().getClass()); } } return result; }
final String lastFiled = searchResult.lastField.getItemName(searchResult.lastField.getItemCount() - 1); final String relatedIndexField = indexDefinition.getFields().get(searchResult.fieldValuePairs.size()); if (!lastFiled.equals(relatedIndexField)) {
final String lastFiled = searchResult.lastField.getItemName(searchResult.lastField.getItemCount() - 1); final String relatedIndexField = indexDefinition.getFields().get(searchResult.fieldValuePairs.size()); if (!lastFiled.equals(relatedIndexField)) {
String fieldName = ((OSQLFilterItemField) iCondition.getLeft()).getFieldChain().getItemName(0); if(fieldName!=null) { Object record = iRecord.getRecord();
if (iCondition.getLeft() instanceof OSQLFilterItemField && ((OSQLFilterItemField) iCondition.getLeft()).isFieldChain() && ((OSQLFilterItemField) iCondition.getLeft()).getFieldChain().getItemCount() == 1) { String fieldName = ((OSQLFilterItemField) iCondition.getLeft()).getFieldChain().getItemName(0); if (fieldName != null) { Object record = iRecord.getRecord();
return null; Object nextDoc = lastDoc.field(chain.getItemName(i)); if (nextDoc == null || !(nextDoc instanceof OIdentifiable)) { return null; return null; OProperty property = schemaClass.getProperty(chain.getItemName(chain.getItemCount() - 1)); if (property == null) { return null;
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(); } }
protected OLuceneFullTextIndex involvedIndex(OIdentifiable iRecord, ODocument iCurrentResult, OSQLFilterCondition iCondition, Object iLeft, Object iRight) { ODocument doc = iRecord.getRecord(); OClass cls = getDatabase().getMetadata().getSchema().getClass(doc.getClassName()); if (isChained(iCondition.getLeft())) { OSQLFilterItemField chained = (OSQLFilterItemField) iCondition.getLeft(); OSQLFilterItemField.FieldChain fieldChain = chained.getFieldChain(); OClass oClass = cls; for (int i = 0; i < fieldChain.getItemCount() - 1; i++) { oClass = oClass.getProperty(fieldChain.getItemName(i)).getLinkedClass(); } if (oClass != null) { cls = oClass; } } Set<OIndex<?>> classInvolvedIndexes = cls.getInvolvedIndexes(fields(iCondition)); OLuceneFullTextIndex idx = null; for (OIndex<?> classInvolvedIndex : classInvolvedIndexes) { if (classInvolvedIndex.getInternal() instanceof OLuceneFullTextIndex) { idx = (OLuceneFullTextIndex) classInvolvedIndex.getInternal(); break; } } return idx; }
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[] 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; }
public static boolean checkIndexExistence(final OClass iSchemaClass, final OIndexSearchResult result) { if (!iSchemaClass.areIndexed(result.fields())) return false; if (result.lastField.isLong()) { final int fieldCount = result.lastField.getItemCount(); OClass cls = iSchemaClass.getProperty(result.lastField.getItemName(0)).getLinkedClass(); for (int i = 1; i < fieldCount; i++) { if (cls == null || !cls.areIndexed(result.lastField.getItemName(i))) { return false; } cls = cls.getProperty(result.lastField.getItemName(i)).getLinkedClass(); } } return true; }
public static boolean checkIndexExistence(final OClass iSchemaClass, final OIndexSearchResult result) { if (!iSchemaClass.areIndexed(result.fields())) return false; if (result.lastField.isLong()) { final int fieldCount = result.lastField.getItemCount(); OClass cls = iSchemaClass.getProperty(result.lastField.getItemName(0)).getLinkedClass(); for (int i = 1; i < fieldCount; i++) { if (cls == null || !cls.areIndexed(result.lastField.getItemName(i))) { return false; } cls = cls.getProperty(result.lastField.getItemName(i)).getLinkedClass(); } } return true; }
private static List<OIndex<?>> prepareBaseIndexes(OClass iSchemaClass, OSQLFilterItemField.FieldChain fieldChain) { List<OIndex<?>> result = new ArrayList<OIndex<?>>(fieldChain.getItemCount() - 1); OClass oClass = iSchemaClass; for (int i = 0; i < fieldChain.getItemCount() - 1; i++) { final Set<OIndex<?>> involvedIndexes = oClass.getInvolvedIndexes(fieldChain.getItemName(i)); final OIndex<?> bestIndex = findBestIndex(involvedIndexes); if (bestIndex == null) return null; result.add(bestIndex); oClass = oClass.getProperty(fieldChain.getItemName(i)).getLinkedClass(); } return result; }
private boolean checkIndexChainExistence(OClass iSchemaClass, OIndexSearchResult result) { final int fieldCount = result.lastField.getItemCount(); OClass cls = iSchemaClass.getProperty(result.lastField.getItemName(0)).getLinkedClass(); for (int i = 1; i < fieldCount; i++) { if (cls == null || !cls.areIndexed(result.lastField.getItemName(i))) { return false; } cls = cls.getProperty(result.lastField.getItemName(i)).getLinkedClass(); } return true; } }
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); } } }