Changeset: 18a20334a698 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/18a20334a698 Branch: Jun2023 Log Message:
merged diffs (truncated from 9143 to 300 lines): diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c --- a/gdk/gdk_firstn.c +++ b/gdk/gdk_firstn.c @@ -227,9 +227,9 @@ BATfirstn_unique(BATiter *bi, BAT *s, BU if (n >= cnt) { /* trivial: return all candidates */ - if (lastp) - *lastp = 0; bn = canditer_slice(&ci, 0, ci.ncand); + if (bn && lastp) + *lastp = oid_nil; TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT ",n=" BUNFMT " -> " ALGOOPTBATFMT " (trivial -- " LLFMT " usec)\n", @@ -1061,7 +1061,7 @@ BATfirstn_grouped(BAT **topn, BAT **gids BBPunfix(bn1->batCacheid); if (bn == NULL) return GDK_FAIL; - } else { + } else if (last != oid_nil) { BAT *bn1, *bn2; bn1 = bn; diff --git a/monetdb5/modules/kernel/algebra.c b/monetdb5/modules/kernel/algebra.c --- a/monetdb5/modules/kernel/algebra.c +++ b/monetdb5/modules/kernel/algebra.c @@ -683,7 +683,7 @@ ALGfirstn(Client cntxt, MalBlkPtr mb, Ma bat *ret1, *ret2 = NULL; bat bid, sid, gid; BAT *b, *s = NULL, *g = NULL; - BAT *bn, *gn; + BAT *bn = NULL, *gn = NULL; lng n; bit asc, nilslast, distinct; gdk_return rc; diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1218,7 +1218,7 @@ exp_refers( sql_exp *p, sql_exp *c) if (p->alias.rname && strcmp(p->alias.rname, c->l) != 0) return 0; // if the parent does NOT have a relation name alias compare his relation name with the child's - if (!p->alias.rname && strcmp(p->l, c->l) != 0) + if (!p->alias.rname && p->l && strcmp(p->l, c->l) != 0) return 0; } return 1; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -4590,10 +4590,12 @@ rel_order_by(sql_query *query, sql_rel * if ((selection = simple_selection(col)) != NULL) { dnode *o = selection->h; order = o->data.sym; - col = order->data.lval->h->data.sym; + if (order->data.lval->h->type == type_symbol) + col = order->data.lval->h->data.sym; /* remove optional name from selection */ order->data.lval->h->next = NULL; } + if (col->token == SQL_COLUMN || col->token == SQL_IDENT || col->token == SQL_ATOM) { exp_kind ek = {type_value, card_column, FALSE}; 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,107 @@ +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 + +statement ok +CREATE TABLE v0 (v1 INT, v2 REAL) + +statement error +SELECT * FROM v0 ORDER BY (SELECT *) + +statement ok +drop table v0 diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 --- a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 +++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 @@ -1,336 +1,6 @@ Running database upgrade commands to update system tables. Running database upgrade commands: -create procedure SHPattach(fname string) external name shp.attach; -create procedure SHPload(fid integer) external name shp.import; -create procedure SHPload(fid integer, filter geometry) external name shp.import; -update sys.functions set system = true where schema_id = 2000 and name in ('shpattach', 'shpload'); - -Running database upgrade commands: -alter table sys.db_user_info add column max_memory bigint; -alter table sys.db_user_info add column max_workers int; -alter table sys.db_user_info add column optimizer varchar(1024); -alter table sys.db_user_info add column default_role int; -alter table sys.db_user_info add column password varchar(256); -update sys.db_user_info u set max_memory = 0, max_workers = 0, optimizer = 'default_pipe', default_role = (select id from sys.auths a where a.name = u.name); --- and copying passwords - -Running database upgrade commands: -drop view sys.dependency_schemas_on_users cascade; -drop view sys.roles cascade; -drop view sys.users cascade; -drop function sys.db_users() cascade; -CREATE VIEW sys.roles AS SELECT id, name, grantor FROM sys.auths a WHERE a.name NOT IN (SELECT u.name FROM sys.db_user_info u); -GRANT SELECT ON sys.roles TO PUBLIC; -CREATE VIEW sys.users AS SELECT name, fullname, default_schema, schema_path, max_memory, max_workers, optimizer, default_role FROM sys.db_user_info; -GRANT SELECT ON sys.users TO PUBLIC; -CREATE FUNCTION sys.db_users() RETURNS TABLE(name varchar(2048)) RETURN SELECT name FROM sys.db_user_info; -CREATE VIEW sys.dependency_schemas_on_users AS -SELECT s.id AS schema_id, s.name AS schema_name, u.name AS user_name, CAST(6 AS smallint) AS depend_type - FROM sys.db_user_info AS u, sys.schemas AS s - WHERE u.default_schema = s.id - ORDER BY s.name, u.name; -GRANT SELECT ON sys.dependency_schemas_on_users TO PUBLIC; -update sys._tables set system = true where name in ('users', 'roles', 'dependency_schemas_on_users') AND schema_id = 2000; -update sys.functions set system = true where system <> true and name in ('db_users') and schema_id = 2000 and type = 5; - -Running database upgrade commands: -drop function sys.dump_database(boolean) cascade; -drop procedure sys.dump_table_data() cascade; -drop procedure sys.dump_table_data(string, string) cascade; -drop view sys.dump_partition_tables cascade; -drop view sys.describe_partition_tables cascade; -drop view sys.dump_sequences cascade; -drop view sys.dump_start_sequences cascade; -drop view sys.dump_tables cascade; -drop view sys.describe_tables cascade; -drop view sys.dump_create_users cascade; -drop view sys.dump_functions cascade; -drop view sys.dump_triggers cascade; -drop function sys.schema_guard cascade; -drop function sys.replace_first(string, string, string, string) cascade; -CREATE FUNCTION sys.schema_guard(sch STRING, nme STRING, stmt STRING) RETURNS STRING BEGIN -RETURN - SELECT 'SET SCHEMA ' || sys.dq(sch) || '; ' || stmt; -END; -CREATE VIEW sys.dump_functions AS - SELECT f.o o, sys.schema_guard(f.sch, f.fun, f.def) stmt, - f.sch schema_name, - f.fun function_name - FROM sys.describe_functions f; -CREATE VIEW sys.dump_triggers AS - SELECT sys.schema_guard(sch, tab, def) stmt, - sch schema_name, - tab table_name, - tri trigger_name - FROM sys.describe_triggers; -CREATE VIEW sys.describe_partition_tables AS - SELECT - m_sch, - m_tbl, - p_sch, - p_tbl, - CASE - WHEN p_raw_type IS NULL THEN 'READ ONLY' - WHEN (p_raw_type = 'VALUES' AND pvalues IS NULL) OR (p_raw_type = 'RANGE' AND minimum IS NULL AND maximum IS NULL AND with_nulls) THEN 'FOR NULLS' - ELSE p_raw_type - END AS tpe, - pvalues, - minimum, - maximum, - with_nulls - FROM - (WITH - tp("type", table_id) AS - (SELECT ifthenelse((table_partitions."type" & 2) = 2, 'VALUES', 'RANGE'), table_partitions.table_id FROM sys.table_partitions), - subq(m_tid, p_mid, "type", m_sch, m_tbl, p_sch, p_tbl) AS - (SELECT m_t.id, p_m.id, m_t."type", m_s.name, m_t.name, p_s.name, p_m.name - FROM sys.schemas m_s, sys._tables m_t, sys.dependencies d, sys.schemas p_s, sys._tables p_m - WHERE m_t."type" IN (3, 6) - AND m_t.schema_id = m_s.id - AND m_s.name <> 'tmp' - AND m_t.system = FALSE _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org