@Override public OIndexMatchCondition copy() { OIndexMatchCondition result = new OIndexMatchCondition(-1); result.operator = operator == null ? null : (OBinaryCompareOperator) operator.copy(); result.between = between; result.leftExpressions = leftExpressions == null ? null : leftExpressions.stream().map(x -> x.copy()).collect(Collectors.toList()); result.rightExpressions = rightExpressions == null ? null : rightExpressions.stream().map(x -> x.copy()).collect(Collectors.toList()); return result; }
@Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { return operator.execute(left.execute(currentRecord, ctx), right.execute(currentRecord, ctx)); }
@Override protected List<Object> getExternalCalculationConditions() { List<Object> result = new ArrayList<Object>(); if (operator != null && !operator.supportsBasicCalculation()) { result.add(this); } if (rightMathExpression != null && !rightMathExpression.supportsBasicCalculation()) { result.add(rightMathExpression); } return result; }
public int cost(OCommandContext ctx) { OQueryStats stats = OQueryStats.get((ODatabaseDocumentInternal) ctx.getDatabase()); String indexName = idx.getName(); int size = keyCondition.getSubBlocks().size(); boolean range = false; OBooleanExpression lastOp = keyCondition.getSubBlocks().get(keyCondition.getSubBlocks().size() - 1); if (lastOp instanceof OBinaryCondition) { OBinaryCompareOperator op = ((OBinaryCondition) lastOp).getOperator(); range = op.isRangeOperator(); } long val = stats.getIndexStats(indexName, size, range, additionalRangeCondition != null); if (val == -1) { //TODO query the index! } if (val >= 0) { return val > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) val; } return Integer.MAX_VALUE; } }
private void updateIndexStats() { //stats OQueryStats stats = OQueryStats.get((ODatabaseDocumentInternal) ctx.getDatabase()); if (index == null) { return;//this could happen, if not inited yet } String indexName = index.getName(); boolean range = false; int size = 0; if (condition == null) { size = 0; } else if (condition instanceof OBinaryCondition) { size = 1; } else if (condition instanceof OBetweenCondition) { size = 1; range = true; } else if (condition instanceof OAndBlock) { OAndBlock andBlock = ((OAndBlock) condition); size = andBlock.getSubBlocks().size(); OBooleanExpression lastOp = andBlock.getSubBlocks().get(andBlock.getSubBlocks().size() - 1); if (lastOp instanceof OBinaryCondition) { OBinaryCompareOperator op = ((OBinaryCondition) lastOp).getOperator(); range = op.isRangeOperator(); } } else if (condition instanceof OInCondition) { size = 1; } stats.pushIndexStats(indexName, size, range, additionalRangeCondition != null, count); }
@Override protected List<Object> getExternalCalculationConditions() { List<Object> result = new ArrayList<Object>(); if (!operator.supportsBasicCalculation()) { result.add(this); } if (!left.supportsBasicCalculation()) { result.add(left); } if (!right.supportsBasicCalculation()) { result.add(right); } return result; }
@Override public ORightBinaryCondition copy() { ORightBinaryCondition result = new ORightBinaryCondition(-1); result.operator = operator == null ? null : operator.copy(); result.not = not; result.inOperator = inOperator == null ? null : inOperator.copy(); result.right = right == null ? null : right.copy(); return result; }
private boolean evaluateAny(OResult currentRecord, OCommandContext ctx) { for (String s : currentRecord.getPropertyNames()) { Object leftVal = currentRecord.getProperty(s); Object rightVal = right.execute(currentRecord, ctx); //TODO collate if (operator.execute(leftVal, rightVal)) { return true; } } return false; }
blockIterator.remove(); break; } else if (allowsRange && operator.isRangeOperator()) { found = true; indexFieldFound = true;
protected boolean supportsBasicCalculation() { if (!operator.supportsBasicCalculation()) { return false; } return left.supportsBasicCalculation() && right.supportsBasicCalculation(); }
@Override public OBinaryCondition copy() { OBinaryCondition result = new OBinaryCondition(-1); result.left = left.copy(); result.operator = (OBinaryCompareOperator) operator.copy(); result.right = right.copy(); return result; }
private boolean matchesFilters(OResult iCurrentRecord, Object element, OCommandContext ctx) { if (operator != null) { return operator.execute(element, right.execute(iCurrentRecord, ctx)); } else if (inOperator != null) { Object rightVal = evaluateRight(iCurrentRecord, ctx); if (rightVal == null) { return false; } boolean result = OInCondition.evaluateExpression(element, rightVal); if (not) { result = !result; } return result; } return false; }
@Override public boolean supportsBasicCalculation() { if (operator != null && !operator.supportsBasicCalculation()) { return false; } if (left != null && !left.supportsBasicCalculation()) { return false; } if (rightMathExpression != null && !rightMathExpression.supportsBasicCalculation()) { return false; } return true; }
@Override public ONotInCondition copy() { ONotInCondition result = new ONotInCondition(-1); result.operator = operator == null ? null : (OBinaryCompareOperator) operator.copy(); result.left = left == null ? null : left.copy(); result.rightMathExpression = rightMathExpression == null ? null : rightMathExpression.copy(); result.rightStatement = rightStatement == null ? null : rightStatement.copy(); result.rightParam = rightParam == null ? null : rightParam.copy(); result.right = right == null ? null : right; return result; }
private boolean matchesFilters(OIdentifiable iCurrentRecord, Object element, OCommandContext ctx) { if (operator != null) { operator.execute(element, right.execute(iCurrentRecord, ctx)); } else if (inOperator != null) { Object rightVal = evaluateRight(iCurrentRecord, ctx); if (rightVal == null) { return false; } boolean result = OInCondition.evaluateExpression(element, rightVal); if (not) { result = !result; } return result; } return false; }
@Override public boolean supportsBasicCalculation() { if (!left.supportsBasicCalculation()) { return false; } if (!rightMathExpression.supportsBasicCalculation()) { return false; } if (!operator.supportsBasicCalculation()) { return false; } return true; }
@Override public OInCondition copy() { OInCondition result = new OInCondition(-1); result.operator = operator == null ? null : (OBinaryCompareOperator) operator.copy(); result.left = left == null ? null : left.copy(); result.rightMathExpression = rightMathExpression == null ? null : rightMathExpression.copy(); result.rightStatement = rightStatement == null ? null : rightStatement.copy(); result.rightParam = rightParam == null ? null : rightParam.copy(); result.right = right == null ? null : right; return result; }
@Override public boolean evaluate(OResult currentRecord, OCommandContext ctx) { if (left.isFunctionAny()) { return evaluateAny(currentRecord, ctx); } Object leftVal = left.execute(currentRecord, ctx); Object rightVal = right.execute(currentRecord, ctx); OCollate collate = left.getCollate(currentRecord, ctx); if (collate == null) { collate = right.getCollate(currentRecord, ctx); } if (collate != null) { leftVal = collate.transform(leftVal); rightVal = collate.transform(rightVal); } return operator.execute(leftVal, rightVal); }
@Override protected int getNumberOfExternalCalculations() { int total = 0; if (operator != null && !operator.supportsBasicCalculation()) { total++; } if (left != null && !left.supportsBasicCalculation()) { total++; } if (rightMathExpression != null && !rightMathExpression.supportsBasicCalculation()) { total++; } return total; }
@Override protected int getNumberOfExternalCalculations() { int total = 0; if (operator != null && !operator.supportsBasicCalculation()) { total++; } if (!left.supportsBasicCalculation()) { total++; } if (rightMathExpression != null && !rightMathExpression.supportsBasicCalculation()) { total++; } return total; }