@Override public Object executeBlock() { final Object v = expression != null ? expression.evaluate(null, null, context) : resolve(value); context.setVariable(name, v); return v; } }
public OSQLFilter parseCondition(final String iText, final OCommandContext iContext, final String iFilterKeyword) { return new OSQLFilter(iText, iContext, iFilterKeyword); }
private boolean matchesFilters(OIdentifiable value) { if (this.compiledFilter == null || this.compiledFilter.getRootCondition() == null) { return true; } if (!(value instanceof ODocument)) { value = value.getRecord(); } return !(Boolean.FALSE.equals(compiledFilter.evaluate((ODocument) value, (ODocument) value, getContext()))); }
public void optimize(OSQLFilter filter, OIndexSearchResult indexMatch) { filter.setRootCondition(optimize(filter.getRootCondition(), indexMatch)); }
public OSQLFilter(final String iText, final OCommandContext iContext, final String iFilterKeyword) { super(); if (iText == null) { throw new IllegalArgumentException("Filter expression is null"); } context = iContext; parserText = iText; parserTextUpperCase = iText.toUpperCase(Locale.ENGLISH); try { final int lastPos = parserGetCurrentPosition(); final String lastText = parserText; final String lastTextUpperCase = parserTextUpperCase; text(parserText.substring(lastPos)); parserText = lastText; parserTextUpperCase = lastTextUpperCase; parserMoveCurrentPosition(lastPos); } catch (OQueryParsingException e) { if (e.getText() == null) // QUERY EXCEPTION BUT WITHOUT TEXT: NEST IT { throw OException.wrapException( new OQueryParsingException("Error on parsing query", parserText, parserGetCurrentPosition()), e); } throw e; } catch (Exception e) { throw OException.wrapException(new OQueryParsingException("Error on parsing query", parserText, parserGetCurrentPosition()), e); } this.rootCondition = resetOperatorPrecedence(rootCondition); }
if (sqlFilter == null) sqlFilter = new OSQLFilter(expression, context, null); newValue = sqlFilter.evaluate(doc, null, context); } else newValue = value;
.parseCondition(parserText.substring(parserGetCurrentPosition(), endPosition), getContext(), KEYWORD_WHERE); optimize(); parserSetCurrentPosition(compiledFilter.parserIsEnded() ? endPosition : compiledFilter.parserGetCurrentPosition() + parserGetCurrentPosition()); } else if (w.equals(KEYWORD_LET)) { parseLet();
/** * Optimizes the condition tree. */ protected void optimize() { if (compiledFilter != null) optimizeBranch(null, compiledFilter.getRootCondition()); }
compiledFilter.bindParameters(iArgs); Object value = VALUE_NOT_FOUND; if (compiledFilter == null || compiledFilter.getRootCondition() == null) { if (returning.equalsIgnoreCase("COUNT")) { if (KEYWORD_KEY.equalsIgnoreCase(compiledFilter.getRootCondition().getLeft().toString())) key = getIndexKey(index.getDefinition(), compiledFilter.getRootCondition().getRight()); else if (KEYWORD_RID.equalsIgnoreCase(compiledFilter.getRootCondition().getLeft().toString())) { value = OSQLHelper.getValue(compiledFilter.getRootCondition().getRight()); } else if (compiledFilter.getRootCondition().getLeft() instanceof OSQLFilterCondition) { final OSQLFilterCondition leftCondition = (OSQLFilterCondition) compiledFilter.getRootCondition().getLeft(); if (KEYWORD_KEY.equalsIgnoreCase(leftCondition.getLeft().toString())) key = getIndexKey(index.getDefinition(), leftCondition.getRight()); final OSQLFilterCondition rightCondition = (OSQLFilterCondition) compiledFilter.getRootCondition().getRight(); if (KEYWORD_RID.equalsIgnoreCase(rightCondition.getLeft().toString())) value = OSQLHelper.getValue(rightCondition.getRight());
private OSQLFilterCondition resetOperatorPrecedence(OSQLFilterCondition iCondition) { if (iCondition == null) { return iCondition; } if (iCondition.left != null && iCondition.left instanceof OSQLFilterCondition) { iCondition.left = resetOperatorPrecedence((OSQLFilterCondition) iCondition.left); } if (iCondition.right != null && iCondition.right instanceof OSQLFilterCondition) { OSQLFilterCondition right = (OSQLFilterCondition) iCondition.right; iCondition.right = resetOperatorPrecedence(right); if (iCondition.operator != null) { if (!right.inBraces && right.operator != null && right.operator.precedence < iCondition.operator.precedence) { OSQLFilterCondition newLeft = new OSQLFilterCondition(iCondition.left, iCondition.operator, right.left); right.setLeft(newLeft); resetOperatorPrecedence(right); return right; } } } return iCondition; }
compiledFilter.bindParameters(iArgs);
compiledFilter.setRootCondition(null);
if (sqlFilter == null) sqlFilter = new OSQLFilter(expression, context, null); newValue = sqlFilter.evaluate(doc, null, context); } else newValue = value;
private void mergeRangeConditionsToBetweenOperators(OSQLFilter filter) { OSQLFilterCondition condition = filter.getRootCondition(); OSQLFilterCondition newCondition = convertToBetweenClause(condition); if (newCondition != null) { filter.setRootCondition(newCondition); metricRecorder.recordRangeQueryConvertedInBetween(); return; } mergeRangeConditionsToBetweenOperators(condition); }
parserSetCurrentPosition(compiledFilter.parserIsEnded() ? endPosition : compiledFilter.parserGetCurrentPosition() + parserGetCurrentPosition()); } else parserGoBack();
if ((compiledFilter == null || (compiledFilter.getRootCondition() == null)) && groupByFields == null && projections != null && projections.size() == 1) {
@Override public Object executeBlock() { final Object v = expression != null ? expression.evaluate(null, null, context) : resolve(value); context.setVariable(name, v); return v; } }
protected OSQLFilter getIfFilter() { if (ifExpression != null) return new OSQLFilter(ifExpression, context, null); return null; }
protected ORID[] getRange() { final ORID beginRange; final ORID endRange; final OSQLFilterCondition rootCondition = compiledFilter == null ? null : compiledFilter.getRootCondition(); if (compiledFilter == null || rootCondition == null) { if (request instanceof OSQLSynchQuery) beginRange = ((OSQLSynchQuery<ODocument>) request).getNextPageRID(); else beginRange = null; endRange = null; } else { final ORID conditionBeginRange = rootCondition.getBeginRidRange(); final ORID conditionEndRange = rootCondition.getEndRidRange(); final ORID nextPageRid; if (request instanceof OSQLSynchQuery) nextPageRid = ((OSQLSynchQuery<ODocument>) request).getNextPageRID(); else nextPageRid = null; if (conditionBeginRange != null && nextPageRid != null) beginRange = conditionBeginRange.compareTo(nextPageRid) > 0 ? conditionBeginRange : nextPageRid; else if (conditionBeginRange != null) beginRange = conditionBeginRange; else beginRange = nextPageRid; endRange = conditionEndRange; } return new ORID[] { beginRange, endRange }; }
private boolean evaluateIfCondition(String lastCommand) { String cmd = lastCommand; cmd = cmd.trim().substring(2);// remove IF cmd = cmd.trim().substring(0, cmd.trim().length() - 1); // remove { OSQLFilter condition = OSQLEngine.getInstance().parseCondition(cmd, getContext(), "IF"); Object result = null; try { result = condition.evaluate(null, null, getContext()); } catch (Exception e) { throw OException .wrapException(new OCommandExecutionException("Could not evaluate IF condition: " + cmd + " - " + e.getMessage()), e); } if (Boolean.TRUE.equals(result)) { return true; } return false; }