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