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]

Reply via email to