Changeset: 0f126daa44d2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0f126daa44d2 Modified Files: sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128 sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out.int128 Branch: default Log Message:
Merge with Jun2023 branch. diffs (truncated from 7961 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 @@ -229,7 +229,7 @@ BATfirstn_unique(BATiter *bi, BAT *s, BU /* trivial: return all candidates */ bn = canditer_slice(&ci, 0, ci.ncand); if (bn && lastp) - *lastp = BUNtoid(bn, cnt - 1); + *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/mal/pcre.c b/monetdb5/modules/mal/pcre.c --- a/monetdb5/modules/mal/pcre.c +++ b/monetdb5/modules/mal/pcre.c @@ -470,7 +470,8 @@ re_create(const char *pat, bool caseigno goto bailout; *n = (struct RE) {.search = true, .atend = true, .w = wp + 1}; } - *wq++ = 0; + *wq = 0; + wq = wp + 1; } else { *wq++ = *wp; n->len++; @@ -503,7 +504,8 @@ re_create(const char *pat, bool caseigno goto bailout; *n = (struct RE) {.search = true, .atend = true, .k = p + 1}; } - *q++ = 0; + *q = 0; + q = p + 1; } else { *q++ = *p; n->len++; diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -4282,6 +4282,9 @@ commit_update_del( sql_trans *tr, sql_ch } else if (ok == LOG_OK && tr->parent) {/* cleanup older save points */ merge_segments(dbat, tr, change, commit_ts, oldest); ATOMIC_PTR_SET(&t->data, savepoint_commit_storage(dbat, commit_ts)); + storage *s = change->data; + if (s->cs.ts == tr->tid) + s->cs.ts = commit_ts; } unlock_table(tr->store, t->base.id); return ok; diff --git a/sql/test/Tests/All b/sql/test/Tests/All --- a/sql/test/Tests/All +++ b/sql/test/Tests/All @@ -56,6 +56,7 @@ default HAVE_GEOM?keys like_tests +more_like_tests news timezone diff --git a/sql/test/Tests/more_like_tests.test b/sql/test/Tests/more_like_tests.test new file mode 100644 --- /dev/null +++ b/sql/test/Tests/more_like_tests.test @@ -0,0 +1,23 @@ +statement ok +START TRANSACTION + +statement ok +CREATE TABLE liketable ( + str varchar(32) +) + +statement ok +INSERT INTO liketable VALUES ('PENDING_CLIENT1_IT_S_34_5643_O'), ('PENDING_CLIENT1_IT_S_34_15643_O') + +query T rowsort +SELECT * FROM liketable WHERE str LIKE 'PENDING^_CLIENT1^_IT^_%^_5643^_O' ESCAPE '^'; +---- +PENDING_CLIENT1_IT_S_34_5643_O + +query T rowsort +SELECT * FROM liketable WHERE str LIKE 'PENDING^_CLIENT1^_IT^_%5643^_O' ESCAPE '^'; +---- +PENDING_CLIENT1_IT_S_34_15643_O +PENDING_CLIENT1_IT_S_34_5643_O + + 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,330 +1,6 @@ Running database upgrade commands to update system tables. 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 - AND m_t.id = d.depend_id - AND d.id = p_m.id - AND p_m.schema_id = p_s.id - ORDER BY m_t.id, p_m.id), - vals(id,vals) as - (SELECT vp.table_id, GROUP_CONCAT(vp.value, ',') FROM sys.value_partitions vp GROUP BY vp.table_id) - SELECT - subq.m_sch, - subq.m_tbl, - subq.p_sch, - subq.p_tbl, - tp."type" AS p_raw_type, - CASE WHEN tp."type" = 'VALUES' - THEN (SELECT vals.vals FROM vals WHERE vals.id = subq.p_mid) - ELSE NULL - END AS pvalues, - CASE WHEN tp."type" = 'RANGE' - THEN (SELECT minimum FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid) - ELSE NULL - END AS minimum, - CASE WHEN tp."type" = 'RANGE' - THEN (SELECT maximum FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid) - ELSE NULL - END AS maximum, - CASE WHEN tp."type" = 'VALUES' - THEN EXISTS(SELECT vp.value FROM sys.value_partitions vp WHERE vp.table_id = subq.p_mid AND vp.value IS NULL) - ELSE (SELECT rp.with_nulls FROM sys.range_partitions rp WHERE rp.table_id = subq.p_mid) - END AS with_nulls - FROM - subq LEFT OUTER JOIN tp - ON subq.m_tid = tp.table_id) AS tmp_pi; -GRANT SELECT ON sys.describe_partition_tables TO PUBLIC; -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_sequences AS - SELECT - 'CREATE SEQUENCE ' || sys.FQN(sch, seq) || ' AS BIGINT;' stmt, - sch schema_name, - seq seqname - FROM sys.describe_sequences; -CREATE VIEW sys.dump_start_sequences AS - SELECT 'ALTER SEQUENCE ' || sys.FQN(sch, seq) || - CASE WHEN s = 0 THEN '' ELSE ' RESTART WITH ' || rs END || - CASE WHEN inc = 1 THEN '' ELSE ' INCREMENT BY ' || inc END || - CASE WHEN nomin THEN ' NO MINVALUE' WHEN rmi IS NULL THEN '' ELSE ' MINVALUE ' || rmi END || - CASE WHEN nomax THEN ' NO MAXVALUE' WHEN rma IS NULL THEN '' ELSE ' MAXVALUE ' || rma END || - CASE WHEN "cache" = 1 THEN '' ELSE ' CACHE ' || "cache" END || - CASE WHEN "cycle" THEN '' ELSE ' NO' END || ' CYCLE;' stmt, - sch schema_name, - seq sequence_name - FROM sys.describe_sequences; -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)); - END WHILE; - SET COPY_INTO_STMT = (COPY_INTO_STMT || ') FROM STDIN USING DELIMITERS ''|'',E''\\n'',''"'';'); - SET SELECT_DATA_STMT = (SELECT_DATA_STMT || ' FROM ' || sys.FQN(sch, tbl)); - INSERT INTO sys.dump_statements VALUES ((SELECT COUNT(*) FROM sys.dump_statements) + 1, COPY_INTO_STMT); - CALL sys.EVAL('INSERT INTO sys.dump_statements ' || SELECT_DATA_STMT || ';'); - END IF; - END IF; - END IF; -END; -CREATE PROCEDURE sys.dump_table_data() -BEGIN - DECLARE i INT; - SET i = (SELECT MIN(t.id) FROM sys.tables t, sys.table_types ts WHERE t.type = ts.table_type_id AND ts.table_type_name = 'TABLE' AND NOT t.system); - IF i IS NOT NULL THEN - DECLARE M INT; - SET M = (SELECT MAX(t.id) FROM sys.tables t, sys.table_types ts WHERE t.type = ts.table_type_id AND ts.table_type_name = 'TABLE' AND NOT t.system); - DECLARE sch STRING; - DECLARE tbl STRING; - WHILE i IS NOT NULL AND i <= M DO - SET sch = (SELECT s.name FROM sys.tables t, sys.schemas s WHERE s.id = t.schema_id AND t.id = i); - SET tbl = (SELECT t.name FROM sys.tables t, sys.schemas s WHERE s.id = t.schema_id AND t.id = i); - CALL sys.dump_table_data(sch, tbl); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org