Changeset: 501dc7a0fe0c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/501dc7a0fe0c
Modified Files:
sql/backends/monet5/sql.c
sql/test/2024/Tests/returning.test
Branch: returning
Log Message:
add test and test code reading|dumping relations
diffs (120 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -5538,6 +5538,53 @@ SQLcheck(Client cntxt, MalBlkPtr mb, Mal
return MAL_SUCCEED;
}
+static str
+SQLread_dump_rel(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ mvc *m = NULL;
+ str msg = NULL;
+ str *r = getArgReference_str(stk, pci, 0);
+ char *input = *getArgReference_str(stk, pci, 1);
+
+ if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+ return msg;
+ if ((msg = checkSQLContext(cntxt)) != NULL)
+ return msg;
+
+ list *refs = sa_list(m->sa);
+ if (refs == NULL)
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+ int pos = 0;
+ sql_rel* rel = rel_read(m, input, &pos, refs);
+ if (!rel)
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(42000) "failed to load
json");
+
+ buffer *b = NULL;
+ stream *s = NULL;
+ char *res = NULL;
+
+ b = buffer_create(1024);
+ if(b == NULL)
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ s = buffer_wastream(b, "exp_dump");
+ if(s == NULL)
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+ refs = sa_list(m->sa);
+ if (refs == NULL)
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+ rel_print_refs(m, s, rel, 0, refs, 0);
+ rel_print_(m, s, rel, 0, refs, 0);
+ res = buffer_get_buf(b);
+
+ if (!(*r = GDKstrdup(res)))
+ throw(SQL, "SQLread_dump_rel", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ return MAL_SUCCEED;
+}
+
+
static mel_func sql_init_funcs[] = {
pattern("sql", "shutdown", SQLshutdown_wrap, true, "", args(1,3,
arg("",str),arg("delay",bte),arg("force",bit))),
pattern("sql", "shutdown", SQLshutdown_wrap, true, "", args(1,3,
arg("",str),arg("delay",sht),arg("force",bit))),
@@ -6469,6 +6516,7 @@ static mel_func sql_init_funcs[] = {
pattern("sql", "vacuum", SQLstr_auto_vacuum, true, "auto vacuum string column
of given table with interval(sec)", args(0,3,
arg("sname",str),arg("tname",str),arg("interval", int))),
pattern("sql", "stop_vacuum", SQLstr_stop_vacuum, true, "stop auto vacuum",
args(0,2, arg("sname",str),arg("tname",str))),
pattern("sql", "check", SQLcheck, false, "Return sql string of check
constraint.", args(1,3, arg("sql",str), arg("sname", str), arg("name", str))),
+ pattern("sql", "read_dump_rel", SQLread_dump_rel, false, "Reads sql_rel
string into sql_rel object and then writes it to the return value", args(1,2,
arg("sql",str), arg("sql_rel", str))),
{ .imp=NULL }
};
#include "mal_import.h"
diff --git a/sql/test/2024/Tests/returning.test
b/sql/test/2024/Tests/returning.test
--- a/sql/test/2024/Tests/returning.test
+++ b/sql/test/2024/Tests/returning.test
@@ -104,3 +104,51 @@ 6
statement error 42000!SELECT: identifier 'k' unknown
insert into foo values (1,10), (-1,-10) returning k
+
+
+statement ok
+truncate foo
+
+statement ok
+create function read_dump_rel(rel STRING) RETURNS STRING external name
sql.read_dump_rel
+
+
+query T nosort
+select read_dump_rel(
+'REF 1 (2)
+table("sys"."foo")[ "foo"."i", "foo"."j", "foo"."%TID%" ]
+update(
+& REF 1
+project (
+select (
+& REF 1
+) [ ("foo"."i") < (int(31) "3") ]
+) [ "foo"."%TID%" NOT NULL UNIQUE, "sys"."sql_neg"("foo"."j" NOT NULL) NOT
NULL as "foo"."j" ]
+) [ "foo"."%TID%" NOT NULL UNIQUE, "foo"."j" NOT NULL ] [
"sys"."sql_add"("foo"."j" NOT NULL, int(3) "5") NOT NULL as "bla",
"sys"."sql_add"("foo"."i", "foo"."i") ]')
+----
+@ REF 1 (2)@table("sys"."foo") [ "foo"."i" NOT NULL UNIQUE, "foo"."j" NOT NULL
UNIQUE, "foo"."%TID%" NOT NULL UNIQUE ]@update(@& REF 1 @project (@select (@&
REF 1 @) [ ("foo"."i" NOT NULL UNIQUE) < (int(31) "3") ]@) [ "foo"."%TID%" NOT
NULL UNIQUE, "sys"."sql_neg"("foo"."j" NOT NULL UNIQUE) NOT NULL as "foo"."j"
]@) [ "foo"."i" NOT NULL UNIQUE, "foo"."j" NOT NULL UNIQUE, "foo"."%TID%" NOT
NULL UNIQUE ] [ "sys"."sql_add"("foo"."j" NOT NULL UNIQUE, int(3) "5") NOT NULL
as "bla", "sys"."sql_add"("foo"."i" NOT NULL UNIQUE, "foo"."i" NOT NULL UNIQUE)
NOT NULL ]
+
+query T nosort
+select read_dump_rel(
+'REF 1 (2)
+table("sys"."foo") [ "foo"."i" NUNIQUES 5.000000, "foo"."j" NOT NULL MIN "-10"
MAX "10" NUNIQUES 4.000000, "foo"."%TID%" NOT NULL UNIQUE ] COUNT 22
+delete(
+& REF 1
+project (
+select (
+& REF 1
+) [ ("foo"."i" NUNIQUES 5.000000) > (int(31) "0") ] COUNT 22
+) [ "foo"."%TID%" NOT NULL UNIQUE ] COUNT 22
+) [ "foo"."j" NOT NULL MIN "-10" MAX "10" NUNIQUES 4.000000 ]')
+----
+@ REF 1 (2)@table("sys"."foo") [ "foo"."i" NOT NULL UNIQUE, "foo"."j" NOT NULL
UNIQUE, "foo"."%TID%" NOT NULL UNIQUE ]@delete(@& REF 1 @project (@select (@&
REF 1 @) [ ("foo"."i" NOT NULL UNIQUE) > (int(31) "0") ]@) [ "foo"."%TID%" NOT
NULL UNIQUE ]@) [ "foo"."j" NOT NULL UNIQUE ]
+
+
+query T nosort
+select read_dump_rel(
+'insert(
+table("sys"."foo") [ "foo"."i" NUNIQUES 5.000000, "foo"."j" NOT NULL MIN "-10"
MAX "10" NUNIQUES 4.000000, "foo"."%TID%" NOT NULL UNIQUE ] COUNT 22
+[ [ int(31) NULL, int(31) NULL ] as "%4"."%4", [ int(31) "10",
int(31)["sys"."sql_neg"(tinyint(4) "10") NOT NULL] NOT NULL ] as "%1"."%1" ]
+) [ "foo"."i" NUNIQUES 5.000000 ]')
+----
+@insert(@table("sys"."foo") [ "foo"."i" NOT NULL UNIQUE, "foo"."j" NOT NULL
UNIQUE, "foo"."%TID%" NOT NULL UNIQUE ]@ [ [ int(31) NULL, int(31) NULL ] as
"%4"."%4", [ int(31) "10", int(31)["sys"."sql_neg"(tinyint(4) "10") NOT NULL]
NOT NULL ] as "%1"."%1" ]@) [ "foo"."i" NOT NULL UNIQUE ]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]