Skip to content

Commit

Permalink
remove redundant QueryInfo
Browse files Browse the repository at this point in the history
add QueryExecutionDriver strategy to address different types of query language
add the requested cursorType returned as an AssignmentsQueryResult information
  • Loading branch information
YANG-DB committed May 3, 2020
1 parent 08b1829 commit fb4688f
Show file tree
Hide file tree
Showing 49 changed files with 856 additions and 296 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,16 @@
*/



import com.google.inject.Inject;
import com.yangdb.fuse.asg.translator.cypher.CypherTranslator;
import com.yangdb.fuse.dispatcher.query.QueryTransformer;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;

/**
* Created by liorp on 12/15/2017.
*/
public class AsgCypherTransformer implements QueryTransformer<QueryInfo<String>, AsgQuery> {
public class AsgCypherTransformer implements QueryTransformer<CreateJsonQueryRequest, AsgQuery> {
//region Constructors
@Inject
public AsgCypherTransformer(CypherTranslator cypherTranslator) {
Expand All @@ -41,7 +40,7 @@ public AsgCypherTransformer(CypherTranslator cypherTranslator) {

//region QueryTransformer Implementation
@Override
public AsgQuery transform(QueryInfo<String> query) {
public AsgQuery transform(CreateJsonQueryRequest query) {
return cypherTranslator.translate(query);
}
//endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
import com.google.inject.Inject;
import com.yangdb.fuse.dispatcher.asg.QueryToAsgTransformer;
import com.yangdb.fuse.dispatcher.query.QueryTransformer;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.dispatcher.query.graphql.GraphQL2QueryTransformer;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.Query;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;

/**
* Created by liorp on 12/15/2017.
*/
public class AsgGraphQLTransformer implements QueryTransformer<QueryInfo<String>, AsgQuery> {
public class AsgGraphQLTransformer implements QueryTransformer<CreateJsonQueryRequest, AsgQuery> {
private GraphQL2QueryTransformer graphQL2QueryTransformer;
private final QueryToAsgTransformer queryTransformer;

Expand All @@ -48,7 +48,7 @@ public AsgGraphQLTransformer(GraphQL2QueryTransformer graphQL2QueryTransformer,
//region QueryTransformer Implementation

@Override
public AsgQuery transform(QueryInfo<String> query) {
public AsgQuery transform(CreateJsonQueryRequest query) {
Query transform = graphQL2QueryTransformer.transform(query);
return queryTransformer.transform(transform);
}
Expand Down
7 changes: 3 additions & 4 deletions fuse-asg/src/main/java/com/yangdb/fuse/asg/AsgModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
*/



import com.google.inject.Binder;
import com.google.inject.TypeLiteral;
import com.typesafe.config.Config;
import com.yangdb.fuse.asg.strategy.AsgStrategyRegistrar;
import com.yangdb.fuse.asg.strategy.CypherAsgStrategyRegistrar;
import com.yangdb.fuse.asg.strategy.M1AsgStrategyRegistrar;
Expand All @@ -34,8 +34,7 @@
import com.yangdb.fuse.dispatcher.query.QueryTransformer;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.Query;
import com.typesafe.config.Config;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;
import org.jooby.Env;

/**
Expand All @@ -55,7 +54,7 @@ public void configureInner(Env env, Config conf, Binder binder) throws Throwable
.to(QueryToCompositeAsgTransformer.class)
.asEagerSingleton();

binder.bind(new TypeLiteral<QueryTransformer<QueryInfo<String>, AsgQuery>>(){})
binder.bind(new TypeLiteral<QueryTransformer<CreateJsonQueryRequest, AsgQuery>>(){})
.to(AsgCypherTransformer.class)
.asEagerSingleton();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,9 @@
import com.yangdb.fuse.dispatcher.query.JsonQueryTransformerFactory;
import com.yangdb.fuse.dispatcher.query.QueryTransformer;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.resourceInfo.FuseError;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;
import com.yangdb.fuse.model.transport.CreateQueryRequestMetadata;
import javaslang.Tuple2;

import java.util.List;

public class BasicJsonQueryTransformerFactory implements JsonQueryTransformerFactory {

Expand All @@ -44,7 +41,7 @@ public BasicJsonQueryTransformerFactory(AsgCypherTransformer cypherTransformer,


@Override
public QueryTransformer<QueryInfo<String>, AsgQuery> transform(String type) {
public QueryTransformer<CreateJsonQueryRequest, AsgQuery> transform(String type) {
switch (type) {
case CreateQueryRequestMetadata.TYPE_CYPHER:
return cypherTransformer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
import com.yangdb.fuse.asg.translator.cypher.strategies.CypherStrategyContext;
import com.yangdb.fuse.asg.translator.cypher.strategies.CypherTranslatorStrategy;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;
import org.opencypher.v9_0.ast.Statement;
import org.opencypher.v9_0.parser.CypherParser;
import scala.Option;

public class CypherTranslator implements AsgTranslator<QueryInfo<String>,AsgQuery> {
public class CypherTranslator implements AsgTranslator<CreateJsonQueryRequest,AsgQuery> {

@Inject
public CypherTranslator(CypherAsgStrategyRegistrar strategies) {
Expand All @@ -41,7 +41,7 @@ public CypherTranslator(CypherAsgStrategyRegistrar strategies) {


@Override
public AsgQuery translate(QueryInfo<String> source) {
public AsgQuery translate(CreateJsonQueryRequest source) {

final AsgQuery query = AsgQuery.Builder.start("cypher_", source.getOntology()).build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import com.yangdb.fuse.asg.translator.cypher.strategies.MatchCypherTranslatorStrategy;
import com.yangdb.fuse.model.asgQuery.AsgEBase;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.query.Rel;
import com.yangdb.fuse.model.query.properties.RelProp;
import com.yangdb.fuse.model.query.quant.Quant1;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
Expand Down Expand Up @@ -42,9 +42,9 @@ public void setUp() throws Exception {

@Test
public void testMatch_A_where_A_OfType_Return_A() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a:Dragon) where a.age > 100 RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));
AsgQuery expected = AsgQuery.Builder
.start("cypher_", "Dragons")
.next(typed(1,"Dragon", "a"))
Expand All @@ -56,9 +56,9 @@ public void testMatch_A_where_A_OfType_Return_A() {

@Test
public void testMatch_A_where_A_OfType_OR_A_OfType_Return_A() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a:Dragon) where (a.age < 100 AND a.birth >= '28/01/2001') RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));
AsgQuery expected = AsgQuery.Builder
.start("cypher_", "Dragons")
.next(typed(1,"Dragon", "a"))
Expand All @@ -74,9 +74,9 @@ public void testMatch_A_where_A_OfType_OR_A_OfType_Return_A() {

@Test
public void testMatch_A_where_A_OfType_AND_A_OfType_Return_A() {
AsgTranslator<QueryInfo<String>,AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)--(b) where a:Dragon AND (a.age < 100 AND b.birth >= '28/01/2001') RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));
final AsgEBase<Quant1> quantA = quant1(100, all);
quantA.addNext(rel(2, "*", Rel.Direction.RL,"Rel_#2")
.addNext(unTyped(3, "b")
Expand All @@ -101,9 +101,9 @@ public void testMatch_A_where_A_OfType_AND_A_OfType_Return_A() {

@Test
public void testMatch_A_where_A_OfType_AND_A_OfType_And_B_Return_All() {
AsgTranslator<QueryInfo<String>,AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)--(b) where a:Dragon AND (a.age < b.age AND b.birth >= '28/01/2001') RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));
final AsgEBase<Quant1> quantA = quant1(100, all);
quantA.addNext(rel(2, "*", Rel.Direction.RL,"Rel_#2")
.addNext(unTyped(3, "b")
Expand All @@ -128,9 +128,9 @@ public void testMatch_A_where_A_OfType_AND_A_OfType_And_B_Return_All() {

@Test
public void testMatch_A_where_A_OfType_testMatch_A_where_A_OfType_AND_C_OfType_Return_A() {
AsgTranslator<QueryInfo<String>,AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where a.age < 100 AND b.birth >= '28/01/2001' AND (c:Fire AND c:Freeze) RETURN a,b";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));


//region Test Methods
Expand Down Expand Up @@ -162,9 +162,9 @@ public void testMatch_A_where_A_OfType_testMatch_A_where_A_OfType_AND_C_OfType_R

@Test
public void testMatch_A_where_A_OfType_testMatch_A_where_A_OfType_AND_C_Return_All() {
AsgTranslator<QueryInfo<String>,AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where a.age < 100 AND b.birth >= '28/01/2001' AND (c.size > 50) RETURN *";
final AsgQuery query = translator.translate(new QueryInfo<>(q,"q",TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

//region Test Methods

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import com.yangdb.fuse.asg.translator.cypher.strategies.MatchCypherTranslatorStrategy;
import com.yangdb.fuse.model.asgQuery.AsgEBase;
import com.yangdb.fuse.model.asgQuery.AsgQuery;
import com.yangdb.fuse.model.query.QueryInfo;
import com.yangdb.fuse.model.query.Rel;
import com.yangdb.fuse.model.query.properties.RelProp;
import com.yangdb.fuse.model.query.quant.Quant1;
import com.yangdb.fuse.model.transport.CreateJsonQueryRequest;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Ignore;
Expand Down Expand Up @@ -44,9 +44,9 @@ public void setUp() throws Exception {

@Test
public void testMatch_A_where_A_OfType_OR_B_OfType_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)--(b) where a.age < 100 Or a.birth >= '28/01/2001' RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

AsgQuery expected = AsgQuery.Builder
.start("cypher_", "Dragons")
Expand Down Expand Up @@ -80,9 +80,9 @@ public void testMatch_A_where_A_OfType_OR_B_OfType_Return_() {

@Test
public void testMatch_A_where_A_OfType_And_OR_B_OfType_AND_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where a.age < 100 Or b.birth >= '28/01/2001' Or c:Fire RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));


AsgQuery expected = AsgQuery.Builder
Expand Down Expand Up @@ -127,9 +127,9 @@ public void testMatch_A_where_A_OfType_And_OR_B_OfType_AND_Return_() {

@Test
public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where (a.age < 100 AND b.birth >= '28/01/2001' ) Or c:Fire RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

String expected = "[└── Start, \n" +
" ──Q[300:some]:{4|7}, \n" +
Expand All @@ -148,9 +148,9 @@ public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_Return_() {

@Test
public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where (a.age >= 100 OR b.birth < '28/01/2001' ) And b:Person RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

String expected = "[└── Start, \n" +
" ──Q[300:some]:{4|7}, \n" +
Expand All @@ -170,9 +170,9 @@ public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_Return_() {

@Test
public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_b_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where ((a.age < 100 AND b.birth >= '28/01/2001' ) Or c:Fire) And b.size <= 300 RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));


AsgQuery expected = AsgQuery.Builder
Expand Down Expand Up @@ -221,9 +221,9 @@ public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_b_Return_() {

@Test
public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_b_OR_c_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where ((a.age < 100 AND a.birth >= '28/01/2001') Or c:Fire) And (b.age < 100 OR b.birth >= '28/01/2001') RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

//expected string representation
String expected = "[└── Start, \n" +
Expand Down Expand Up @@ -261,9 +261,9 @@ public void testMatch_A_AND_where_A_OfType_And_OR_B_OfType_AND_b_OR_c_Return_()
@Ignore
//todo add Rule for same variable with multiple operators
public void testMatch_A_OR_where_A_OfType_And_OR_B_OfType_AND_Return_() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where (a:Dragon OR a:Hours) Or c:Fire RETURN a";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));

AsgQuery expected = AsgQuery.Builder
.start("cypher_", "Dragons")
Expand Down Expand Up @@ -300,9 +300,9 @@ public void testMatch_A_OR_where_A_OfType_And_OR_B_OfType_AND_Return_() {

@Test
public void testMatch_A_where_A_OfType_testMatch_A_where_A_OfType_AND_C_Return_All() {
AsgTranslator<QueryInfo<String>, AsgQuery> translator = new CypherTranslator(() -> Collections.singleton(match));
AsgTranslator translator = new CypherTranslator(() -> Collections.singleton(match));
String q = "MATCH (a)-[c]-(b) where (a.age < 100 AND b.birth >= '28/01/2001') Or (c.size > 50) RETURN *";
final AsgQuery query = translator.translate(new QueryInfo<>(q, "q", TYPE_CYPHER, "ont"));
final AsgQuery query = translator.translate(new CreateJsonQueryRequest("q1","q1", TYPE_CYPHER, q,"test"));


//region Test Methods
Expand Down

0 comments on commit fb4688f

Please sign in to comment.