use of org.apache.jackrabbit.oak.query.ast.ComparisonImpl in project jackrabbit-oak by apache.
the class QueryImpl method init.
@Override
public void init() {
final QueryImpl query = this;
if (constraint != null) {
// need to do this *before* the visitation below, as the
// simplify() method does not always keep the query reference
// passed in setQuery(). TODO: avoid that mutability concern
constraint = constraint.simplify();
}
new AstVisitorBase() {
@Override
public boolean visit(BindVariableValueImpl node) {
node.setQuery(query);
bindVariableMap.put(node.getBindVariableName(), null);
return true;
}
@Override
public boolean visit(ChildNodeImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(ChildNodeJoinConditionImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(CoalesceImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(ColumnImpl node) {
node.setQuery(query);
return true;
}
@Override
public boolean visit(DescendantNodeImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(DescendantNodeJoinConditionImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(EquiJoinConditionImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(FullTextSearchImpl node) {
node.setQuery(query);
node.bindSelector(source);
return super.visit(node);
}
@Override
public boolean visit(NativeFunctionImpl node) {
node.setQuery(query);
node.bindSelector(source);
return super.visit(node);
}
@Override
public boolean visit(SimilarImpl node) {
node.setQuery(query);
node.bindSelector(source);
return super.visit(node);
}
@Override
public boolean visit(SpellcheckImpl node) {
node.setQuery(query);
node.bindSelector(source);
return super.visit(node);
}
@Override
public boolean visit(SuggestImpl node) {
node.setQuery(query);
node.bindSelector(source);
return super.visit(node);
}
@Override
public boolean visit(FullTextSearchScoreImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(LiteralImpl node) {
node.setQuery(query);
return true;
}
@Override
public boolean visit(NodeLocalNameImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(NodeNameImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(PropertyExistenceImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(PropertyInexistenceImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(PropertyValueImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(SameNodeImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(SameNodeJoinConditionImpl node) {
node.setQuery(query);
node.bindSelector(source);
return true;
}
@Override
public boolean visit(SelectorImpl node) {
String name = node.getSelectorName();
if (selectorIndexes.put(name, selectors.size()) != null) {
throw new IllegalArgumentException("Two selectors with the same name: " + name);
}
selectors.add(node);
node.setQuery(query);
return true;
}
@Override
public boolean visit(LengthImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(UpperCaseImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(LowerCaseImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(ComparisonImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(InImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(AndImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(OrImpl node) {
node.setQuery(query);
return super.visit(node);
}
@Override
public boolean visit(NotImpl node) {
node.setQuery(query);
return super.visit(node);
}
}.visit(this);
source.setQueryConstraint(constraint);
for (ColumnImpl column : columns) {
column.bindSelector(source);
}
distinctColumns = new boolean[columns.length];
for (int i = 0; i < columns.length; i++) {
ColumnImpl c = columns[i];
boolean distinct = true;
if (QueryConstants.JCR_SCORE.equals(c.getPropertyName())) {
distinct = false;
}
distinctColumns[i] = distinct;
}
init = true;
}
use of org.apache.jackrabbit.oak.query.ast.ComparisonImpl in project jackrabbit-oak by apache.
the class QueryCostOverheadTest method getCostOverhead.
@Test
public void getCostOverhead() {
QueryImpl query;
UnionQueryImpl union;
ConstraintImpl c, c1, c2, c3, c4, c5;
c1 = new ComparisonImpl(null, null, null);
c2 = new FullTextSearchImpl(null, null, null);
union = new UnionQueryImpl(false, createQuery(c1), createQuery(c2), null);
assertFalse("we always expect false from a `UnionQueryImpl`", union.containsUnfilteredFullTextCondition());
c1 = new ComparisonImpl(null, null, null);
c2 = new FullTextSearchImpl(null, null, null);
c = new OrImpl(c1, c2);
query = createQuery(c);
assertTrue(query.containsUnfilteredFullTextCondition());
c1 = new ComparisonImpl(null, null, null);
c2 = new FullTextSearchImpl(null, null, null);
c3 = new FullTextSearchImpl(null, null, null);
c = new OrImpl(of(c1, c2, c3));
query = createQuery(c);
assertTrue(query.containsUnfilteredFullTextCondition());
c2 = new FullTextSearchImpl(null, null, null);
c3 = new FullTextSearchImpl(null, null, null);
c4 = new ComparisonImpl(null, null, null);
c1 = new OrImpl(of(c2, c3, c4));
c5 = mock(DescendantNodeImpl.class);
c = new AndImpl(c1, c5);
query = createQuery(c);
assertTrue(query.containsUnfilteredFullTextCondition());
c = new FullTextSearchImpl(null, null, null);
query = createQuery(c);
assertFalse(query.containsUnfilteredFullTextCondition());
c1 = new FullTextSearchImpl(null, null, null);
c2 = new FullTextSearchImpl(null, null, null);
c3 = new FullTextSearchImpl(null, null, null);
c = new OrImpl(of(c1, c2, c3));
query = createQuery(c);
assertFalse(query.containsUnfilteredFullTextCondition());
c1 = new ComparisonImpl(null, null, null);
c2 = new FullTextSearchImpl(null, null, null);
c3 = new FullTextSearchImpl(null, null, null);
c = new AndImpl(of(c1, c2, c3));
query = createQuery(c);
assertFalse(query.containsUnfilteredFullTextCondition());
c1 = new ComparisonImpl(null, null, null);
c2 = new ComparisonImpl(null, null, null);
c = new AndImpl(of(c1, c2, c3));
query = createQuery(c);
assertFalse(query.containsUnfilteredFullTextCondition());
}
Aggregations