Search in sources :

Example 6 with Join

use of annis.model.Join in project ANNIS by korpling.

the class TestDefaultWhereClauseGenerator method shouldGenerateWhereConditionsForNamedAndAnnotatedDirectDominance.

/**
 * WHERE conditions for annotated named direct dominance (> name
 * [annotation]).
 */
@Theory
public void shouldGenerateWhereConditionsForNamedAndAnnotatedDirectDominance(String componentPredicate) {
    // given
    String componentName = uniqueString();
    Join j = new Dominance(node42, componentName, 1);
    node23.addOutgoingJoin(j);
    j.addEdgeAnnotation(new QueryAnnotation("namespace3", "name3", "value3", TextMatching.REGEXP_EQUAL));
    // then
    checkEdgeConditions(componentPredicate, "d", componentName, false, join("=", "_rank23.id", "_rank42.parent"));
    checkWhereConditions(node42, "_rank_annotation42.qannotext ~ '^(namespace3:name3:(value3))$'");
}
Also used : QueryAnnotation(annis.model.QueryAnnotation) SqlConstraints.numberJoin(annis.sqlgen.SqlConstraints.numberJoin) Join(annis.model.Join) RightDominance(annis.sqlgen.model.RightDominance) Dominance(annis.sqlgen.model.Dominance) LeftDominance(annis.sqlgen.model.LeftDominance) TestUtils.uniqueString(annis.test.TestUtils.uniqueString) SqlConstraints.sqlString(annis.sqlgen.SqlConstraints.sqlString) Theory(org.junit.experimental.theories.Theory)

Example 7 with Join

use of annis.model.Join in project ANNIS by korpling.

the class TransitivePrecedenceOptimizerTest method testDontUseRangedPrecendenceOnSpans.

@Test
public void testDontUseRangedPrecendenceOnSpans() {
    assumeTrue(postProcessorExists);
    System.out.println("dontUseRangedPrecendenceOnSpans");
    // query to extend
    String aql = "node & node & node & #1 . #2 & #2 . #3";
    // optimizer is applied on the fly by the query anaylsis (as injected by Spring)
    QueryData data = parser.parse(aql, new LinkedList<Long>());
    assertEquals(1, data.getAlternatives().size());
    List<QueryNode> nodes = data.getAlternatives().get(0);
    assertEquals(2, nodes.get(0).getOutgoingJoins().size());
    Join j0 = nodes.get(0).getOutgoingJoins().get(0);
    Join j1 = nodes.get(0).getOutgoingJoins().get(1);
    assertTrue(j0 instanceof Precedence);
    assertTrue(j1 instanceof Precedence);
    Precedence p0 = (Precedence) j0;
    Precedence p1 = (Precedence) j1;
    assertEquals(1, p0.getMinDistance());
    assertEquals(1, p0.getMaxDistance());
    assertEquals(0, p1.getMinDistance());
    assertEquals(0, p1.getMaxDistance());
}
Also used : QueryNode(annis.model.QueryNode) Join(annis.model.Join) Precedence(annis.sqlgen.model.Precedence) Test(org.junit.Test)

Example 8 with Join

use of annis.model.Join 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)

Example 9 with Join

use of annis.model.Join in project ANNIS by korpling.

the class ComponentSearchRelationNormalizer method createJoinMap.

private Multimap<QueryNode, Join> createJoinMap(List<QueryNode> nodes) {
    Multimap<QueryNode, Join> result = HashMultimap.create();
    for (QueryNode n : nodes) {
        for (Join j : n.getOutgoingJoins()) {
            if (j instanceof Dominance || j instanceof PointingRelation) {
                if (j.getTarget() != null) {
                    result.put(n, j);
                    result.put(j.getTarget(), j);
                }
            }
        }
    }
    return result;
}
Also used : PointingRelation(annis.sqlgen.model.PointingRelation) QueryNode(annis.model.QueryNode) Join(annis.model.Join) Dominance(annis.sqlgen.model.Dominance)

Example 10 with Join

use of annis.model.Join in project ANNIS by korpling.

the class JoinListener method enterDirectPointing.

@Override
public void enterDirectPointing(AqlParser.DirectPointingContext ctx) {
    QueryNode left = relationChain.get(relationIdx);
    QueryNode right = relationChain.get(relationIdx + 1);
    String label = getLayerName(ctx.POINTING(), 2);
    Join j = new PointingRelation(right, label, 1);
    if (ctx.anno != null) {
        LinkedList<QueryAnnotation> annotations = fromRelationAnnotation(ctx.anno);
        for (QueryAnnotation a : annotations) {
            j.addEdgeAnnotation(a);
        }
    }
    left.addOutgoingJoin(addParsedLocation(ctx, j));
}
Also used : PointingRelation(annis.sqlgen.model.PointingRelation) QueryNode(annis.model.QueryNode) QueryAnnotation(annis.model.QueryAnnotation) Join(annis.model.Join)

Aggregations

Join (annis.model.Join)13 QueryNode (annis.model.QueryNode)12 QueryAnnotation (annis.model.QueryAnnotation)4 Dominance (annis.sqlgen.model.Dominance)4 Precedence (annis.sqlgen.model.Precedence)4 LinkedList (java.util.LinkedList)4 LeftDominance (annis.sqlgen.model.LeftDominance)3 PointingRelation (annis.sqlgen.model.PointingRelation)3 RightDominance (annis.sqlgen.model.RightDominance)3 HashSet (java.util.HashSet)3 Identical (annis.sqlgen.model.Identical)2 Inclusion (annis.sqlgen.model.Inclusion)2 LeftAlignment (annis.sqlgen.model.LeftAlignment)2 LeftOverlap (annis.sqlgen.model.LeftOverlap)2 NonBindingJoin (annis.sqlgen.model.NonBindingJoin)2 Overlap (annis.sqlgen.model.Overlap)2 RightAlignment (annis.sqlgen.model.RightAlignment)2 RightOverlap (annis.sqlgen.model.RightOverlap)2 SameSpan (annis.sqlgen.model.SameSpan)2 HashMap (java.util.HashMap)2