From 4ecf8709a9c37a9e5dcf1fdb48859dc56142d0aa Mon Sep 17 00:00:00 2001 From: Ryan Wisnesky Date: Sun, 20 Oct 2024 11:53:27 -0700 Subject: [PATCH] changes for sql null handling --- src/catdata/cql/Algebra.java | 7 ++++--- src/catdata/cql/SqlTypeSide.java | 10 ++++++---- src/catdata/cql/SqlTypeSide2.java | 10 +++++----- src/catdata/cql/SqlTypeSideSkolem.java | 4 ++-- src/catdata/cql/exp/EdsExpFromMsCatalog.java | 6 +++--- src/catdata/cql/exp/EdsExpSqlNull.java | 4 ++-- src/catdata/cql/exp/SchExpJdbcAll.java | 16 +++++++++------- src/catdata/cql/fdm/SkolemInstance.java | 12 ++++++------ src/catdata/cql/fdm/ToJdbcPragmaInstance.java | 2 +- 9 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/catdata/cql/Algebra.java b/src/catdata/cql/Algebra.java index ea4af85..728d8b6 100644 --- a/src/catdata/cql/Algebra.java +++ b/src/catdata/cql/Algebra.java @@ -712,7 +712,7 @@ public synchronized void storeMyRecord(boolean emitIds, List hdrQ, List< } - private Map forSql = new HashMap<>(); + //private Map forSql = new HashMap<>(); private Object fromTerm(int sqlty, Term term) { if (term.obj() != null) { Optional o = (Optional) term.obj(); @@ -720,7 +720,8 @@ private Object fromTerm(int sqlty, Term term return o.get(); } } - if (sqlty == Types.VARCHAR || sqlty == Types.LONGVARCHAR || sqlty == Types.NVARCHAR) { + // System.out.println("ret null"); + /* if (sqlty == Types.VARCHAR || sqlty == Types.LONGVARCHAR || sqlty == Types.NVARCHAR) { if (term.sk() != null) { if (forSql.containsKey(term.sk())) { return "?" + forSql.get(term.sk()); @@ -729,7 +730,7 @@ private Object fromTerm(int sqlty, Term term return "?" + forSql.get(term.sk()); } } - } + } */ return null; } diff --git a/src/catdata/cql/SqlTypeSide.java b/src/catdata/cql/SqlTypeSide.java index adbea92..73e325a 100644 --- a/src/catdata/cql/SqlTypeSide.java +++ b/src/catdata/cql/SqlTypeSide.java @@ -298,8 +298,10 @@ public static Optional not(Optional x) { } public static Pair, String> boolSort = new Pair<>(Collections.emptyList(), "Boolean"); - public static Sym t = Sym.Sym("true", boolSort); - public static Sym f = Sym.Sym("false", boolSort); + + //todo: change to obj + public static Term t = Term.Obj(Optional.of(true), "Boolean"); + public static Term f = Term.Obj(Optional.of(false), "Boolean"); public static Sym n = Sym.Sym("null", boolSort); public static Pair, String> boolSort1 = new Pair<>(Collections.singletonList("Boolean"), "Boolean"); @@ -490,8 +492,8 @@ public static Constraints makeEds(Schema schT, Aql String x = ("x"); String y = ("y"); String z = ("z"); - Term t = Term.Sym(SqlTypeSide.t, Collections.emptyList()); - Term f = Term.Sym(SqlTypeSide.f, Collections.emptyList()); + Term t = SqlTypeSide.t.convert(); + Term f = SqlTypeSide.f.convert(); List> lxx = new ArrayList<>(2); lxx.add(Term.Var(x)); diff --git a/src/catdata/cql/SqlTypeSide2.java b/src/catdata/cql/SqlTypeSide2.java index 7226e3a..54bee52 100644 --- a/src/catdata/cql/SqlTypeSide2.java +++ b/src/catdata/cql/SqlTypeSide2.java @@ -39,7 +39,7 @@ public synchronized TypeSide make(TypeSide parent, AqlOptions Collections.emptyMap(), ops); } - public static final Sym TRUE_SYM = SqlTypeSide.t, FALSE_SYM = SqlTypeSide.f, + public static final Sym /*TRUE_SYM = null , FALSE_SYM = null/*SqlTypeSide.f, */ NOT_SYM = Sym.Sym("not", SqlTypeSide.boolSort1), IS_TRUE_SYM = Sym.Sym("isTrue", SqlTypeSide.boolSort1), IS_FALSE_SYM = Sym.Sym("isFalse", SqlTypeSide.boolSort1), AND_SYM = Sym.Sym("and", SqlTypeSide.boolSort2), OR_SYM = Sym.Sym("or", SqlTypeSide.boolSort2); @@ -102,8 +102,8 @@ public boolean addSym(TypeSide ts, Sym sym, List dom, Ty cod) { private synchronized Map, Ty>> syms(TypeSide parent) { Map, Ty>> m = Util.mk(); m.putAll(parent.syms); - m.put(TRUE_SYM, new Pair<>(Collections.emptyList(), boolTy)); - m.put(FALSE_SYM, new Pair<>(Collections.emptyList(), boolTy)); + // m.put(TRUE_SYM, new Pair<>(Collections.emptyList(), boolTy)); + // m.put(FALSE_SYM, new Pair<>(Collections.emptyList(), boolTy)); List x = Collections.synchronizedList(new ArrayList<>(1)); x.add(boolTy); @@ -137,8 +137,8 @@ private Set, Term, // null propagation // congruence for each symbol (EDs) - Term t = Term.Sym(TRUE_SYM, Collections.emptyList()); - Term f = Term.Sym(FALSE_SYM, Collections.emptyList()); + Term t =SqlTypeSide.t.convert(); // Term.Sym(TRUE_SYM, Collections.emptyList()); + Term f = SqlTypeSide.f.convert(); //.Sym(FALSE_SYM, Collections.emptyList()); Term u = Term.Sym(typedNull(boolTy), Collections.emptyList()); ret.add(new Triple<>(Collections.emptyMap(), Term.Sym(NOT_SYM, Collections.singletonList(t)), f)); diff --git a/src/catdata/cql/SqlTypeSideSkolem.java b/src/catdata/cql/SqlTypeSideSkolem.java index 97b7e54..979b0da 100644 --- a/src/catdata/cql/SqlTypeSideSkolem.java +++ b/src/catdata/cql/SqlTypeSideSkolem.java @@ -478,8 +478,8 @@ public static Constraints makeEds(Schema schT, Aql String x = ("x"); String y = ("y"); String z = ("z"); - Term t = Term.Sym(SqlTypeSide.t, Collections.emptyList()); - Term f = Term.Sym(SqlTypeSide.f, Collections.emptyList()); + Term t = SqlTypeSide.t.convert(); + Term f = SqlTypeSide.f.convert(); List> lxx = new ArrayList<>(2); lxx.add(Term.Var(x)); diff --git a/src/catdata/cql/exp/EdsExpFromMsCatalog.java b/src/catdata/cql/exp/EdsExpFromMsCatalog.java index fbf0b31..ddb8073 100644 --- a/src/catdata/cql/exp/EdsExpFromMsCatalog.java +++ b/src/catdata/cql/exp/EdsExpFromMsCatalog.java @@ -384,7 +384,7 @@ public Constraints eval0(AqlEnv env, boolean isC) { Term j = Term.Sym(Sym.Sym("eq", new Pair<>(Util.list(atts.get(p.first).second, atts.get(p.first).second), SqlTypeSide.boolSort.second)), Util.list(l, r)); - ewh.add(new Pair<>(j, Term.Sym(SqlTypeSide.t, Collections.emptyList()))); + ewh.add(new Pair<>(j, SqlTypeSide.t.convert())); } else { ewh.add(new Pair<>(l, r)); } @@ -413,7 +413,7 @@ private void processNullable(AqlEnv env, List eds, String ty, Att theAtt, bo Term lhs = Term.Sym( Sym.Sym("isNull", new Pair<>(Collections.singletonList(ty), "Boolean")), Collections.singletonList(Term.Att(theAtt, Term.Var("v")))); - Term rhs = Term.Sym(SqlTypeSide.f, Collections.emptyList()); + Term rhs = SqlTypeSide.f.convert(); var ed = new ED(Collections.singletonMap("v", Chc.inRight(theAtt.en)), Collections.emptyMap(), Collections.emptySet(), Collections.singleton(new Pair<>(lhs, rhs)), false, env.defaults); @@ -445,7 +445,7 @@ private void processUniq(AqlEnv env, List eds, Map Sym.Sym("eq", new Pair<>(Util.list(atts.get(att).second, atts.get(att).second), SqlTypeSide.boolSort.second)), Util.list(l, r)); - awh.add(new Pair<>(j, Term.Sym(SqlTypeSide.t, Collections.emptyList()))); + awh.add(new Pair<>(j, SqlTypeSide.t.convert())); } else { awh.add(new Pair<>(l, r)); } diff --git a/src/catdata/cql/exp/EdsExpSqlNull.java b/src/catdata/cql/exp/EdsExpSqlNull.java index 5d9527b..2806c57 100644 --- a/src/catdata/cql/exp/EdsExpSqlNull.java +++ b/src/catdata/cql/exp/EdsExpSqlNull.java @@ -66,8 +66,8 @@ public static Constraints makeEds(Schema schT, Aql String x = ("x"); String y = ("y"); String z = ("z"); - Term t = Term.Sym(SqlTypeSide.t, Collections.emptyList()); - Term f = Term.Sym(SqlTypeSide.f, Collections.emptyList()); + Term t = SqlTypeSide.t.convert(); + Term f = SqlTypeSide.f.convert(); // Term u = Term.Sym(Sym.Sym("null_Boolean"), // Collections.emptyList()); diff --git a/src/catdata/cql/exp/SchExpJdbcAll.java b/src/catdata/cql/exp/SchExpJdbcAll.java index bc91818..2b8a625 100644 --- a/src/catdata/cql/exp/SchExpJdbcAll.java +++ b/src/catdata/cql/exp/SchExpJdbcAll.java @@ -155,17 +155,19 @@ public Schema eval0(AqlEnv env, boolean isC) { SqlSchema info = new SqlSchema(conn.getMetaData(), tick); for (SqlTable table : info.tables) { if (table.name.first != null && (table.name.first.toLowerCase().equals("system") || table.name.first.toLowerCase().equals("sys") - || table.name.first.toLowerCase().equals("ctxsys") + || table.name.first.toLowerCase().equals("ctxsys") || table.name.first.toLowerCase().equals("mdsys") || table.name.first.toLowerCase().equals("xdb"))) { continue; // ignore system tables } String x = (table.name.second); - if (table.name.first != null) { - x = (table.name.first + "." + table.name.second); - } - if (table.name.first != null && table.name.first.toLowerCase().equals("dbo")) { - x = table.name.second; - } + if (oracleSchMode) { + x = table.name.second; + } else if (table.name.first != null && table.name.first.toLowerCase().equals("dbo")) { + x = table.name.second; + } else if (table.name.first != null) { + x = (table.name.first + "." + table.name.second); + } + // if (oracleSchMode) { // x = x.toLowerCase(); // } diff --git a/src/catdata/cql/fdm/SkolemInstance.java b/src/catdata/cql/fdm/SkolemInstance.java index 6457d2b..19682dd 100644 --- a/src/catdata/cql/fdm/SkolemInstance.java +++ b/src/catdata/cql/fdm/SkolemInstance.java @@ -193,9 +193,9 @@ public Term> rewriteIsNull(Term o = (Optional) ret.obj(); if (o.isPresent()) { - return Term.Sym(SqlTypeSide.f, Collections.EMPTY_LIST); + return SqlTypeSide.f.convert(); } else { - return Term.Sym(SqlTypeSide.t, Collections.EMPTY_LIST); + return SqlTypeSide.t.convert(); } } else if (l.get(0).att() != null) { X x = algebra().intoX(l.get(0).arg); @@ -207,9 +207,9 @@ public Term> rewriteIsNull(Term o = (Optional) ret.obj(); if (o.isPresent()) { - return Term.Sym(SqlTypeSide.f, Collections.EMPTY_LIST); + return SqlTypeSide.f.convert(); } else { - return Term.Sym(SqlTypeSide.t, Collections.EMPTY_LIST); + return SqlTypeSide.t.convert(); } } } else { @@ -237,10 +237,10 @@ public Algebra, X, Pair> algebra if (o.isPresent()) { eqs.add(new Pair<>(lhs, Term.Obj(v.obj(),v.ty()))); - eqs.add(new Pair(Term.Sym((Sym)lhs2, Collections.singletonList(lhs)), Term.Sym(SqlTypeSide.f, Collections.EMPTY_LIST))); + eqs.add(new Pair(Term.Sym((Sym)lhs2, Collections.singletonList(lhs)), SqlTypeSide.f)); //TODO: add isNull action } else { - eqs.add(new Pair(Term.Sym((Sym)lhs2, Collections.singletonList(lhs)), Term.Sym(SqlTypeSide.t, Collections.EMPTY_LIST))); + eqs.add(new Pair(Term.Sym((Sym)lhs2, Collections.singletonList(lhs)), SqlTypeSide.t)); } } } diff --git a/src/catdata/cql/fdm/ToJdbcPragmaInstance.java b/src/catdata/cql/fdm/ToJdbcPragmaInstance.java index 0287e95..1f2e8c4 100644 --- a/src/catdata/cql/fdm/ToJdbcPragmaInstance.java +++ b/src/catdata/cql/fdm/ToJdbcPragmaInstance.java @@ -97,7 +97,7 @@ public void execute() { } } for (X x : I.algebra().en(en)) { - // System.out.println("store "); + //System.out.println("store "); I.algebra().storeMyRecord(emitIds, hdrQ, hdr, II, conn, x, header, en, prefix, tick, false); } // System.out.println("--");