use of org.drools.drl.ast.descr.ConstraintConnectiveDescr in project drools by kiegroup.
the class DRLExprParserTest method testSimpleExpression.
@Test
public void testSimpleExpression() throws Exception {
String source = "a > b";
ConstraintConnectiveDescr result = parser.parse(source);
assertFalse(parser.getErrors().toString(), parser.hasErrors());
assertEquals(ConnectiveType.AND, result.getConnective());
assertEquals(1, result.getDescrs().size());
RelationalExprDescr expr = (RelationalExprDescr) result.getDescrs().get(0);
assertEquals(">", expr.getOperator());
AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
assertEquals("a", left.getExpression());
assertEquals("b", right.getExpression());
}
use of org.drools.drl.ast.descr.ConstraintConnectiveDescr in project drools by kiegroup.
the class DescrDumperTest method testDumpMatches.
@Test
public void testDumpMatches() throws Exception {
String input = "type.toString matches \"something\\swith\\tsingle escapes\"";
String expected = "type.toString ~= \"something\\swith\\tsingle escapes\"";
ConstraintConnectiveDescr descr = parse(input);
String result = dumper.dump(descr);
assertEquals(expected, result);
}
use of org.drools.drl.ast.descr.ConstraintConnectiveDescr in project drools by kiegroup.
the class DescrDumperTest method testDump.
@Test
public void testDump() throws Exception {
String input = "price > 10 && < 20 || == $val || == 30";
String expected = "( price > 10 && price < 20 || price == $val || price == 30 )";
ConstraintConnectiveDescr descr = parse(input);
String result = dumper.dump(descr);
assertEquals(expected, result);
}
use of org.drools.drl.ast.descr.ConstraintConnectiveDescr in project drools by kiegroup.
the class DescrDumperTest method testDumpContains2.
@Test
public void testDumpContains2() throws Exception {
String input = "list not contains \"b\"";
String expected = "!( list contains \"b\" )";
ConstraintConnectiveDescr descr = parse(input);
String result = dumper.dump(descr);
assertEquals(expected, result);
}
use of org.drools.drl.ast.descr.ConstraintConnectiveDescr in project drools by kiegroup.
the class QueryElementBuilder method processBinding.
private void processBinding(RuleBuildContext context, BaseDescr descr, Declaration[] params, QueryArgument[] arguments, List<Declaration> requiredDeclarations, InternalReadAccessor arrayReader, Pattern pattern, BindingDescr bind) {
Declaration declr = context.getDeclarationResolver().getDeclaration(bind.getVariable());
if (declr != null) {
// check right maps to a slot, otherwise we can't reverse this and should error
int pos = getPos(bind.getExpression(), params);
if (pos >= 0) {
// slot exist, reverse and continue
String slot = bind.getExpression();
String var = bind.getVariable();
bind.setVariable(slot);
bind.setExpression(var);
} else {
// else error, we cannot find the slot to unify against
}
}
// left does not already exist, is it a slot?
int pos = getPos(bind.getVariable(), params);
if (pos >= 0) {
// it's an input on a slot, is the input using bindings?
declr = context.getDeclarationResolver().getDeclaration(bind.getExpression());
if (declr != null) {
requiredDeclarations.add(declr);
arguments[pos] = new QueryArgument.Declr(declr);
} else {
// it must be a literal/expression
// it's an expression and thus an input
DrlExprParser parser = new DrlExprParser(context.getConfiguration().getLanguageLevel());
ConstraintConnectiveDescr bresult = parser.parse(bind.getExpression());
if (parser.hasErrors()) {
for (DroolsParserException error : parser.getErrors()) {
context.addError(new DescrBuildError(context.getParentDescr(), descr, null, "Unable to parser pattern expression:\n" + error.getMessage()));
}
return;
}
arguments[pos] = getLiteralQueryArgument(context, descr, bresult);
}
} else {
// this is creating a new output binding
// we know it doesn't exist, as we already checked for left == var
pos = getPos(bind.getExpression(), params);
if (pos < 0) {
// error this must be a binding on a slot
context.addError(new DescrBuildError(context.getParentDescr(), descr, null, "named argument does not exist:\n" + bind.getExpression()));
return;
}
arguments[pos] = getVariableQueryArgument(arrayReader, params, pos, pattern, bind.getVariable());
}
}
Aggregations