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

Reply via email to