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 -- [email protected]
To unsubscribe send an email to [email protected]