use of catdata.fql.sql.SimpleCreateTable in project fql by CategoricalData.
the class JDBCBridge method maybeExecInstance.
private static List<PSM> maybeExecInstance(InstOps ops, FQLProgram prog, Statement Stmt, String k, InstExp v, PSMInterp interp, Map<String, Set<Map<Object, Object>>> ret) throws SQLException {
List<PSM> psm = new LinkedList<>();
psm.addAll(PSMGen.makeTables(k, v.type(prog).toSig(prog), false));
switch(DefunctGlobalOptions.debug.fql.sqlKind) {
case NATIVE:
psm.addAll(v.accept(k, ops).first);
interp.interpX(psm, ret);
break;
case H2:
case JDBC:
default:
if (v instanceof InstExp.FullSigma) {
List<PSM> xxx = v.accept(k, ops).first;
if (xxx.size() != 1) {
throw new RuntimeException();
}
FullSigma yyy = (FullSigma) xxx.get(0);
int theguid = getGuid(Stmt);
interp.guid = theguid;
yyy.exec(interp, ret);
Stmt.execute("SET @guid = " + interp.guid);
psm.addAll(makeInserts(k, ret, v.type(prog).toSig(prog), ((InstExp.FullSigma) v).F.toMap(prog).source));
} else if (v instanceof Exp) {
List<PSM> xxx = v.accept(k, ops).first;
if (xxx.size() != 1) {
throw new RuntimeException();
}
ExpPSM yyy = (ExpPSM) xxx.get(0);
int theguid = getGuid(Stmt);
interp.guid = theguid;
yyy.exec(interp, ret);
Stmt.execute("SET @guid = " + interp.guid);
psm.addAll(makeInserts(k, ret, v.type(prog).toSig(prog), null));
} else if (v instanceof Two) {
List<PSM> xxx = v.accept(k, ops).first;
if (xxx.size() != 1) {
throw new RuntimeException();
}
PropPSM yyy = (PropPSM) xxx.get(0);
int theguid = getGuid(Stmt);
interp.guid = theguid;
yyy.exec(interp, ret);
Stmt.execute("SET @guid = " + interp.guid);
psm.addAll(makeInserts(k, ret, v.type(prog).toSig(prog), null));
} else if (v instanceof Kernel) {
List<PSM> xxx = v.accept(k, ops).first;
if (xxx.size() != 1) {
throw new RuntimeException();
}
PSMUnChi yyy = (PSMUnChi) xxx.get(0);
int theguid = getGuid(Stmt);
interp.guid = theguid;
yyy.exec(interp, ret);
Stmt.execute("SET @guid = " + interp.guid);
psm.addAll(makeInserts(k, ret, v.type(prog).toSig(prog), null));
Signature ooo = v.type(prog).toSig(prog);
for (Node n : ooo.nodes) {
psm.add(new SimpleCreateTable(k + "_trans_" + n.string, PSM.VARCHAR(), false));
}
for (Edge n : ooo.edges) {
psm.add(new SimpleCreateTable(k + "_trans_" + n.name, PSM.VARCHAR(), false));
}
for (Attribute<Node> n : ooo.attrs) {
psm.add(new SimpleCreateTable(k + "_trans_" + n.name, n.target.psm(), false));
}
psm.addAll(makeInserts(k + "_trans", ret, v.type(prog).toSig(prog), null));
} else if (v instanceof External && DefunctGlobalOptions.debug.fql.sqlKind == SQLKIND.H2) {
} else {
psm.addAll(v.accept(k, ops).first);
}
for (PSM sql : psm) {
Stmt.execute(sql.toPSM());
}
if (!(v instanceof InstExp.FullSigma) && !(v instanceof Exp) && !(v instanceof Two) && !(v instanceof Kernel)) {
gatherInstance(prog, ret, Stmt, k, v);
}
if (v instanceof Delta) {
gatherSubstInv(prog, ret, Stmt, k, v);
} else if (v instanceof Times) {
gatherTransform(prog, ret, Stmt, k + "_fst", v.type(prog).toConst(prog));
gatherTransform(prog, ret, Stmt, k + "_snd", v.type(prog).toConst(prog));
} else if (v instanceof One) {
gatherSubstInv2(prog, ret, Stmt, k, v);
}
break;
}
return psm;
}
use of catdata.fql.sql.SimpleCreateTable in project fql by CategoricalData.
the class InstOps method visit.
@Override
public List<PSM> visit(String env, Coreturn e) {
String xxx = "coreturn_temp_xxx";
List<PSM> ret = new LinkedList<>();
InstExp i1 = prog.insts.get(e.inst);
if (i1 instanceof Sigma) {
String middle = ((Sigma) i1).I;
// can't be null
InstExp i2 = prog.insts.get(middle);
Mapping f = ((Sigma) i1).F.toMap(prog);
if (i2 instanceof Delta) {
for (Node n : f.target.nodes) {
List<Flower> u = new LinkedList<>();
for (Node m : f.source.nodes) {
if (!f.nm.get(m).equals(n)) {
continue;
}
u.add(new CopyFlower(middle + "_" + m.string + "_subst_inv", "c0", "c1"));
}
ret.add(new SimpleCreateTable(xxx, PSM.VARCHAR(), false));
ret.add(new InsertSQL(xxx, new Union(u), "c0", "c1"));
ret.add(new InsertSQL(env + "_" + n.string, PSMGen.compose(e.inst + "_" + n.string + "_subst_inv", xxx), "c0", "c1"));
ret.add(new DropTable(xxx));
}
}
} else if (i1 instanceof FullSigma) {
String middle = ((FullSigma) i1).I;
// can't be null
InstExp i2 = prog.insts.get(middle);
Mapping f = ((FullSigma) i1).F.toMap(prog);
if (i2 instanceof Delta) {
ret.add(new FullSigmaCounit(f, ((Delta) i2).I, middle, e.inst, env));
} else {
throw new RuntimeException();
}
} else if (i1 instanceof Delta) {
String middle = ((Delta) i1).I;
// can't be null
InstExp i2 = prog.insts.get(middle);
Mapping f = ((Delta) i1).F.toMap(prog);
if (i2 instanceof Pi) {
Pi input0 = ((Pi) i2);
String input = input0.I;
try {
Map<String, Triple<Node, Node, Arr<Node, Path>>[]> colmap = PSMGen.pi(f, input, middle).second;
for (Node m : f.source.nodes) {
Node n = f.nm.get(m);
Triple<Node, Node, Arr<Node, Path>>[] col = colmap.get(n.string);
Triple<Node, Node, Arr<Node, Path>> toFind = new Triple<>(n, m, new Arr<>(new Path(f.target, n), n, n));
int i = 0;
boolean found = false;
for (Triple<Node, Node, Arr<Node, Path>> cand : col) {
if (cand.equals(toFind)) {
found = true;
Map<String, String> from = new HashMap<>();
from.put("lim", middle + "_" + n + "_limit");
LinkedHashMap<String, Pair<String, String>> select = new LinkedHashMap<>();
select.put("c0", new Pair<>("lim", "guid"));
select.put("c1", new Pair<>("lim", "c" + i));
List<Pair<Pair<String, String>, Pair<String, String>>> where = new LinkedList<>();
Flower flower = new Flower(select, from, where);
ret.add(new SimpleCreateTable(xxx, PSM.VARCHAR(), false));
ret.add(new InsertSQL(xxx, flower, "c0", "c1"));
ret.add(new InsertSQL(env + "_" + m, PSMGen.compose(e.inst + "_" + m + "_subst_inv", xxx), "c0", "c1"));
ret.add(new DropTable(xxx));
break;
}
i++;
}
if (!found) {
throw new RuntimeException();
}
}
} catch (FQLException fe) {
fe.printStackTrace();
throw new RuntimeException(fe.getMessage());
}
} else {
throw new RuntimeException();
}
} else {
throw new RuntimeException();
}
return ret;
}
use of catdata.fql.sql.SimpleCreateTable in project fql by CategoricalData.
the class JDBCBridge method makeInserts.
private static List<PSM> makeInserts(String k, Map<String, Set<Map<Object, Object>>> state, Signature sig, Signature src_sig) {
List<PSM> ret = new LinkedList<>();
List<String> attrs = new LinkedList<>();
attrs.add("c0");
attrs.add("c1");
if (src_sig != null) {
for (Node n : src_sig.nodes) {
Set<Map<Object, Object>> v = state.get(k + "_" + n.string + "_e");
ret.add(new SimpleCreateTable(k + "_" + n.string + "_e", PSM.VARCHAR(), false));
if (v.isEmpty()) {
continue;
}
ret.add(new InsertValues(k + "_" + n.string + "_e", attrs, v));
}
Set<Map<Object, Object>> v = state.get(k + "_lineage");
Map<String, String> at = new LinkedHashMap<>();
at.put("c0", PSM.VARCHAR());
at.put("c1", PSM.VARCHAR());
at.put("c2", PSM.VARCHAR());
at.put("c3", PSM.VARCHAR());
ret.add(new CreateTable(k + "_lineage", at, false));
if (!v.isEmpty()) {
ret.add(new InsertValues(k + "_lineage", new LinkedList<>(at.keySet()), v));
}
}
for (Node n : sig.nodes) {
Set<Map<Object, Object>> v = state.get(k + "_" + n.string);
if (v.isEmpty()) {
continue;
}
ret.add(new InsertValues(k + "_" + n.string, attrs, v));
}
for (Edge e : sig.edges) {
Set<Map<Object, Object>> v = state.get(k + "_" + e.name);
if (v.isEmpty()) {
continue;
}
ret.add(new InsertValues(k + "_" + e.name, attrs, v));
}
for (Attribute<Node> a : sig.attrs) {
Set<Map<Object, Object>> v = state.get(k + "_" + a.name);
if (v.isEmpty()) {
continue;
}
ret.add(new InsertValues(k + "_" + a.name, attrs, v));
}
return ret;
}
Aggregations