Search in sources :

Example 1 with Sibling

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

the class DefaultWhereClauseGenerator method addSiblingConditions.

// FIXME: Why not in addSingleRelationCondition
@Override
protected void addSiblingConditions(List<String> conditions, QueryNode node, QueryNode target, Sibling join, QueryData queryData) {
    Sibling sibling = (Sibling) join;
    String componentName = sibling.getName();
    // "parent" column is unique over all component IDs, thus don't add an extra join
    addComponentPredicates(conditions, node, target, componentName, "d", false);
    conditions.add(join("=", tables(node).aliasedColumn(RANK_TABLE, "parent"), tables(target).aliasedColumn(RANK_TABLE, "parent")));
    if (!allowIdenticalSibling) {
        joinOnNode(conditions, node, target, "<>", "id", "id");
    }
}
Also used : Sibling(annis.sqlgen.model.Sibling) SqlConstraints.sqlString(annis.sqlgen.SqlConstraints.sqlString)

Example 2 with Sibling

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

the class TestDefaultWhereClauseGenerator method shouldAllowIdenticalNodeForSiblingTarget.

/**
 * The sibling operator may optionally bind the same node to both operands.
 */
@Theory
public void shouldAllowIdenticalNodeForSiblingTarget(String componentPredicate) {
    // given
    generator.setAllowIdenticalSibling(true);
    node23.addOutgoingJoin(new Sibling(node42));
    // then
    checkEdgeConditions(componentPredicate, "d", null, false, join("=", "_rank23.parent", "_rank42.parent"));
}
Also used : Sibling(annis.sqlgen.model.Sibling) Theory(org.junit.experimental.theories.Theory)

Example 3 with Sibling

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

the class TestDefaultWhereClauseGenerator method shouldGenerateWhereConditionsForSibling.

/**
 * WHERE conditions for sibling ($).
 */
@Theory
public void shouldGenerateWhereConditionsForSibling(String componentPredicate) {
    // given
    node23.addOutgoingJoin(new Sibling(node42));
    // then
    checkEdgeConditions(componentPredicate, "d", null, false, join("=", "_rank23.parent", "_rank42.parent"), join("<>", "_node23.id", "_node42.id"));
}
Also used : Sibling(annis.sqlgen.model.Sibling) Theory(org.junit.experimental.theories.Theory)

Example 4 with Sibling

use of annis.sqlgen.model.Sibling 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 5 with Sibling

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

the class JoinListener method enterCommonparent.

@Override
public void enterCommonparent(AqlParser.CommonparentContext ctx) {
    QueryNode left = relationChain.get(relationIdx);
    QueryNode right = relationChain.get(relationIdx + 1);
    String label = ctx.label == null ? null : ctx.label.getText();
    left.addOutgoingJoin(addParsedLocation(ctx, new Sibling(right, label)));
}
Also used : QueryNode(annis.model.QueryNode) Sibling(annis.sqlgen.model.Sibling)

Aggregations

Sibling (annis.sqlgen.model.Sibling)5 QueryNode (annis.model.QueryNode)2 Theory (org.junit.experimental.theories.Theory)2 Join (annis.model.Join)1 QueryAnnotation (annis.model.QueryAnnotation)1 SqlConstraints.sqlString (annis.sqlgen.SqlConstraints.sqlString)1 CommonAncestor (annis.sqlgen.model.CommonAncestor)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