@Override public Object resolve(final String iVariable) { return new OSQLPredicate(iVariable).evaluate(context); }
protected OSQLFilterCondition extractCondition() { if (!parserSkipWhiteSpaces()) // END OF TEXT return null; // EXTRACT ITEMS Object left = extractConditionItem(true, 1); if (left != null && checkForEnd(left.toString())) return null; OQueryOperator oper; final Object right; if (left instanceof OQueryOperator && ((OQueryOperator) left).isUnary()) { oper = (OQueryOperator) left; left = extractConditionItem(false, 1); right = null; } else { oper = extractConditionOperator(); if (oper instanceof OQueryOperatorNot) // SPECIAL CASE: READ NEXT OPERATOR oper = new OQueryOperatorNot(extractConditionOperator()); if(oper instanceof OQueryOperatorAnd || oper instanceof OQueryOperatorOr){ right = extractCondition(); }else { right = oper != null ? extractConditionItem(false, oper.expectedRightWords) : null; } } // CREATE THE CONDITION OBJECT return new OSQLFilterCondition(left, oper, right); }
protected void optimize() { if (rootCondition != null) computePrefetchFieldList(rootCondition, new HashSet<String>()); }
protected Object extractConditions(final OSQLFilterCondition iParentCondition) { final int oldPosition = parserGetCurrentPosition(); parserNextWord(true, " )=><,\r\n"); final String word = parserGetLastWord(); parserSetCurrentPosition(oldPosition + embedded.length() + 1); return new OSQLSynchQuery<Object>(embedded.toString()); parserSetCurrentPosition(oldPosition); OSQLFilterCondition currentCondition = extractCondition(); while (parserSkipWhiteSpaces()) { if (!parserIsEnded() && parserGetCurrentChar() == ')') return currentCondition; final OQueryOperator nextOperator = extractConditionOperator(); if (nextOperator == null) return currentCondition; subCondition.right = extractConditionItem(false, 1); } else { final OSQLFilterCondition parentCondition = new OSQLFilterCondition(currentCondition, nextOperator); parentCondition.right = extractConditions(parentCondition); currentCondition = parentCondition;
parserNextWord(false, " =><,\r\n"); String word = parserGetLastWord(); final int lastPosition = parserIsEnded() ? parserText.length() : parserGetCurrentPosition(); parserSetCurrentPosition(lastPosition - word.length() + 1); final Object subCondition = extractConditions(null); if (!parserSkipWhiteSpaces() || parserGetCurrentChar() == ')') { braces--; parserMoveCurrentPosition(+1); } else if (word.charAt(0) == OStringSerializerHelper.LIST_BEGIN) { parserSetCurrentPosition(lastPosition - getLastWordLength()); parserSetCurrentPosition(OStringSerializerHelper.getCollection(parserText, parserGetCurrentPosition(), stringItems)); result[i] = convertCollectionItems(stringItems); parserMoveCurrentPosition(+1); parserNextWord(false, " )=><,\r\n"); final String nextWord = parserGetLastWord(); parserMoveCurrentPosition(-1); } else break;
public Object evaluate(final OCommandContext iContext) { return evaluate(null, null, iContext); }
public static Object parseValue(final OSQLPredicate iSQLFilter, final OBaseParser iCommand, final String iWord, final OCommandContext iContext) { if (iWord.charAt(0) == OStringSerializerHelper.PARAMETER_POSITIONAL || iWord.charAt(0) == OStringSerializerHelper.PARAMETER_NAMED) { if (iSQLFilter != null) return iSQLFilter.addParameter(iWord); else return new OSQLFilterItemParameter(iWord); } else return parseValue(iCommand, iWord, iContext); }
public Object evaluate() { return evaluate(null, null, null); }
/** * Evaluates a SQL expression against current document by passing a context. The expression can refer to the variables contained * in the context. Example: <code> OCommandContext context = new OBasicCommandContext().setVariable("vat", 20); long amountPlusVat * = doc.eval("amount * (100+$vat) / 100", context); </code> * * @param iExpression SQL expression to evaluate. * * @return The result of expression * * @throws OQueryParsingException in case the expression is not valid */ public Object eval(final String iExpression, final OCommandContext iContext) { return new OSQLPredicate(iExpression).evaluate(this, null, iContext); }
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; } }
@ConsoleCommand(splitInWords = false, description = "Evaluate a predicate against current record") public void eval(@ConsoleParameter(name = "text", description = "The sql predicate to evaluate") final String iText) { if (iText == null) return; if (currentRecord == null) return; final Object result = new OSQLPredicate(iText).evaluate(currentRecord, null, null); if (result != null) out.println("\n" + result); }
protected Object resolve(final Object content) { if (context == null || content == null) return content; Object value; if (content instanceof String) { String contentAsString = (String) content; if (contentAsString.startsWith("$") && !contentAsString.startsWith(VAR_BEGIN)) { value = context.getVariable(content.toString()); } else { value = OVariableParser.resolveVariables(contentAsString, VAR_BEGIN, VAR_END, variable -> context.getVariable(variable)); } } else { value = content; } if (value instanceof String) { value = OVariableParser .resolveVariables((String) value, "={", "}", variable -> new OSQLPredicate(variable).evaluate(context)); } return value; } }
public Object execute(Object iThis, final OIdentifiable iRecord, final Object iCurrentResult, final Object[] iParams, OCommandContext iContext) { if (predicate == null) predicate = new OSQLPredicate((String) iParams[0].toString()); final ODocument currentResult = iCurrentResult instanceof ODocument ? (ODocument) iCurrentResult : null; try { return predicate.evaluate(iRecord != null ? iRecord.getRecord() : null, currentResult, iContext); } catch (ArithmeticException e) { OLogManager.instance().error(this, "Division by 0", e); // DIVISION BY 0 return 0; } catch (Exception e) { OLogManager.instance().error(this, "Error during division", e); return null; } }
@ConsoleCommand(splitInWords = false, description = "Move from current record by evaluating a predicate against current record") public void move(@ConsoleParameter(name = "text", description = "The sql predicate to evaluate") final String iText) { if (iText == null) return; if (currentRecord == null) return; final Object result = new OSQLPredicate(iText).evaluate(currentRecord, null, null); if (result != null) { if (result instanceof OIdentifiable) { setResultset(new ArrayList<OIdentifiable>()); currentRecord = ((OIdentifiable) result).getRecord(); dumpRecordDetails(); } else if (result instanceof List<?>) { setResultset((List<OIdentifiable>) result); dumpResultSet(-1); } else if (result instanceof Iterator<?>) { final List<OIdentifiable> list = new ArrayList<OIdentifiable>(); while (((Iterator) result).hasNext()) list.add(((Iterator<OIdentifiable>) result).next()); setResultset(list); dumpResultSet(-1); } else setResultset(new ArrayList<OIdentifiable>()); } }
lastResult = executeCommand(iValue, db); else { lastResult = new OSQLPredicate(iValue).evaluate(context);
Object value = parseValue(parts.get(1), iContext); if (VALUE_NOT_PARSED == value) { value = new OSQLPredicate(parts.get(1)).evaluate(iContext);
OSQLPredicate pred = new OSQLPredicate(indexAsString); final HashSet<Object> values = new LinkedHashSet<Object>(); Object result = pred.evaluate((OIdentifiable) v, (ODocument) ((OIdentifiable) v).getRecord(), iContext); if (Boolean.TRUE.equals(result)) { values.add(v); Object result = pred.evaluate(doc, doc, iContext); if (Boolean.TRUE.equals(result)) { values.add(v);
varValue = f.execute(iRecord, iRecord, null, context); } else if (letValue instanceof String) { OSQLPredicate pred = new OSQLPredicate(((String) letValue).trim()); varValue = pred.evaluate(iRecord, (ODocument)iRecord, context); } else varValue = letValue;
final OSQLPredicate pred = new OSQLPredicate(text); runtimeParameters[i] = pred.evaluate(iCurrentRecord instanceof ORecord ? (ORecord) iCurrentRecord : null, (ODocument) iCurrentResult, iContext); runtimeParameters[i] = ((OSQLPredicate) configuredParameters[i]).evaluate(iCurrentRecord.getRecord(), (iCurrentRecord instanceof ODocument ? (ODocument) iCurrentResult : null), iContext); else if (configuredParameters[i] instanceof String) {
final OSQLPredicate pred = new OSQLPredicate(text); runtimeParameters[i] = pred.evaluate(iCurrentRecord instanceof ORecord ? (ORecord) iCurrentRecord : null, (ODocument) iCurrentResult, iContext); runtimeParameters[i] = ((OSQLPredicate) configuredParameters[i]).evaluate(iCurrentRecord.getRecord(), (iCurrentRecord instanceof ODocument ? (ODocument) iCurrentResult : null), iContext); else if (configuredParameters[i] instanceof String) {