private boolean isRidRange(OBooleanExpression booleanExpression, OCommandContext ctx) { if (booleanExpression instanceof OBinaryCondition) { OBinaryCondition cond = ((OBinaryCondition) booleanExpression); OBinaryCompareOperator operator = cond.getOperator(); if (isRangeOperator(operator) && cond.getLeft().toString().equalsIgnoreCase("@rid")) { Object obj; if (cond.getRight().getRid() != null) { obj = cond.getRight().getRid().toRecordId((OResult) null, ctx); } else { obj = cond.getRight().execute((OResult) null, ctx); } return obj instanceof OIdentifiable; } } return false; }
private OCollection indexKeyFrom(OAndBlock keyCondition, OBinaryCondition additional) { OCollection result = new OCollection(-1); for (OBooleanExpression exp : keyCondition.getSubBlocks()) { if (exp instanceof OBinaryCondition) { OBinaryCondition binaryCond = ((OBinaryCondition) exp); OBinaryCompareOperator operator = binaryCond.getOperator(); if ((operator instanceof OEqualsCompareOperator) || (operator instanceof OGtOperator) || (operator instanceof OGeOperator)) { result.add(binaryCond.getRight()); } else if (additional != null) { result.add(additional.getRight()); } } else { throw new UnsupportedOperationException("Cannot execute index query with " + exp); } } return result; }
private OCollection indexKeyTo(OAndBlock keyCondition, OBinaryCondition additional) { OCollection result = new OCollection(-1); for (OBooleanExpression exp : keyCondition.getSubBlocks()) { if (exp instanceof OBinaryCondition) { OBinaryCondition binaryCond = ((OBinaryCondition) exp); OBinaryCompareOperator operator = binaryCond.getOperator(); if ((operator instanceof OEqualsCompareOperator) || (operator instanceof OLtOperator) || (operator instanceof OLeOperator)) { result.add(binaryCond.getRight()); } else if (additional != null) { result.add(additional.getRight()); } } else { throw new UnsupportedOperationException("Cannot execute index query with " + exp); } } return result; }
private long calculateMaxClusterPosition() { if (queryPlanning == null || queryPlanning.ridRangeConditions == null || queryPlanning.ridRangeConditions.isEmpty()) { return -1; } long minValue = Long.MAX_VALUE; for (OBooleanExpression ridRangeCondition : queryPlanning.ridRangeConditions.getSubBlocks()) { if (ridRangeCondition instanceof OBinaryCondition) { OBinaryCondition cond = (OBinaryCondition) ridRangeCondition; ORID conditionRid; Object obj; if (((OBinaryCondition) ridRangeCondition).getRight().getRid() != null) { obj = ((OBinaryCondition) ridRangeCondition).getRight().getRid().toRecordId((OResult) null, ctx); } else { obj = ((OBinaryCondition) ridRangeCondition).getRight().execute((OResult) null, ctx); } conditionRid = ((OIdentifiable) obj).getIdentity(); OBinaryCompareOperator operator = cond.getOperator(); if (conditionRid != null) { if (conditionRid.getClusterId() != this.clusterId) { continue; } if (operator instanceof OLtOperator || operator instanceof OLeOperator) { minValue = Math.min(minValue, conditionRid.getClusterPosition()); } } } } return minValue == Long.MAX_VALUE ? -1 : minValue; }
private boolean clusterMatchesRidRange(String clusterName, OAndBlock ridRangeConditions, ODatabase database, OCommandContext ctx) { int thisClusterId = database.getClusterIdByName(clusterName); for (OBooleanExpression ridRangeCondition : ridRangeConditions.getSubBlocks()) { if (ridRangeCondition instanceof OBinaryCondition) { OBinaryCompareOperator operator = ((OBinaryCondition) ridRangeCondition).getOperator(); ORID conditionRid; Object obj; if (((OBinaryCondition) ridRangeCondition).getRight().getRid() != null) { obj = ((OBinaryCondition) ridRangeCondition).getRight().getRid().toRecordId((OResult) null, ctx); } else { obj = ((OBinaryCondition) ridRangeCondition).getRight().execute((OResult) null, ctx); } conditionRid = ((OIdentifiable) obj).getIdentity(); if (conditionRid != null) { int conditionClusterId = conditionRid.getClusterId(); if (operator instanceof OGtOperator || operator instanceof OGeOperator) { if (thisClusterId < conditionClusterId) { return false; } } else if (operator instanceof OLtOperator || operator instanceof OLeOperator) { if (thisClusterId > conditionClusterId) { return false; } } } } } return true; }
private void processBinaryCondition() { OIndexDefinition definition = index.getDefinition(); OBinaryCompareOperator operator = ((OBinaryCondition) condition).getOperator(); OExpression left = ((OBinaryCondition) condition).getLeft(); if (!left.toString().equalsIgnoreCase("key")) { throw new OCommandExecutionException("search for index for " + condition + " is not supported yet"); } Object rightValue = ((OBinaryCondition) condition).getRight().execute((OResult) null, ctx); cursor = createCursor(operator, definition, rightValue, ctx); }
private long calculateMinClusterPosition() { if (queryPlanning == null || queryPlanning.ridRangeConditions == null || queryPlanning.ridRangeConditions.isEmpty()) { return -1; } long maxValue = -1; for (OBooleanExpression ridRangeCondition : queryPlanning.ridRangeConditions.getSubBlocks()) { if (ridRangeCondition instanceof OBinaryCondition) { OBinaryCondition cond = (OBinaryCondition) ridRangeCondition; ORid condRid = cond.getRight().getRid(); OBinaryCompareOperator operator = cond.getOperator(); if (condRid != null) { if (condRid.getCluster().getValue().intValue() != this.clusterId) { continue; } if (operator instanceof OGtOperator || operator instanceof OGeOperator) { maxValue = Math.max(maxValue, condRid.getPosition().getValue().longValue()); } } } } return maxValue; }
private void processBinaryCondition() { OIndexDefinition definition = index.getDefinition(); OBinaryCompareOperator operator = ((OBinaryCondition) condition).getOperator(); OExpression left = ((OBinaryCondition) condition).getLeft(); if (!left.toString().equalsIgnoreCase("key")) { throw new OCommandExecutionException("search for index for " + condition + " is not supported yet"); } Object rightValue = ((OBinaryCondition) condition).getRight().execute((OResult) null, ctx); cursor = createCursor(operator, definition, rightValue, ctx); if (cursor != null) { fetchNextEntry(); } }
if ((operator instanceof OEqualsCompareOperator) || (operator instanceof OGtOperator) || (operator instanceof OGeOperator) || (operator instanceof OContainsKeyOperator) || (operator instanceof OContainsValueOperator)) { result.add(binaryCond.getRight()); } else if (additional != null) { result.add(additional.getRight());
if ((operator instanceof OEqualsCompareOperator) || (operator instanceof OLtOperator) || (operator instanceof OLeOperator) || (operator instanceof OContainsKeyOperator) || (operator instanceof OContainsValueOperator)) { result.add(binaryCond.getRight()); } else if (additional != null) { result.add(additional.getRight());
indexCond.setLeft(new OExpression(new OIdentifier("key"))); indexCond.setOperator(new OEqualsCompareOperator(-1)); indexCond.setRight(((OBinaryCondition) condition).getRight().copy()); result.chain(new FetchFromIndexStep(classIndex, indexCond, null, ctx, profilingEnabled)); result.chain(new AggregateProjectionCalculationStep(info.aggregateProjection, info.groupBy, ctx, profilingEnabled));
if (indexField.equals(fieldName)) { OBinaryCompareOperator operator = ((OBinaryCondition) singleExp).getOperator(); if (!((OBinaryCondition) singleExp).getRight().isEarlyCalculated(ctx)) { continue; //this cannot be used because the value depends on single record condition.setLeft(left); condition.setOperator(operator); condition.setRight(((OBinaryCondition) singleExp).getRight().copy()); indexKeyValue.getSubBlocks().add(condition); blockIterator.remove(); condition.setLeft(left); condition.setOperator(operator); condition.setRight(((OBinaryCondition) singleExp).getRight().copy()); indexKeyValue.getSubBlocks().add(condition); blockIterator.remove(); condition.setLeft(left); condition.setOperator(operator); condition.setRight(((OBinaryCondition) singleExp).getRight().copy()); indexKeyValue.getSubBlocks().add(condition); blockIterator.remove();