use of org.z3950.zing.cql.CQLBooleanNode in project okapi by folio-org.
the class CQLUtil method reducer.
public static CQLNode reducer(CQLNode vn1, CQLTermNode tn, Comparator<CQLTermNode> cmp) {
if (vn1 instanceof CQLBooleanNode) {
return reduceBoolean((CQLBooleanNode) vn1, tn, cmp);
} else if (vn1 instanceof CQLTermNode) {
CQLTermNode n1 = (CQLTermNode) vn1;
if (cmp != null && cmp.compare(n1, tn) == 0) {
return null;
}
return new CQLTermNode(n1.getIndex(), n1.getRelation(), n1.getTerm());
} else if (vn1 instanceof CQLSortNode) {
CQLSortNode n1 = (CQLSortNode) vn1;
CQLNode n2 = reducer(n1.getSubtree(), tn, cmp);
if (n2 == null) {
return null;
} else {
CQLSortNode sn = new CQLSortNode(n2);
List<ModifierSet> mods = n1.getSortIndexes();
for (ModifierSet mSet : mods) {
sn.addSortIndex(mSet);
}
return sn;
}
} else if (vn1 instanceof CQLPrefixNode) {
CQLPrefixNode n1 = (CQLPrefixNode) vn1;
CQLNode n2 = reducer(n1.getSubtree(), tn, cmp);
if (n2 == null) {
return null;
} else {
CQLPrefix prefix = n1.getPrefix();
return new CQLPrefixNode(prefix.getName(), prefix.getIdentifier(), n2);
}
} else {
throw new IllegalArgumentException("unknown type for CQLNode: " + vn1.toString());
}
}
use of org.z3950.zing.cql.CQLBooleanNode in project raml-module-builder by folio-org.
the class CQL2PgJSON method pg.
private String pg(CQLBooleanNode node) throws QueryValidationException {
String operator = sqlOperator(node);
String isNotTrue = "";
// typed in anything: title=* OR contributors*= OR identifier=*
if ("OR".equals(operator) && node.getRightOperand().getClass() == CQLTermNode.class) {
CQLTermNode r = (CQLTermNode) (node.getRightOperand());
if ("*".equals(r.getTerm()) && "=".equals(r.getRelation().getBase())) {
logger.log(Level.FINE, "pgFT(): Simplifying =* OR =* ");
return pg(node.getLeftOperand());
}
}
if ("AND NOT".equals(operator)) {
operator = "AND (";
isNotTrue = ") IS NOT TRUE";
// NOT TRUE is (FALSE or NULL) to catch the NULL case when the field does not exist.
// This completely inverts the right operand.
}
return "(" + pg(node.getLeftOperand()) + ") " + operator + " (" + pg(node.getRightOperand()) + isNotTrue + ")";
}
use of org.z3950.zing.cql.CQLBooleanNode in project okapi by folio-org.
the class CQLUtil method reduceBoolean.
private static CQLNode reduceBoolean(CQLBooleanNode n1, CQLTermNode tn, Comparator<CQLTermNode> cmp) {
CQLNode n2 = null;
CQLNode left = reducer(n1.getLeftOperand(), tn, cmp);
CQLNode right = reducer(n1.getRightOperand(), tn, cmp);
ModifierSet mSet = new ModifierSet(n1.getOperator().toString().toLowerCase());
List<Modifier> mods = n1.getModifiers();
for (Modifier m : mods) {
mSet.addModifier(m.getType(), m.getComparison(), m.getValue());
}
if (left == null) {
n2 = right;
} else if (right == null) {
n2 = left;
}
switch(n1.getOperator()) {
case AND:
if (left != null && right != null) {
n2 = new CQLAndNode(left, right, mSet);
}
break;
case OR:
if (left != null && right != null) {
n2 = new CQLOrNode(left, right, mSet);
}
break;
case NOT:
if (left != null && right != null) {
n2 = new CQLNotNode(left, right, mSet);
}
break;
case PROX:
if (left != null && right != null) {
n2 = new CQLProxNode(left, right, mSet);
}
break;
}
return n2;
}
Aggregations