Search in sources :

Example 1 with AndP

use of org.apache.tinkerpop.gremlin.process.traversal.util.AndP in project sqlg by pietermartin.

the class BaseStrategy method optimizeInside.

private List<HasContainer> optimizeInside(ReplacedStep<?, ?> replacedStep, List<HasContainer> hasContainers) {
    List<HasContainer> result = new ArrayList<>();
    for (HasContainer hasContainer : hasContainers) {
        if (hasContainerKeyNotIdOrLabel(hasContainer) && hasContainer.getPredicate() instanceof AndP) {
            AndP<?> andP = (AndP) hasContainer.getPredicate();
            List<? extends P<?>> predicates = andP.getPredicates();
            if (predicates.size() == 2) {
                if (predicates.get(0).getBiPredicate() == Compare.gt && predicates.get(1).getBiPredicate() == Compare.lt) {
                    replacedStep.addHasContainer(hasContainer);
                    result.add(hasContainer);
                }
            }
        }
    }
    return result;
}
Also used : AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) HasContainer(org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer) AndOrHasContainer(org.umlg.sqlg.sql.parse.AndOrHasContainer)

Example 2 with AndP

use of org.apache.tinkerpop.gremlin.process.traversal.util.AndP in project unipop by unipop-graph.

the class JdbcPredicatesTranslator method handleConnectiveP.

private Condition handleConnectiveP(String key, ConnectiveP predicate) {
    List<P> predicates = predicate.getPredicates();
    List<Condition> queries = predicates.stream().map(p -> {
        if (p instanceof ConnectiveP)
            return handleConnectiveP(key, (ConnectiveP) p);
        Object pValue = p.getValue();
        BiPredicate pBiPredicate = p.getBiPredicate();
        return predicateToQuery(key, pValue, pBiPredicate);
    }).collect(Collectors.toList());
    Condition condition = queries.get(0);
    if (predicate instanceof AndP) {
        for (int i = 1; i < queries.size(); i++) {
            condition = condition.and(queries.get(i));
        }
    } else if (predicate instanceof OrP) {
        for (int i = 1; i < queries.size(); i++) {
            condition = condition.or(queries.get(i));
        }
    } else
        throw new IllegalArgumentException("Connective predicate not supported by unipop");
    return condition;
}
Also used : AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) ExistsP(org.unipop.process.predicate.ExistsP) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) ConnectiveP(org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP) P(org.apache.tinkerpop.gremlin.process.traversal.P) Condition(org.jooq.Condition) AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) MultiDateFormat(org.unipop.util.MultiDateFormat) java.util(java.util) DSL(org.jooq.impl.DSL) HasContainer(org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer) ExistsP(org.unipop.process.predicate.ExistsP) DSL.field(org.jooq.impl.DSL.field) Field(org.jooq.Field) Contains(org.apache.tinkerpop.gremlin.process.traversal.Contains) Collectors(java.util.stream.Collectors) Condition(org.jooq.Condition) Compare(org.apache.tinkerpop.gremlin.process.traversal.Compare) BiPredicate(java.util.function.BiPredicate) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) PredicatesTranslator(org.unipop.common.util.PredicatesTranslator) Date(org.unipop.process.predicate.Date) ConnectiveP(org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP) PredicatesHolder(org.unipop.query.predicates.PredicatesHolder) ParseException(java.text.ParseException) P(org.apache.tinkerpop.gremlin.process.traversal.P) Text(org.unipop.process.predicate.Text) AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) ConnectiveP(org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) BiPredicate(java.util.function.BiPredicate)

Example 3 with AndP

use of org.apache.tinkerpop.gremlin.process.traversal.util.AndP in project janusgraph by JanusGraph.

the class JanusGraphPSerializer method read.

@Override
public P read(Kryo kryo, Input input, Class<P> aClass) {
    final String predicate = input.readString();
    final boolean isCollection = input.readByte() == (byte) 0;
    final Object value;
    if (isCollection) {
        value = new ArrayList();
        final int size = input.readInt();
        for (int ix = 0; ix < size; ix++) {
            ((List) value).add(kryo.readClassAndObject(input));
        }
    } else {
        value = kryo.readClassAndObject(input);
    }
    try {
        if (value instanceof Collection) {
            switch(predicate) {
                case "and":
                    return new AndP((List<P>) value);
                case "or":
                    return new OrP((List<P>) value);
                case "between":
                    return P.between(((List) value).get(0), ((List) value).get(1));
                case "inside":
                    return P.inside(((List) value).get(0), ((List) value).get(1));
                case "outside":
                    return P.outside(((List) value).get(0), ((List) value).get(1));
                case "within":
                    return P.within((Collection) value);
                case "without":
                    return P.without((Collection) value);
                default:
                    return (P) P.class.getMethod(predicate, Collection.class).invoke(null, (Collection) value);
            }
        } else {
            switch(predicate) {
                case "geoIntersect":
                    return Geo.geoIntersect(value);
                case "geoDisjoint":
                    return Geo.geoDisjoint(value);
                case "geoWithin":
                    return Geo.geoWithin(value);
                case "geoContains":
                    return Geo.geoContains(value);
                case "textContains":
                    return Text.textContains(value);
                case "textContainsFuzzy":
                    return Text.textContainsFuzzy(value);
                case "textContainsPrefix":
                    return Text.textContainsPrefix(value);
                case "textContainsRegex":
                    return Text.textContainsRegex(value);
                case "textFuzzy":
                    return Text.textFuzzy(value);
                case "textPrefix":
                    return Text.textPrefix(value);
                case "textRegex":
                    return Text.textRegex(value);
                default:
                    return (P) P.class.getMethod(predicate, Object.class).invoke(null, value);
            }
        }
    } catch (final Exception e) {
        log.info("Couldn't deserialize class: " + aClass + ", predicate: " + predicate + ", isCollection: " + isCollection + ",value: " + value, e);
        throw new IllegalStateException(e.getMessage(), e);
    }
}
Also used : AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) ConnectiveP(org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP) P(org.apache.tinkerpop.gremlin.process.traversal.P) AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) ArrayList(java.util.ArrayList) Collection(java.util.Collection) ArrayList(java.util.ArrayList) List(java.util.List) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP)

Example 4 with AndP

use of org.apache.tinkerpop.gremlin.process.traversal.util.AndP in project sqlg by pietermartin.

the class BaseStrategy method handleConnectiveStepInternal.

private Optional<AndOrHasContainer> handleConnectiveStepInternal(ConnectiveStep connectiveStep) {
    AndOrHasContainer.TYPE type = AndOrHasContainer.TYPE.from(connectiveStep);
    AndOrHasContainer outerAndOrHasContainer = new AndOrHasContainer(type);
    List<Traversal.Admin<?, ?>> localTraversals = connectiveStep.getLocalChildren();
    for (Traversal.Admin<?, ?> localTraversal : localTraversals) {
        if (!TraversalHelper.hasAllStepsOfClass(localTraversal, HasStep.class, ConnectiveStep.class)) {
            return Optional.empty();
        }
        AndOrHasContainer andOrHasContainer = new AndOrHasContainer(AndOrHasContainer.TYPE.NONE);
        outerAndOrHasContainer.addAndOrHasContainer(andOrHasContainer);
        for (Step<?, ?> step : localTraversal.getSteps()) {
            if (step instanceof HasStep) {
                HasStep<?> hasStep = (HasStep) step;
                for (HasContainer hasContainer : hasStep.getHasContainers()) {
                    if (hasContainerKeyNotIdOrLabel(hasContainer) && SUPPORTED_BI_PREDICATE.contains(hasContainer.getBiPredicate())) {
                        andOrHasContainer.addHasContainer(hasContainer);
                    } else if (hasContainerKeyNotIdOrLabel(hasContainer) && hasContainer.getPredicate() instanceof AndP) {
                        AndP<?> andP = (AndP) hasContainer.getPredicate();
                        List<? extends P<?>> predicates = andP.getPredicates();
                        if (predicates.size() == 2) {
                            if (predicates.get(0).getBiPredicate() == Compare.gte && predicates.get(1).getBiPredicate() == Compare.lt) {
                                andOrHasContainer.addHasContainer(hasContainer);
                            } else if (predicates.get(0).getBiPredicate() == Compare.gt && predicates.get(1).getBiPredicate() == Compare.lt) {
                                andOrHasContainer.addHasContainer(hasContainer);
                            }
                        }
                    } else if (hasContainerKeyNotIdOrLabel(hasContainer) && hasContainer.getPredicate() instanceof OrP) {
                        OrP<?> orP = (OrP) hasContainer.getPredicate();
                        List<? extends P<?>> predicates = orP.getPredicates();
                        if (predicates.size() == 2) {
                            if (predicates.get(0).getBiPredicate() == Compare.lt && predicates.get(1).getBiPredicate() == Compare.gt) {
                                andOrHasContainer.addHasContainer(hasContainer);
                            }
                        }
                    } else if (hasContainerKeyNotIdOrLabel(hasContainer) && hasContainer.getBiPredicate() instanceof Text || hasContainer.getBiPredicate() instanceof FullText) {
                        andOrHasContainer.addHasContainer(hasContainer);
                    } else {
                        return Optional.empty();
                    }
                }
            } else {
                ConnectiveStep connectiveStepLocalChild = (ConnectiveStep) step;
                Optional<AndOrHasContainer> result = handleConnectiveStepInternal(connectiveStepLocalChild);
                if (result.isPresent()) {
                    andOrHasContainer.addAndOrHasContainer(result.get());
                } else {
                    return Optional.empty();
                }
            }
        }
    }
    return Optional.of(outerAndOrHasContainer);
}
Also used : AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) HasContainer(org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer) AndOrHasContainer(org.umlg.sqlg.sql.parse.AndOrHasContainer) LoopTraversal(org.apache.tinkerpop.gremlin.process.traversal.lambda.LoopTraversal) FullText(org.umlg.sqlg.predicate.FullText) Text(org.umlg.sqlg.predicate.Text) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) FullText(org.umlg.sqlg.predicate.FullText) AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) OrP(org.apache.tinkerpop.gremlin.process.traversal.util.OrP) ConnectiveP(org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP) AndOrHasContainer(org.umlg.sqlg.sql.parse.AndOrHasContainer)

Example 5 with AndP

use of org.apache.tinkerpop.gremlin.process.traversal.util.AndP in project sqlg by pietermartin.

the class BaseStrategy method optimizeBetween.

private List<HasContainer> optimizeBetween(ReplacedStep<?, ?> replacedStep, List<HasContainer> hasContainers) {
    List<HasContainer> result = new ArrayList<>();
    for (HasContainer hasContainer : hasContainers) {
        if (hasContainerKeyNotIdOrLabel(hasContainer) && hasContainer.getPredicate() instanceof AndP) {
            AndP<?> andP = (AndP) hasContainer.getPredicate();
            List<? extends P<?>> predicates = andP.getPredicates();
            if (predicates.size() == 2) {
                if (predicates.get(0).getBiPredicate() == Compare.gte && predicates.get(1).getBiPredicate() == Compare.lt) {
                    replacedStep.addHasContainer(hasContainer);
                    result.add(hasContainer);
                }
            }
        }
    }
    return result;
}
Also used : AndP(org.apache.tinkerpop.gremlin.process.traversal.util.AndP) HasContainer(org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer) AndOrHasContainer(org.umlg.sqlg.sql.parse.AndOrHasContainer)

Aggregations

AndP (org.apache.tinkerpop.gremlin.process.traversal.util.AndP)5 HasContainer (org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer)4 ConnectiveP (org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP)3 OrP (org.apache.tinkerpop.gremlin.process.traversal.util.OrP)3 AndOrHasContainer (org.umlg.sqlg.sql.parse.AndOrHasContainer)3 P (org.apache.tinkerpop.gremlin.process.traversal.P)2 ParseException (java.text.ParseException)1 java.util (java.util)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 BiPredicate (java.util.function.BiPredicate)1 Collectors (java.util.stream.Collectors)1 Compare (org.apache.tinkerpop.gremlin.process.traversal.Compare)1 Contains (org.apache.tinkerpop.gremlin.process.traversal.Contains)1 LoopTraversal (org.apache.tinkerpop.gremlin.process.traversal.lambda.LoopTraversal)1 Condition (org.jooq.Condition)1 Field (org.jooq.Field)1 DSL (org.jooq.impl.DSL)1 DSL.field (org.jooq.impl.DSL.field)1