Changeset: fb54d2a518b9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fb54d2a518b9
Modified Files:
        clients/mapiclient/mclient.c
        gdk/gdk_group.c
        sql/backends/monet5/CMakeLists.txt
        sql/backends/monet5/sql_scenario.c
        sql/scripts/CMakeLists.txt
        sql/server/rel_optimizer.c
        sql/test/SQLancer/Tests/sqlancer04.test
        sql/test/SQLancer/Tests/sqlancer05.test
        sql/test/SQLancer/Tests/sqlancer09.test
Branch: default
Log Message:

Merged with Oct2020


diffs (297 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1893,6 +1893,7 @@ format_result(Mapi mid, MapiHdl hdl, boo
 
                        switch (formatter) {
                        case TRASHformatter:
+                               mapi_finish(hdl);
                                break;
                        case XMLformatter:
                                XMLrenderer(hdl);
@@ -1917,6 +1918,7 @@ format_result(Mapi mid, MapiHdl hdl, boo
                                rows = mapi_get_row_count(hdl);
                                mnstr_printf(toConsole,
                                                "%" PRId64 " tuple%s\n", rows, 
rows != 1 ? "s" : "");
+                               mapi_finish(hdl);
                                break;
                        case EXPANDEDformatter:
                                EXPANDEDrenderer(hdl);
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -1080,6 +1080,16 @@ BATgroup_internal(BAT **groups, BAT **ex
                } else {
                        nbucket = MAX(HASHmask(cnt), 1 << 16);
                }
+               switch (t) {
+               case TYPE_bte:
+                       nbucket = 256;
+                       break;
+               case TYPE_sht:
+                       nbucket = 65536;
+                       break;
+               default:
+                       break;
+               }
                if ((hs = GDKzalloc(sizeof(Hash))) == NULL ||
                    (hs->heaplink.farmid = BBPselectfarm(TRANSIENT, b->ttype, 
hashheap)) < 0 ||
                    (hs->heapbckt.farmid = BBPselectfarm(TRANSIENT, b->ttype, 
hashheap)) < 0) {
diff --git a/sql/backends/monet5/CMakeLists.txt 
b/sql/backends/monet5/CMakeLists.txt
--- a/sql/backends/monet5/CMakeLists.txt
+++ b/sql/backends/monet5/CMakeLists.txt
@@ -30,7 +30,7 @@ set(include_sql_files
   27_rejects
   39_analytics
   40_json
-  41_md5sum
+  42_md5sum
   45_uuid
   46_profiler
   51_sys_schema_extension
@@ -46,7 +46,7 @@ set(include_sql_files
 if(HAVE_HGE)
   list(APPEND include_sql_files
     39_analytics_hge
-    40_json_hge)
+    41_json_hge)
 endif()
 
 create_include_object(
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -49,15 +49,24 @@
 
 #define MAX_SQL_MODULES 128
 static int sql_modules = 0;
-static const char *sql_module_name[MAX_SQL_MODULES] = {0};
-static const unsigned char *sql_module_code[MAX_SQL_MODULES] = {0};
+static struct sql_module {
+       const char *name;
+       const unsigned char *code;
+} sql_module[MAX_SQL_MODULES];
+
+static int
+sql_module_compare(const void *a, const void *b)
+{
+       const struct sql_module *l = a, *r = b;
+       return strcmp(l->name, r->name);
+}
 
 void
 sql_register(const char *name, const unsigned char *code)
 {
        assert (sql_modules < MAX_SQL_MODULES);
-       sql_module_name[sql_modules] = name;
-       sql_module_code[sql_modules] = code;
+       sql_module[sql_modules].name = name;
+       sql_module[sql_modules].code = code;
        sql_modules++;
 }
 
@@ -426,8 +435,9 @@ SQLinit(Client c)
                SQLnewcatalog = 0;
                maybeupgrade = 0;
 
+               qsort(sql_module, sql_modules, sizeof(sql_module[0]), 
sql_module_compare);
                for (int i = 0; i < sql_modules && !msg; i++) {
-                       const char *createdb_inline = (const 
char*)sql_module_code[i];
+                       const char *createdb_inline = (const 
char*)sql_module[i].code;
 
                        msg = SQLstatementIntern(c, createdb_inline, 
"sql.init", TRUE, FALSE, NULL);
                        if (m->sa)
diff --git a/sql/scripts/40_json_hge.sql b/sql/scripts/41_json_hge.sql
rename from sql/scripts/40_json_hge.sql
rename to sql/scripts/41_json_hge.sql
diff --git a/sql/scripts/41_md5sum.sql b/sql/scripts/42_md5sum.sql
rename from sql/scripts/41_md5sum.sql
rename to sql/scripts/42_md5sum.sql
diff --git a/sql/scripts/CMakeLists.txt b/sql/scripts/CMakeLists.txt
--- a/sql/scripts/CMakeLists.txt
+++ b/sql/scripts/CMakeLists.txt
@@ -24,7 +24,7 @@ install(FILES
   27_rejects.sql
   39_analytics.sql
   40_json.sql
-  41_md5sum.sql
+  42_md5sum.sql
   45_uuid.sql
   46_profiler.sql
   51_sys_schema_extension.sql
@@ -42,7 +42,7 @@ install(FILES
 if(HAVE_HGE)
   install(FILES
     39_analytics_hge.sql
-    40_json_hge.sql DESTINATION
+    41_json_hge.sql DESTINATION
     ${CMAKE_INSTALL_LIBDIR}/monetdb5/createdb)
 endif()
 #]]
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -5532,8 +5532,8 @@ rel_push_project_down(visitor *v, sql_re
                        return rel;
                } else if (list_check_prop_all(rel->exps, 
(prop_check_func)&exp_is_useless_rename)) {
                        if ((is_project(l->op) && list_length(l->exps) == 
list_length(rel->exps)) ||
-                                       ((v->parent && 
is_project(v->parent->op)) && (is_set(l->op) || is_select(l->op) || 
is_join(l->op) || is_semi(l->op))) ||
-                                       is_topn(l->op) || is_sample(l->op)) {
+                               ((v->parent && is_project(v->parent->op)) &&
+                                (is_set(l->op) || is_select(l->op) || 
is_join(l->op) || is_semi(l->op) || is_topn(l->op) || is_sample(l->op)))) {
                                rel->l = NULL;
                                rel_destroy(rel);
                                v->changes++;
diff --git a/sql/test/SQLancer/Tests/sqlancer04.sql 
b/sql/test/SQLancer/Tests/sqlancer04.sql
--- a/sql/test/SQLancer/Tests/sqlancer04.sql
+++ b/sql/test/SQLancer/Tests/sqlancer04.sql
@@ -426,3 +426,10 @@ ILIKE(CAST(30792 AS STRING(381))))) as r
 ROLLBACK;
 
 select cast(count(1) as interval second) from (values (false)) as v6(vc0); 
--error
+
+CREATE TABLE t1(c0 BOOLEAN, c1 DOUBLE);
+ALTER TABLE t1 ADD PRIMARY KEY(c0, c1);
+INSERT INTO t1(c1, c0) VALUES(0.3, FALSE), (0.5, true), (0.0, true), (4, 
false), (1, true), (4, true);
+DELETE FROM t1 WHERE NOT t1.c0;
+UPDATE t1 SET c1 = 0 WHERE t1.c1 > 3;
+DROP TABLE t1;
diff --git a/sql/test/SQLancer/Tests/sqlancer04.test 
b/sql/test/SQLancer/Tests/sqlancer04.test
--- a/sql/test/SQLancer/Tests/sqlancer04.test
+++ b/sql/test/SQLancer/Tests/sqlancer04.test
@@ -779,4 +779,22 @@ ROLLBACK
 statement error
 select cast(count(1) as interval second) from (values (false)) as v6(vc0)
 
+statement ok
+CREATE TABLE t1(c0 BOOLEAN, c1 DOUBLE)
 
+statement ok
+ALTER TABLE t1 ADD PRIMARY KEY(c0, c1)
+
+statement ok
+INSERT INTO t1(c1, c0) VALUES(0.3, FALSE), (0.5, true), (0.0, true), (4, 
false), (1, true), (4, true)
+
+statement ok
+DELETE FROM t1 WHERE NOT t1.c0
+
+statement ok
+UPDATE t1 SET c1 = 0 WHERE t1.c1 > 3
+
+statement ok
+DROP TABLE t1
+
+
diff --git a/sql/test/SQLancer/Tests/sqlancer05.sql 
b/sql/test/SQLancer/Tests/sqlancer05.sql
--- a/sql/test/SQLancer/Tests/sqlancer05.sql
+++ b/sql/test/SQLancer/Tests/sqlancer05.sql
@@ -446,4 +446,5 @@ join (select 1, '1', cast(l1v57.vc1 as b
 v5 as l1v5, v76 as l1v76) as sub1 on false) with check option;
 
 WITH cte0(c0,c1,c2) AS (SELECT CAST('1' AS INT), 1, 0.82 FROM v82 AS l1v82) 
SELECT 1 FROM cte0 AS l0cte0;
+       --rel_push_project_down optimizer issue
 ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer05.stable.out 
b/sql/test/SQLancer/Tests/sqlancer05.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer05.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer05.stable.out
@@ -532,6 +532,11 @@ stdout of test 'sqlancer05` in directory
 #select case l0cte1.c1 when true then least(null, l0cte1.c0) end, 1 from cte1 
as l0cte1
 #join (select 1, '1', cast(l1v57.vc1 as bigint) from v57 as l1v57,
 #v5 as l1v5, v76 as l1v76) as sub1 on false) with check option;
+#WITH cte0(c0,c1,c2) AS (SELECT CAST('1' AS INT), 1, 0.82 FROM v82 AS l1v82) 
SELECT 1 FROM cte0 AS l0cte0;
+% .%34 # table_name
+% %34 # name
+% tinyint # type
+% 1 # length
 #ROLLBACK;
 
 # 12:00:38 >  
diff --git a/sql/test/SQLancer/Tests/sqlancer05.test 
b/sql/test/SQLancer/Tests/sqlancer05.test
--- a/sql/test/SQLancer/Tests/sqlancer05.test
+++ b/sql/test/SQLancer/Tests/sqlancer05.test
@@ -730,7 +730,7 @@ select case l0cte1.c1 when true then lea
 join (select 1, '1', cast(l1v57.vc1 as bigint) from v57 as l1v57,
 v5 as l1v5, v76 as l1v76) as sub1 on false) with check option
 
-query T rowsort
+query I rowsort
 WITH cte0(c0,c1,c2) AS (SELECT CAST('1' AS INT), 1, 0.82 FROM v82 AS l1v82) 
SELECT 1 FROM cte0 AS l0cte0
 ----
 
diff --git a/sql/test/SQLancer/Tests/sqlancer09.sql 
b/sql/test/SQLancer/Tests/sqlancer09.sql
--- a/sql/test/SQLancer/Tests/sqlancer09.sql
+++ b/sql/test/SQLancer/Tests/sqlancer09.sql
@@ -420,3 +420,11 @@ inner join (values (+ (88)), (greatest(0
 or(v0.vc1)) group by v0.vc1) as sub1 where (v0.vc0) in (0.06683239) group by 
least(-1913343924, 10622),
 ((v1.vc1)not ilike(least(v1.vc1, v1.vc1)));
 ROLLBACK;
+
+CREATE TABLE t1(c0 BOOLEAN, c1 DOUBLE);
+INSERT INTO t1(c0) VALUES(true);
+TRUNCATE t1;
+ALTER TABLE t1 ADD PRIMARY KEY(c0, c1);
+INSERT INTO t1(c1, c0) VALUES(7,true),(5,false),(2,true),(4,false);
+UPDATE t1 SET c1 = 0 WHERE t1.c1 BETWEEN SYMMETRIC 3 AND t1.c1;
+DROP TABLE t1;
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.err 
b/sql/test/SQLancer/Tests/sqlancer09.stable.err
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.err
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.err
@@ -55,6 +55,10 @@ QUERY = select all v0.vc2, greatest(min(
         or(v0.vc1)) group by v0.vc1) as sub1 where (v0.vc0) in (0.06683239) 
group by least(-1913343924, 10622),
 ERROR = !overflow in conversion of 220424338 to sht.
 CODE  = 22003
+MAPI  = (monetdb) /var/tmp/mtest-19665/.s.monetdb.32608
+QUERY = UPDATE t1 SET c1 = 0 WHERE t1.c1 BETWEEN SYMMETRIC 3 AND t1.c1;
+ERROR = !UPDATE: PRIMARY KEY constraint 't1.t1_c0_c1_pkey' violated
+CODE  = 40002
 
 # 14:35:03 >  
 # 14:35:03 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.out 
b/sql/test/SQLancer/Tests/sqlancer09.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.out
@@ -482,6 +482,15 @@ stdout of test 'sqlancer09` in directory
 #create or replace view v0(vc0, vc1, vc2) as (values (nullif(cast(220424338 as 
smallint), case 0.04487378302689426501359548637992702424526214599609375 when 
126710153 then 0.6929207132873739 when 26968 then 26968.0 when 1679982115 then 
29 else 0.8204445662571608 end), cast(sql_min(r'', r'#Ts9.H') as boolean), 
0.45182237213592768565462165497592650353908538818359375));
 #create or replace view v1(vc0, vc1) as (select 
round(0.80863825841427316998277774473535828292369842529296875, 
0.6571010204254646), r'䝀i8jPo' where not (false));
 #ROLLBACK;
+#CREATE TABLE t1(c0 BOOLEAN, c1 DOUBLE);
+#INSERT INTO t1(c0) VALUES(true);
+[ 1    ]
+#TRUNCATE t1;
+[ 1    ]
+#ALTER TABLE t1 ADD PRIMARY KEY(c0, c1);
+#INSERT INTO t1(c1, c0) VALUES(7,true),(5,false),(2,true),(4,false);
+[ 4    ]
+#DROP TABLE t1;
 
 # 14:35:03 >  
 # 14:35:03 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer09.test 
b/sql/test/SQLancer/Tests/sqlancer09.test
--- a/sql/test/SQLancer/Tests/sqlancer09.test
+++ b/sql/test/SQLancer/Tests/sqlancer09.test
@@ -738,4 +738,25 @@ or(v0.vc1)) group by v0.vc1) as sub1 whe
 statement ok
 ROLLBACK
 
+statement ok
+CREATE TABLE t1(c0 BOOLEAN, c1 DOUBLE)
 
+statement ok
+INSERT INTO t1(c0) VALUES(true)
+
+statement ok
+TRUNCATE t1
+
+statement ok
+ALTER TABLE t1 ADD PRIMARY KEY(c0, c1)
+
+statement ok
+INSERT INTO t1(c1, c0) VALUES(7,true),(5,false),(2,true),(4,false)
+
+statement error
+UPDATE t1 SET c1 = 0 WHERE t1.c1 BETWEEN SYMMETRIC 3 AND t1.c1
+
+statement ok
+DROP TABLE t1
+
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to