Changeset: 46bb9b3d9b82 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/46bb9b3d9b82 Modified Files: sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out Branch: default Log Message:
Merge with Jun2023 branch. diffs (truncated from 1834 to 300 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2342,7 +2342,14 @@ rel_set_type(visitor *v, sql_rel *rel) if (te->type == e_convert) { sql_exp *l = te->l; if (l->type == e_column) { - sql_exp *e = rel_find_exp(rel->l, l); + sql_rel *sl = rel->l; + sql_exp *e = rel_find_exp(sl, l); + if (is_groupby(sl->op) && exp_equal(e, l) == 0) { + sql_exp *e2 = list_find_exp(sl->r, l); + if (e2) { + e = e2; + } + } sql_subtype *t = exp_subtype(e); if (t && !t->type->localtype) { diff --git a/sql/test/BugTracker-2023/Tests/All b/sql/test/BugTracker-2023/Tests/All --- a/sql/test/BugTracker-2023/Tests/All +++ b/sql/test/BugTracker-2023/Tests/All @@ -9,3 +9,4 @@ empty-optimizer-crash-7384 rollback-alter-drop-col-crash-7385 view-on-alias-crash-7386 alter-inc-seq-crash-7387 +misc-crashes-7390 diff --git a/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test b/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test @@ -0,0 +1,98 @@ +statement ok +CREATE TABLE v0 (v1 SMALLINT) + +statement ok +INSERT INTO v0 SELECT 0 FROM generate_series(1, 1000000) + +statement ok +SELECT NULL, v1 FROM v0 v0 ORDER BY v1+v1, v1, -1 LIMIT 2147483645 + +statement ok +drop table v0 + +statement ok +CREATE TABLE v0(v1 VARCHAR(30)) + +query TTI +SELECT DISTINCT v1 v1, v1, abs(v1)=10 FROM v0 WHERE lower (v1) IS NOT NULL +---- + + +statement ok +drop table v0 + +statement ok +CREATE VIEW v0 AS SELECT CAST (NULL AS INT) INTERSECT SELECT CAST (NULL AS INT) + +query IIT +SELECT 2, row_number() OVER (ORDER BY 10*10, (CASE WHEN (10 IS NULL) THEN 4 ELSE 10 END) DESC NULLS FIRST), '.125e+3' FROM v0 LIMIT 1 +---- +2 +1 +.125e+3 + +statement ok +drop view v0 + +statement ok +CREATE TABLE v0 (v1 VARCHAR(255)) + +statement ok +INSERT INTO v0 VALUES (2),(8),(10),(1),(0),(1),(2) + +statement ok +INSERT INTO v0 SELECT row_number () OVER (ORDER BY 2) FROM v0, v0 AS c3_null, v0 AS t2 + +statement ok +INSERT INTO v0 SELECT row_number () OVER (ORDER BY 2 NULLS LAST) AS c0 FROM v0, v0 AS contains + +statement ok +SELECT FIRST_VALUE(v1) OVER (PARTITION BY v1=5 ORDER BY 3003*v1 DESC NULLS FIRST, v1) FROM v0 LIMIT 1000000000 + +statement ok +drop table v0; + +statement ok +CREATE TABLE v0 (v1 INT) + +statement ok +INSERT INTO v0 VALUES (NULL),(1),(0),(1),(2),(10),(10),(400),(1) + +statement ok +INSERT INTO v0 SELECT row_number () OVER (ORDER BY 3) FROM v0, v0 AS c3_null, v0 AS t2 + +statement ok +INSERT INTO v0 SELECT row_number () OVER (ORDER BY 100 NULLS LAST) FROM v0, v0 AS contains + +statement ok +SELECT FIRST_VALUE (v1) OVER (PARTITION BY 'HASHED' ORDER BY v1<=10 DESC NULLS FIRST, v1 DESC) FROM v0 LIMIT 300000 + +statement ok +drop table v0 + +statement error +CREATE TEMP TABLE Table0 (Col0 INT, PRIMARY KEY(Col0), FOREIGN KEY (Col0) REFERENCES Table0); + +statement ok +CREATE VIEW v0 AS SELECT CAST (NULL AS INT) EXCEPT SELECT CAST (NULL AS INT) GROUP BY NULL; + +statement ok +drop view v0; + +statement ok +CREATE TABLE v0 (v1 INT NULL) + +statement ok +INSERT INTO v0 VALUES (3),(10),(1),(200),(5) + +statement ok +INSERT INTO v0 SELECT v0.v1 FROM v0, v0 AS c3_null, v0 AS a + +statement ok +INSERT INTO v0 SELECT v0.v1 FROM v0, v0 AS c3_null, v0 AS col2 + +statement ok +SELECT v1, row_number() OVER (ORDER BY v1 * 3 NULLS LAST, NULL*0 DESC NULLS FIRST), 3 FROM v0 LIMIT 300000; + +statement ok +drop table v0 diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out --- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out +++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out @@ -1,422 +1,6 @@ Running database upgrade commands to update system tables. Running database upgrade commands: -drop procedure if exists wlc.master() cascade; -drop procedure if exists wlc.master(string) cascade; -drop procedure if exists wlc.stop() cascade; -drop procedure if exists wlc.flush() cascade; -drop procedure if exists wlc.beat(int) cascade; -drop function if exists wlc.clock() cascade; -drop function if exists wlc.tick() cascade; -drop procedure if exists wlr.master(string) cascade; -drop procedure if exists wlr.stop() cascade; -drop procedure if exists wlr.accept() cascade; -drop procedure if exists wlr.replicate() cascade; -drop procedure if exists wlr.replicate(timestamp) cascade; -drop procedure if exists wlr.replicate(tinyint) cascade; -drop procedure if exists wlr.replicate(smallint) cascade; -drop procedure if exists wlr.replicate(integer) cascade; -drop procedure if exists wlr.replicate(bigint) cascade; -drop procedure if exists wlr.beat(integer) cascade; -drop function if exists wlr.clock() cascade; -drop function if exists wlr.tick() cascade; -drop schema if exists wlc cascade; -drop schema if exists wlr cascade; - -Running database upgrade commands: -create function sys.regexp_replace(ori string, pat string, rep string, flg string) -returns string external name pcre.replace; -grant execute on function regexp_replace(string, string, string, string) to public; -create function sys.regexp_replace(ori string, pat string, rep string) -returns string -begin - return sys.regexp_replace(ori, pat, rep, ''); -end; -grant execute on function regexp_replace(string, string, string) to public; -update sys.functions set system = true where system <> true and name = 'regexp_replace' and schema_id = 2000 and type = 1; - -Running database upgrade commands: -drop function if exists sys.dump_database(boolean) cascade; -drop procedure if exists sys.dump_table_data() cascade; -drop procedure if exists sys.dump_table_data(string, string) cascade; -drop view if exists sys.dump_tables cascade; -drop view if exists sys.dump_comments cascade; -drop function if exists sys.prepare_esc(string, string) cascade; -drop view if exists sys.dump_partition_tables cascade; -drop view if exists sys.dump_create_users cascade; -drop view if exists sys.describe_tables cascade; -drop function if exists sys.get_remote_table_expressions(string, string) cascade; -drop function if exists sys.remote_table_credentials(string) cascade; -drop function if exists sys.sq(string) cascade; -create table sys.remote_user_info (table_id int, username varchar(1024), password varchar(256)); -create function sys.decypher (cypher string) returns string external name sql.decypher; -update sys.functions set system = true where system <> true and name = 'decypher' and schema_id = 2000 and type = 1; -update sys._tables set system = true where system <> true and name = 'remote_user_info' and schema_id = 2000; -CREATE FUNCTION sys.SQ (s STRING) RETURNS STRING BEGIN RETURN '''' || sys.replace(s,'''','''''') || ''''; END; -CREATE FUNCTION sys.get_remote_table_expressions(s STRING, t STRING) RETURNS STRING BEGIN - RETURN SELECT ' ON ' || sys.SQ(tt.query) || ' WITH USER ' || sys.SQ(username) || ' ENCRYPTED PASSWORD ' || sys.SQ(sys.decypher("password")) FROM sys.remote_user_info r, sys._tables tt, sys.schemas ss where tt.name = t and ss.name = s and tt.schema_id = ss.id and r.table_id = tt.id; -END; -CREATE VIEW sys.describe_tables AS - SELECT - t.id o, - s.name sch, - t.name tab, - ts.table_type_name typ, - (SELECT - ' (' || - GROUP_CONCAT( - sys.DQ(c.name) || ' ' || - sys.describe_type(c.type, c.type_digits, c.type_scale) || - ifthenelse(c."null" = 'false', ' NOT NULL', '') - , ', ') || ')' - FROM sys._columns c - WHERE c.table_id = t.id) col, - CASE ts.table_type_name - WHEN 'REMOTE TABLE' THEN - sys.get_remote_table_expressions(s.name, t.name) - WHEN 'MERGE TABLE' THEN - sys.get_merge_table_partition_expressions(t.id) - WHEN 'VIEW' THEN - sys.schema_guard(s.name, t.name, t.query) - ELSE - '' - END opt - FROM sys.schemas s, sys.table_types ts, sys.tables t - WHERE ts.table_type_name IN ('TABLE', 'VIEW', 'MERGE TABLE', 'REMOTE TABLE', 'REPLICA TABLE', 'UNLOGGED TABLE') - AND t.system = FALSE - AND s.id = t.schema_id - AND ts.table_type_id = t.type - AND s.name <> 'tmp'; -CREATE VIEW sys.dump_create_users AS - SELECT - 'CREATE USER ' || sys.dq(ui.name) || ' WITH ENCRYPTED PASSWORD ' || - sys.sq(sys.password_hash(ui.name)) || - ' NAME ' || sys.sq(ui.fullname) || ' SCHEMA sys' || ifthenelse(ui.schema_path = '"sys"', '', ' SCHEMA PATH ' || sys.sq(ui.schema_path)) || ';' stmt, - ui.name user_name - FROM sys.db_user_info ui, sys.schemas s - WHERE ui.default_schema = s.id - AND ui.name <> 'monetdb' - AND ui.name <> '.snapshot'; -CREATE VIEW sys.dump_partition_tables AS - SELECT - 'ALTER TABLE ' || sys.FQN(m_sch, m_tbl) || ' ADD TABLE ' || sys.FQN(p_sch, p_tbl) || - CASE - WHEN tpe = 'VALUES' THEN ' AS PARTITION IN (' || pvalues || ')' - WHEN tpe = 'RANGE' THEN ' AS PARTITION FROM ' || ifthenelse(minimum IS NOT NULL, sys.SQ(minimum), 'RANGE MINVALUE') || ' TO ' || ifthenelse(maximum IS NOT NULL, sys.SQ(maximum), 'RANGE MAXVALUE') - WHEN tpe = 'FOR NULLS' THEN ' AS PARTITION FOR NULL VALUES' - ELSE '' --'READ ONLY' - END || - CASE WHEN tpe in ('VALUES', 'RANGE') AND with_nulls THEN ' WITH NULL VALUES' ELSE '' END || - ';' stmt, - m_sch merge_schema_name, - m_tbl merge_table_name, - p_sch partition_schema_name, - p_tbl partition_table_name - FROM sys.describe_partition_tables; -CREATE VIEW sys.dump_tables AS - SELECT - t.o o, - CASE - WHEN t.typ <> 'VIEW' THEN - 'CREATE ' || t.typ || ' ' || sys.FQN(t.sch, t.tab) || t.col || t.opt || ';' - ELSE - t.opt - END stmt, - t.sch schema_name, - t.tab table_name - FROM sys.describe_tables t; -CREATE VIEW sys.dump_comments AS - SELECT 'COMMENT ON ' || c.tpe || ' ' || c.fqn || ' IS ' || sys.SQ(c.rem) || ';' stmt FROM sys.describe_comments c; -CREATE FUNCTION sys.prepare_esc(s STRING, t STRING) RETURNS STRING -BEGIN - RETURN - CASE - WHEN (t = 'varchar' OR t ='char' OR t = 'clob' OR t = 'json' OR t = 'geometry' OR t = 'url') THEN - 'CASE WHEN ' || sys.DQ(s) || ' IS NULL THEN ''null'' ELSE ' || 'sys.esc(' || sys.DQ(s) || ')' || ' END' - ELSE - 'CASE WHEN ' || sys.DQ(s) || ' IS NULL THEN ''null'' ELSE CAST(' || sys.DQ(s) || ' AS STRING) END' - END; -END; -CREATE PROCEDURE sys.dump_table_data(sch STRING, tbl STRING) -BEGIN - DECLARE tid INT; - SET tid = (SELECT MIN(t.id) FROM sys.tables t, sys.schemas s WHERE t.name = tbl AND t.schema_id = s.id AND s.name = sch); - IF tid IS NOT NULL THEN - DECLARE k INT; - DECLARE m INT; - SET k = (SELECT MIN(c.id) FROM sys.columns c WHERE c.table_id = tid); - SET m = (SELECT MAX(c.id) FROM sys.columns c WHERE c.table_id = tid); - IF k IS NOT NULL AND m IS NOT NULL THEN - DECLARE cname STRING; - DECLARE ctype STRING; - DECLARE _cnt INT; - SET cname = (SELECT c.name FROM sys.columns c WHERE c.id = k); - SET ctype = (SELECT c.type FROM sys.columns c WHERE c.id = k); - SET _cnt = (SELECT count FROM sys.storage(sch, tbl, cname)); - IF _cnt > 0 THEN - DECLARE COPY_INTO_STMT STRING; - DECLARE SELECT_DATA_STMT STRING; - SET COPY_INTO_STMT = 'COPY ' || _cnt || ' RECORDS INTO ' || sys.FQN(sch, tbl) || '(' || sys.DQ(cname); - SET SELECT_DATA_STMT = 'SELECT (SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), ' || sys.prepare_esc(cname, ctype); - WHILE (k < m) DO - SET k = (SELECT MIN(c.id) FROM sys.columns c WHERE c.table_id = tid AND c.id > k); - SET cname = (SELECT c.name FROM sys.columns c WHERE c.id = k); - SET ctype = (SELECT c.type FROM sys.columns c WHERE c.id = k); - SET COPY_INTO_STMT = (COPY_INTO_STMT || ', ' || sys.DQ(cname)); - SET SELECT_DATA_STMT = (SELECT_DATA_STMT || '|| ''|'' || ' || sys.prepare_esc(cname, ctype)); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org