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

Reply via email to