Search in sources :

Example 6 with CommonAncestor

use of annis.sqlgen.model.CommonAncestor in project ANNIS by korpling.

the class TestDefaultWhereClauseGenerator method shouldSkipToplevelCorpusPredicateForCommonAncestorIfCorpusListIsNull.

/**
 * The common ancestor operator should skip the predicate on toplevel_corpus
 * in the EXISTS subquery if the corpus list is NULL.
 */
@Theory
public void shouldSkipToplevelCorpusPredicateForCommonAncestorIfCorpusListIsNull(String componentPredicate) {
    // given
    generator.setUseToplevelCorpusPredicateInCommonAncestorSubquery(true);
    given(queryData.getCorpusList()).willReturn(null);
    node23.addOutgoingJoin(new CommonAncestor(node42));
    // then
    checkEdgeConditions(componentPredicate, "d", null, true, "EXISTS (SELECT 1 FROM (SELECT * FROM facts LIMIT 0) AS ancestor WHERE" + "\n\t" + "ancestor.pre < _rank23.pre AND _rank23.pre < ancestor.post AND" + "\n\t" + "ancestor.pre < _rank42.pre AND _rank42.pre < ancestor.post" + "\n\t" + "LIMIT 1)", join("<>", "_node23.id", "_node42.id"));
}
Also used : CommonAncestor(annis.sqlgen.model.CommonAncestor) Theory(org.junit.experimental.theories.Theory)

Example 7 with CommonAncestor

use of annis.sqlgen.model.CommonAncestor in project ANNIS by korpling.

the class TestDefaultWhereClauseGenerator method shouldUseToplevelCorpusPredicateForCommonAncestor.

/**
 * The common ancestor operator may optionally use a predicate on toplevel_corpus
 * in the EXISTS subquery.
 */
@Theory
public void shouldUseToplevelCorpusPredicateForCommonAncestor(String componentPredicate) {
    // given
    generator.setUseToplevelCorpusPredicateInCommonAncestorSubquery(true);
    long corpusId = uniqueLong();
    given(queryData.getCorpusList()).willReturn(asList(corpusId));
    node23.addOutgoingJoin(new CommonAncestor(node42));
    // then
    checkEdgeConditions(componentPredicate, "d", null, true, "EXISTS (SELECT 1 FROM facts_" + corpusId + " AS ancestor WHERE" + "\n\t" + "ancestor.pre < _rank23.pre AND _rank23.pre < ancestor.post AND" + "\n\t" + "ancestor.pre < _rank42.pre AND _rank42.pre < ancestor.post AND toplevel_corpus IN(" + corpusId + ")" + "\n\t" + "LIMIT 1)", join("<>", "_node23.id", "_node42.id"));
}
Also used : CommonAncestor(annis.sqlgen.model.CommonAncestor) Theory(org.junit.experimental.theories.Theory)

Example 8 with CommonAncestor

use of annis.sqlgen.model.CommonAncestor in project ANNIS by korpling.

the class AbstractWhereClauseGenerator method whereConditions.

@Override
public Set<String> whereConditions(QueryData queryData, List<QueryNode> alternative, String indent) {
    List<String> conditions = new ArrayList<>();
    for (QueryNode node : alternative) {
        // node constraints
        if (node.getSpannedText() != null) {
            addSpanConditions(conditions, queryData, node);
        }
        if (node.isToken()) {
            addIsTokenConditions(conditions, queryData, node);
        }
        if (node.isRoot()) {
            addIsRootConditions(conditions, queryData, node);
        }
        if (node.getArity() != null) {
            addNodeArityConditions(conditions, queryData, node);
        }
        if (node.getTokenArity() != null) {
            addTokenArityConditions(conditions, queryData, node);
        }
        // node joins
        for (Join join : node.getOutgoingJoins()) {
            QueryNode target = join.getTarget();
            if (join instanceof SameSpan) {
                addSameSpanConditions(conditions, node, target, (SameSpan) join, queryData);
            } else if (join instanceof Identical) {
                addIdenticalConditions(conditions, node, target, (Identical) join, queryData);
            } else if (join instanceof LeftAlignment) {
                addLeftAlignmentConditions(conditions, node, target, (LeftAlignment) join, queryData);
            } else if (join instanceof RightAlignment) {
                addRightAlignmentConditions(conditions, node, target, (RightAlignment) join, queryData);
            } else if (join instanceof Inclusion) {
                addInclusionConditions(conditions, node, target, (Inclusion) join, queryData);
            } else if (join instanceof Overlap) {
                addOverlapConditions(conditions, node, target, (Overlap) join, queryData);
            } else if (join instanceof LeftOverlap) {
                addLeftOverlapConditions(conditions, target, node, (LeftOverlap) join, queryData);
            } else if (join instanceof RightOverlap) {
                addRightOverlapConditions(conditions, target, node, (RightOverlap) join, queryData);
            } else if (join instanceof Precedence) {
                addPrecedenceConditions(conditions, node, target, (Precedence) join, queryData);
            } else if (join instanceof Near) {
                addNearConditions(conditions, node, target, (Near) join, queryData);
            } else if (join instanceof Sibling) {
                addSiblingConditions(conditions, node, target, (Sibling) join, queryData);
            } else if (join instanceof CommonAncestor) {
                addCommonAncestorConditions(conditions, node, target, (CommonAncestor) join, queryData);
            } else if (join instanceof LeftDominance) {
                addLeftDominanceConditions(conditions, node, target, (LeftDominance) join, queryData);
            } else if (join instanceof RightDominance) {
                addRightDominanceConditions(conditions, node, target, (RightDominance) join, queryData);
            } else if (join instanceof Dominance) {
                addDominanceConditions(conditions, node, target, (Dominance) join, queryData);
            } else if (join instanceof PointingRelation) {
                addPointingRelationConditions(conditions, node, target, (PointingRelation) join, queryData);
            } else if (join instanceof EqualValue) {
                addEqualValueConditions(conditions, node, target, (EqualValue) join, queryData);
            } else if (join instanceof NotEqualValue) {
                addNotEqualValueConditions(conditions, node, target, (NotEqualValue) join, queryData);
            }
        }
        // node annotations
        int i = 0;
        for (QueryAnnotation annotation : node.getNodeAnnotations()) {
            ++i;
            addAnnotationConditions(conditions, node, i, annotation, NODE_ANNOTATION_TABLE, queryData);
        }
        // relation annotations
        int j = 0;
        for (QueryAnnotation annotation : node.getEdgeAnnotations()) {
            ++j;
            addAnnotationConditions(conditions, node, j, annotation, EDGE_ANNOTATION_TABLE, queryData);
        }
    }
    return new HashSet<>(conditions);
}
Also used : Identical(annis.sqlgen.model.Identical) Inclusion(annis.sqlgen.model.Inclusion) SameSpan(annis.sqlgen.model.SameSpan) RightAlignment(annis.sqlgen.model.RightAlignment) ArrayList(java.util.ArrayList) LeftAlignment(annis.sqlgen.model.LeftAlignment) RightOverlap(annis.sqlgen.model.RightOverlap) Overlap(annis.sqlgen.model.Overlap) LeftOverlap(annis.sqlgen.model.LeftOverlap) Sibling(annis.sqlgen.model.Sibling) CommonAncestor(annis.sqlgen.model.CommonAncestor) NotEqualValue(annis.sqlgen.model.NotEqualValue) HashSet(java.util.HashSet) PointingRelation(annis.sqlgen.model.PointingRelation) EqualValue(annis.sqlgen.model.EqualValue) NotEqualValue(annis.sqlgen.model.NotEqualValue) QueryAnnotation(annis.model.QueryAnnotation) RightOverlap(annis.sqlgen.model.RightOverlap) Join(annis.model.Join) RightDominance(annis.sqlgen.model.RightDominance) Dominance(annis.sqlgen.model.Dominance) LeftDominance(annis.sqlgen.model.LeftDominance) RightDominance(annis.sqlgen.model.RightDominance) Near(annis.sqlgen.model.Near) LeftDominance(annis.sqlgen.model.LeftDominance) QueryNode(annis.model.QueryNode) LeftOverlap(annis.sqlgen.model.LeftOverlap) Precedence(annis.sqlgen.model.Precedence)

Aggregations

CommonAncestor (annis.sqlgen.model.CommonAncestor)8 Theory (org.junit.experimental.theories.Theory)6 QueryNode (annis.model.QueryNode)2 Join (annis.model.Join)1 QueryAnnotation (annis.model.QueryAnnotation)1 Dominance (annis.sqlgen.model.Dominance)1 EqualValue (annis.sqlgen.model.EqualValue)1 Identical (annis.sqlgen.model.Identical)1 Inclusion (annis.sqlgen.model.Inclusion)1 LeftAlignment (annis.sqlgen.model.LeftAlignment)1 LeftDominance (annis.sqlgen.model.LeftDominance)1 LeftOverlap (annis.sqlgen.model.LeftOverlap)1 Near (annis.sqlgen.model.Near)1 NotEqualValue (annis.sqlgen.model.NotEqualValue)1 Overlap (annis.sqlgen.model.Overlap)1 PointingRelation (annis.sqlgen.model.PointingRelation)1 Precedence (annis.sqlgen.model.Precedence)1 RightAlignment (annis.sqlgen.model.RightAlignment)1 RightDominance (annis.sqlgen.model.RightDominance)1 RightOverlap (annis.sqlgen.model.RightOverlap)1