Commit 112f7b53 authored by Ryan Wisnesky's avatar Ryan Wisnesky
Browse files

quick and dirty query parameters

parent c8e0b4c7
Loading
Loading
Loading
Loading
+18 −17
Changes for src/catdata/aql/Query.java: 18 added lines, 17 removed lines.
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

import catdata.Chc;
@@ -39,8 +38,8 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		return Kind.QUERY;
	}

	public final Ctx<Var, Ty> params = new Ctx<>();
	public final Ctx<Var, Term<Ty, Void, Sym, Void, Void, Void, Void>> consts = new Ctx<>();
	public final Ctx<Var, Ty> params;
	//public final Ctx<Var, Term<Ty, Void, Sym, Void, Void, Void, Void>> consts = new Ctx<>();

	public final Ctx<En2, Frozen<Ty, En1, Sym, Fk1, Att1>> ens = new Ctx<>();
	public final Ctx<Att2, Term<Ty, En1, Sym, Fk1, Att1, Var, Var>> atts;
@@ -72,8 +71,7 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		Blob<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> b = new Blob<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2>(conv1(ens),
				atts, conv2(), src, dst);
		b = unfoldNestedApplications(b);
		Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> p = new Query<>(params, consts, b.ens, b.atts, b.fks, src, dst,
				true);
		Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> p = new Query<>(params, new Ctx<>(), b.ens, b.atts, b.fks, src, dst, true);
		return p;
	}

@@ -368,6 +366,7 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		Util.assertNotNull(ens, atts, fks, src, dst);
		this.src = src;
		this.dst = dst;
		this.params = new Ctx<>(params.map);
		totalityCheck(ens, atts, fks);

		for (En2 en2 : ens.keySet()) {
@@ -379,11 +378,14 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
				throw new RuntimeException("In block for entity " + en2 + ", " + thr.getMessage());
			}
		}

		Ctx<Var, Term<Ty, En1, Sym, Fk1, Att1, Var, Var>> www = new Ctx<>();
		for (Var v : params.keySet()) {
			www.put(v, Term.Sk(v));
		}
		for (Fk2 fk2 : fks.keySet()) {
			try {
				Boolean b = fks.get(fk2).second || doNotCheckPathEqs;
				this.fks.put(fk2, new LiteralTransform<>(fks.get(fk2).first.map, new HashMap<>(),
				this.fks.put(fk2, new LiteralTransform<>(fks.get(fk2).first.map, www.map,
						this.ens.get(dst.fks.get(fk2).second), this.ens.get(dst.fks.get(fk2).first), b));
				doNotValidate.put(fk2, b);
			} catch (Throwable thr) {
@@ -556,7 +558,7 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		private DP<Ty, En1, Sym, Fk1, Att1, Var, Var> dp;
		public final AqlOptions options;
		private Ctx<Var, Ty> params;
		private Ctx<Var, Term<Ty, Void, Sym, Void, Void, Void, Void>> consts;
		//private Ctx<Var, Term<Ty, Void, Sym, Void, Void, Void, Void>> consts;

		public Frozen(Ctx<Var, Ty> params, Ctx<Var, Term<Ty, Void, Sym, Void, Void, Void, Void>> consts,
				Ctx<Var, En1> gens, Collection<Eq<Ty, En1, Sym, Fk1, Att1, Var, Var>> eqs,
@@ -565,7 +567,8 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
			this.eqs = eqs;
			this.schema = schema;
			this.params = params;
			this.consts = consts;
		//	this.consts = consts;
			//this.sks = params;
			
			validateNoTalg();

@@ -640,9 +643,9 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		if (!params.isEmpty()) {
			ret += "params " + Util.sep(params.map, ":", " ");
		}
		if (!consts.isEmpty()) {
		/* if (!consts.isEmpty()) {
			ret += "consts " + Util.sep(params.map, "=", " ");
		}
		} */

		Map<String, String> m1 = new HashMap<>();

@@ -786,12 +789,6 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
		List<String> ret1 = new LinkedList<>();
		Map<En2, String> ret2 = new HashMap<>();

		/*
		 * Map<En2, Triple<List<Chc<Fk2, Att2>>, List<String>, List<String>>> ss =
		 * dst.toSQL_srcSchemas(post, "Varchar"); for (En2 en2 : dst.ens) {
		 * ret.addAll(ss.get(en2).second); }
		 */

		for (En2 en2 : ens.keySet()) {
			Frozen<Ty, En1, Sym, Fk1, Att1> b = ens.get(en2);
			Ctx<Var, En1> gens = b.gens;
@@ -884,12 +881,16 @@ public final class Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> implements Sem
			String newLhs;
			if (eq.lhs.gen != null) {
				newLhs = eq.lhs.gen + "." + idCol;
			} else if (eq.lhs.sk != null) {
				newLhs = "?";
			} else {
				newLhs = quotePrim(eq.lhs).toString();
			}
			String newRhs;
			if (eq.rhs.gen != null) {
				newRhs = eq.rhs.gen + "." + idCol;
			} else if (eq.rhs.sk != null) {
				newRhs = "?";
			} else {
				newRhs = quotePrim(eq.rhs).toString();
			}
+2 −1
Changes for src/catdata/aql/Term.java: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -263,7 +263,8 @@ public final class Term<Ty, En, Sym, Fk, Att, Gen, Sk> {
		} else if (sk != null) {
			Ty tye = sks.get(sk);
			if (tye == null) {
				throw new RuntimeException("In " + this + ", " + "the type for labelled null " + sk + " is not defined");	
				String xxx = sks.size() > 64 ? " too big to print " : Util.sep(sks, ":", ", ");
				throw new RuntimeException("In " + this + ", " + "the type for labelled null " + sk + " is not defined.\n\nAvailable: " + xxx);	
			}
			ret = Chc.inLeft(tye);
		}
+1 −1
Changes for src/catdata/aql/exp/AqlParser.java: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ public abstract class AqlParser {
			"command", "graph", "exec_jdbc", "exec_js", "exec_cmdline", "literal", "add_to_classpath", 
			"identity", "match", "attributes", "empty", "imports", "types", "constants", "functions", "equations",
			"forall", "java_types", "multi_equations", "pi",
			"toQuery", "toCoQuery", "anonymize", "frozen", 
			"toQuery", "toCoQuery", "anonymize", "frozen",  "params", 
			"java_constants", "java_functions", "options", "entities", "src", "unique", "dst", "path_equations",
			"observation_equations", "generators", "rename", "remove", "modify",
			"foreign_keys", "lambda", "sigma", "delta", "pi", "unit", "counit", "eval", "coeval", "ed", "chase", "from",
+9 −31
Changes for src/catdata/aql/exp/CombinatorParser.java: 9 added lines, 31 removed lines.
Original line number Diff line number Diff line
@@ -1027,41 +1027,19 @@ public class CombinatorParser extends AqlParser {
	}

	private static Parser<QueryExpRaw> queryExpRaw() {
		/*
		 * Parser<List<catdata.Pair<LocStr, String>>> fr = Parsers.tuple(token("from"),
		 * env(ident, ":")).map(x -> x.b);
		 * 
		 * Parser<catdata.Pair<Integer, catdata.Pair<RawTerm, RawTerm>>> eq = Parsers
		 * .tuple(Parsers.INDEX, Parsers.tuple(term(), token("="), term()).map(x -> new
		 * catdata.Pair<>(x.a, x.c))) .map(x -> new catdata.Pair<>(x.a, x.b));
		 * 
		 * Parser<List<catdata.Pair<Integer, catdata.Pair<RawTerm, RawTerm>>>> eqs =
		 * Parsers .tuple(token("where"), eq.many()).map(x -> x.b);
		 * 
		 * Parser<List<catdata.Pair<LocStr, RawTerm>>> atts = Parsers
		 * .tuple(token("attributes"), Parsers.tuple(locstr, token("->"), term()).map(x
		 * -> new catdata.Pair<>(x.a, x.c)).many()) .map(x -> x.b);
		 * 
		 * Parser<List<catdata.Pair<LocStr, Trans>>> fks = Parsers
		 * .tuple(token("foreign_keys"), Parsers.tuple(locstr, token("->"),
		 * trans()).map(x -> new catdata.Pair<>(x.a, x.c)).many()) .map(x -> x.b);
		 * 
		 * Parser<Tuple5<Token, LocStr, catdata.Pair<List<catdata.Pair<LocStr, String>>,
		 * List<catdata.Pair<Integer, catdata.Pair<RawTerm, RawTerm>>>>,
		 * Pair<List<catdata.Pair<LocStr, RawTerm>>, List<catdata.Pair<LocStr, Trans>>>,
		 * List<catdata.Pair<String, String>>>> en = Parsers .tuple(token("entity"),
		 * locstr.followedBy(token("->")), Parsers.tuple(token("{"), fr, eqs,
		 * token("}")).map(x -> new catdata.Pair<>(x.b, x.c)),
		 * Parsers.tuple(atts.optional(), fks.optional()), options);
		 */
		Parser<Tuple3<List<LocStr>, List<catdata.Pair<LocStr, PreBlock>>, List<catdata.Pair<String, String>>>> pa = Parsers
				.tuple(imports, preblock(false).many(), options);
		Parser<List<catdata.Pair<LocStr, String>>> q = Parsers.tuple(token("params"), env(ident, ":")).map(x->x.b).optional();
		
		Parser<Tuple4<List<catdata.Pair<LocStr, String>>, List<LocStr>, List<catdata.Pair<LocStr, PreBlock>>, List<catdata.Pair<String, String>>>> pa = Parsers
				.tuple(q, imports, preblock(false).many(), options);

		Parser<Tuple5<Token, Token, SchExp<?, ?, ?, ?, ?>, SchExp<?, ?, ?, ?, ?>, Token>> l = Parsers.tuple(
				token("literal"), token(":"), sch_ref.lazy().followedBy(token("->")), sch_ref.lazy(), token("{"));

/*
 * List<Pair<LocStr, String>> params, SchExp<?, ?, ?, ?, ?> c, SchExp<?, ?, ?, ?, ?> d, List<LocStr> imports,
			List<Pair<LocStr, PreBlock>> list, List<Pair<String, String>> options
 */
		Parser<QueryExpRaw> ret = Parsers.tuple(l, pa, token("}"))
				.map(x -> new QueryExpRaw(x.a.c, x.a.d, x.b.a, Util.newIfNull(x.b.b), Util.newIfNull(x.b.c)));
				.map(x -> new QueryExpRaw(Util.newIfNull(x.b.a), x.a.c, x.a.d, x.b.b, Util.newIfNull(x.b.c), Util.newIfNull(x.b.d)));

		return ret;
	}
+4 −2
Changes for src/catdata/aql/exp/QueryExp.java: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -263,7 +263,9 @@ public abstract class QueryExp<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2>
			
			Query<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2> q1 = Q1.eval(env);
			Query<Ty, En2, Sym, Fk2, Att2, En3, Fk3, Att3> q2 = Q2.eval(env);
			
			if (!q1.params.equals(q2.params)) {
				throw new RuntimeException("Params do not match: " + q1.params + " and then " + q2.params);
			}

			Ctx<En3, Triple<Ctx<Var, En1>, Collection<Eq<Ty, En1, Sym, Fk1, Att1, Var, Var>>, AqlOptions>> ens = new Ctx<>();
			Ctx<Att3, Term<Ty, En1, Sym, Fk1, Att1, Var, Var>> atts = new Ctx<>();
@@ -358,7 +360,7 @@ public abstract class QueryExp<Ty, En1, Sym, Fk1, Att1, En2, Fk2, Att2>
			}
			

			return Query.makeQuery(ens, atts, fks, q1.src, q2.dst,
			return Query.makeQuery2(q1.params, new Ctx<>(), ens, atts, fks, q1.src, q2.dst,
					(Boolean) ops.getOrDefault(AqlOption.dont_validate_unsafe), (Boolean) ops.getOrDefault(AqlOption.query_remove_redundancy));

		}
Loading