Changeset: 903dcfa042cb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=903dcfa042cb
Modified Files:
        sql/backends/monet5/sql_statement.c
        sql/test/SQLancer/Tests/sqlancer06.sql
        sql/test/SQLancer/Tests/sqlancer06.stable.out
Branch: Oct2020
Log Message:

Making SQLancer happy. bat.appendBulk accepts either scalar or vector 
arguments. In the interleaved case, upgrade inputs into vectors


diffs (88 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2858,10 +2858,25 @@ stmt_append_bulk(backend *be, stmt *c, l
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
+       bool needs_columns = false;
 
        if (c->nr < 0)
                return NULL;
 
+       /* currently appendBulk accepts its inputs all either scalar or vectors 
+          if there is one vector and any scala, then the scalars mut be 
upgraded to vectors */
+       for (node *n = l->h; n; n = n->next) {
+               stmt *t = n->data;
+               needs_columns |= t->nrcols > 0;
+       }
+       if (needs_columns) {
+               for (node *n = l->h; n; n = n->next) {
+                       stmt *t = n->data;
+                       if (t->nrcols == 0)
+                               n->data = const_column(be, t);
+               }
+       }
+
        q = newStmtArgs(mb, batRef, appendBulkRef, list_length(l) + 3);
        q = pushArgument(mb, q, c->nr);
        q = pushBit(mb, q, TRUE);
diff --git a/sql/test/SQLancer/Tests/sqlancer06.sql 
b/sql/test/SQLancer/Tests/sqlancer06.sql
--- a/sql/test/SQLancer/Tests/sqlancer06.sql
+++ b/sql/test/SQLancer/Tests/sqlancer06.sql
@@ -162,3 +162,9 @@ select 1 from t2 join t1 on t1.c0 not li
 select cast((((coalesce(t2.c0, t2.c0))not ilike(t2.c0))) = true as int) as 
count from v0, t2 right outer join t1 on not (not (((t1.c0)not ilike(t2.c0))));
        -- 6 NULLs, 57 0s, 63 rows in total
 ROLLBACK;
+
+START TRANSACTION;
+CREATE TABLE "sys"."t1" ("c0" BOOLEAN);
+INSERT INTO t1(c0) VALUES(TRUE), ((EXISTS (SELECT DATE '1970-01-06' FROM t1)) 
BETWEEN (TRUE) AND ((1) IN (1)));
+SELECT c0 from t1;
+ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer06.stable.out 
b/sql/test/SQLancer/Tests/sqlancer06.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer06.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer06.stable.out
@@ -93,6 +93,23 @@ stdout of test 'sqlancer06` in directory
 #540568573,NULL,false
 #NULL,NULL,false
 [ 4    ]
+#SELECT 1 FROM t2 LEFT JOIN t0 ON CASE CAST(t2.c0 AS VARCHAR(32)) WHEN 
CAST(t2.c2 AS VARCHAR(32)) THEN 4 WHEN COALESCE('a', 'b') THEN 3 END IS NOT 
NULL;
+% .%13 # table_name
+% %13 # name
+% tinyint # type
+% 1 # length
+[ 1    ]
+[ 1    ]
+[ 1    ]
+[ 1    ]
+#SELECT CAST(SUM(count) AS BIGINT) FROM (SELECT CAST(t2.c2 AS INT) as count 
FROM t2 LEFT OUTER JOIN t0 ON (CASE CAST(t2.c0 AS VARCHAR(32)) WHEN CAST('*D' 
AS VARCHAR(32)) THEN CASE 'u--' 
+#WHEN 'Q' THEN 0.81 END WHEN CAST(t2.c2 AS VARCHAR(32)) THEN CASE 51854410 
WHEN 0.6132552 THEN 134188918 END WHEN COALESCE('鈋', 'Nb|k', 's{%g.8Bj') THEN 
CAST(571120738 AS INT) 
+#ELSE CAST(0.13 AS REAL) END) IS NOT NULL CROSS JOIN (SELECT ALL 
COALESCE(t1.c0, t0.c0) FROM t0, t1) AS sub0) as res;
+% .%13 # table_name
+% %13 # name
+% bigint # type
+% 2 # length
+[ 54   ]
 #ROLLBACK;
 #START TRANSACTION;
 #CREATE TABLE "sys"."t0" ("c0" BOOLEAN NOT NULL,CONSTRAINT "t0_c0_pkey" 
PRIMARY KEY ("c0"),CONSTRAINT "t0_c0_unique" UNIQUE ("c0"));
@@ -292,6 +309,18 @@ stdout of test 'sqlancer06` in directory
 [ NULL ]
 [ NULL ]
 #ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE "sys"."t1" ("c0" BOOLEAN);
+#INSERT INTO t1(c0) VALUES(TRUE), ((EXISTS (SELECT DATE '1970-01-06' FROM t1)) 
BETWEEN (TRUE) AND ((1) IN (1)));
+[ 2    ]
+#SELECT c0 from t1;
+% sys.t1 # table_name
+% c0 # name
+% boolean # type
+% 5 # length
+[ true ]
+[ false        ]
+#ROLLBACK;
 
 # 19:38:32 >  
 # 19:38:32 >  "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to