MonetDB: default - Approve changes.
Changeset: 3e33256c30d8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3e33256c30d8 Modified Files: sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 Branch: default Log Message: Approve changes. diffs (48 lines): diff --git a/sql/test/emptydb/Tests/check.stable.out b/sql/test/emptydb/Tests/check.stable.out --- a/sql/test/emptydb/Tests/check.stable.out +++ b/sql/test/emptydb/Tests/check.stable.out @@ -1567,9 +1567,9 @@ select 'null in value_partitions.value', [ "sys.functions", "sys", "difference", "SYSTEM", "stringdiff", "txtsim", "Internal C", "Scalar function", false, false, false, true, NULL, "res_0","int", 32, 0, "out", "arg_1", "varchar", 0, 0, "in", "arg_2","varchar", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL] [ "sys.functions", "sys", "dq", "SYSTEM", "create function sys.dq (s string) returns string begin return '\"' || sys.replace(s,'\"','\"\"') || '\"'; end;", "sql", "SQL", "Scalar function", false, false, false, true, NULL, "result", "clob", 0, 0, "out", "s", "clob", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL] [ "sys.functions", "sys", "droporderindex", "SYSTEM", "create procedure sys.droporderindex(sys string, tab string, col string) external name sql.droporderindex;","sql", "MAL", "Procedure",true, false, false, true, NULL, "sys", "clob", 0, 0, "in", "tab", "clob", 0, 0, "in", "col", "clob", 0, 0, "in", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL] -[ "sys.functions", "sys", "dump_database","SYSTEM", "create function sys.dump_database(describe boolean) returns table(o int, stmt string) begin set schema sys; truncate sys.dump_statements; insert into sys.dump_statements values (1, 'START TRANSACTION;'); insert into sys.dump_statements values ((select count(*) from sys.dump_statements) + 1, 'SET SCHEMA \"sys\";'); insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_create_roles; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_create_users; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_create_schemas; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_user_defined_types; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_add_schemas_to_users; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_grant_user_privileges; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(), stmt from sys.dump_sequences; insert into sys.dump_statements select (select count(*) from sys.dump_statements) + rank() over(order by stmts.o), stmts.s from (select f.o, f.stmt from sys.dump_functions f union select t.o, t.stmt from sys.dump_tables t) as stmts(o, s); if not describe then call sys.dump_table_data(); end if; insert into sys.dump_statements select (select count(*) from sys.
MonetDB: default - Use UNION ALL as it is faster (no deduplicati...
Changeset: daa4cfd0419b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/daa4cfd0419b Modified Files: sql/scripts/76_dump.sql Branch: default Log Message: Use UNION ALL as it is faster (no deduplication done). diffs (12 lines): diff --git a/sql/scripts/76_dump.sql b/sql/scripts/76_dump.sql --- a/sql/scripts/76_dump.sql +++ b/sql/scripts/76_dump.sql @@ -328,7 +328,7 @@ BEGIN INSERT INTO sys.dump_statements SELECT (SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(ORDER BY stmts.o), stmts.s FROM ( SELECT f.o, f.stmt FROM sys.dump_functions f - UNION + UNION ALL SELECT t.o, t.stmt FROM sys.dump_tables t ) AS stmts(o, s); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Fix for issue 7282
Changeset: e5c02e69cae0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e5c02e69cae0 Modified Files: sql/scripts/76_dump.sql sql/test/BugTracker-2022/Tests/dump-table-data.Bug-7282.test Branch: default Log Message: Fix for issue 7282 The upgrade program will be extended in a separate checkin. diffs (167 lines): diff --git a/sql/scripts/76_dump.sql b/sql/scripts/76_dump.sql --- a/sql/scripts/76_dump.sql +++ b/sql/scripts/76_dump.sql @@ -257,81 +257,65 @@ CREATE TABLE sys.dump_statements(o INT, CREATE PROCEDURE sys.dump_table_data(sch STRING, tbl STRING) BEGIN - - DECLARE k INT; - SET k = (SELECT MIN(c.id) FROM sys.columns c, sys.tables t, sys.schemas s WHERE c.table_id = t.id AND t.name = tbl AND t.schema_id = s.id AND s.name = sch); - IF k IS NOT NULL THEN - -DECLARE cname STRING; -DECLARE ctype STRING; -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); - -DECLARE COPY_INTO_STMT STRING; -DECLARE _cnt INT; -SET _cnt = (SELECT count FROM sys.storage(sch, tbl, cname)); - -IF _cnt > 0 THEN - SET COPY_INTO_STMT = 'COPY ' || _cnt || ' RECORDS INTO ' || sys.FQN(sch, tbl) || '(' || sys.DQ(cname); - - DECLARE SELECT_DATA_STMT STRING; - SET SELECT_DATA_STMT = 'SELECT (SELECT COUNT(*) FROM sys.dump_statements) + RANK() OVER(), ' || sys.prepare_esc(cname, ctype); - - DECLARE M INT; - SET M = (SELECT MAX(c.id) FROM sys.columns c, sys.tables t WHERE c.table_id = t.id AND t.name = tbl); - - WHILE (k < M) DO - SET k = (SELECT MIN(c.id) FROM sys.columns c, sys.tables t WHERE c.table_id = t.id AND t.name = tbl 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 || ';'); + 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 < M DO - set sch = (SELECT s.name FROM sys.tables t, sys.schemas s WHERE s.id = t.schema_id AND
MonetDB: default - for local tmps' we need to look inside the ta...
Changeset: 36412f77a7fa for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/36412f77a7fa Modified Files: sql/backends/monet5/dict.c sql/include/sql_catalog.h sql/server/sql_mvc.c sql/storage/sql_catalog.c sql/storage/store.c Branch: default Log Message: for local tmps' we need to look inside the tables for keys, idxs, and triggers diffs (268 lines): diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c --- a/sql/backends/monet5/dict.c +++ b/sql/backends/monet5/dict.c @@ -19,6 +19,9 @@ static void BATnegateprops(BAT *b) { /* disable all properties here */ + b->tnonil = false; + b->tnil = false; + b->tsorted = false; b->tsorted = false; b->trevsorted = false; b->tnosorted = 0; diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h --- a/sql/include/sql_catalog.h +++ b/sql/include/sql_catalog.h @@ -766,9 +766,11 @@ extern node *list_find_base_id(list *l, extern sql_key *find_sql_key(sql_table *t, const char *kname); extern sql_key *sql_trans_find_key(sql_trans *tr, sqlid id); +extern sql_key *schema_find_key(sql_trans *tr, sql_schema *s, const char *name); extern sql_idx *find_sql_idx(sql_table *t, const char *kname); extern sql_idx *sql_trans_find_idx(sql_trans *tr, sqlid id); +extern sql_idx *schema_find_idx(sql_trans *tr, sql_schema *s, const char *name); extern sql_column *find_sql_column(sql_table *t, const char *cname); @@ -786,6 +788,7 @@ extern sql_type *sql_trans_bind_type(sql extern sql_type *sql_trans_find_type(sql_trans *tr, sql_schema *s /*optional */, sqlid id); extern sql_func *sql_trans_find_func(sql_trans *tr, sqlid id); extern sql_trigger *sql_trans_find_trigger(sql_trans *tr, sqlid id); +extern sql_trigger *schema_find_trigger(sql_trans *tr, sql_schema *s, const char *name); extern void find_partition_type(sql_subtype *tpe, sql_table *mt); extern void *sql_values_list_element_validate_and_insert(void *v1, void *v2, void *tpe, int* res); diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -290,7 +290,7 @@ mvc_init(int debug, store_type store_tpe for (int i = 0; i < 9; i++) { sql_column *col = NULL; - + mvc_create_column_(&col, m, t, tview[i].name, tview[i].type, tview[i].digits); if (col == NULL) { mvc_destroy(m); @@ -999,10 +999,9 @@ mvc_first_column(mvc *m, sql_table *t) sql_key * mvc_bind_key(mvc *m, sql_schema *s, const char *kname) { - sql_base *b = os_find_name(s->keys, m->session->tr, kname); - sql_key *k = (sql_key*)b; + sql_key *k = schema_find_key(m->session->tr, s, kname); - if (!b) + if (!k) return NULL; TRC_DEBUG(SQL_TRANS, "Bind key: %s.%s\n", s->base.name, kname); return k; @@ -1011,11 +1010,10 @@ mvc_bind_key(mvc *m, sql_schema *s, cons sql_idx * mvc_bind_idx(mvc *m, sql_schema *s, const char *iname) { - sql_base *b = os_find_name(s->idxs, m->session->tr, iname); + sql_idx *i = schema_find_idx(m->session->tr, s, iname); - if (!b) + if (!i) return NULL; - sql_idx *i = (sql_idx*)b; TRC_DEBUG(SQL_TRANS, "Bind index: %s.%s\n", s->base.name, iname); return i; } @@ -1060,13 +1058,12 @@ mvc_bind_ukey(sql_table *t, list *colnam sql_trigger * mvc_bind_trigger(mvc *m, sql_schema *s, const char *tname) { - sql_base *b = os_find_name(s->triggers, m->session->tr, tname); + sql_trigger *t = schema_find_trigger(m->session->tr, s, tname); - if (!b) + if (!t) return NULL; - sql_trigger *trigger = (sql_trigger*)b; TRC_DEBUG(SQL_TRANS, "Bind trigger: %s.%s\n", s->base.name, tname); - return trigger; + return t; } int diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c --- a/sql/storage/sql_catalog.c +++ b/sql/storage/sql_catalog.c @@ -166,6 +166,22 @@ sql_trans_find_key(sql_trans *tr, sqlid return NULL; } +sql_key * +schema_find_key(sql_trans *tr, sql_schema *s, const char *name) +{ + sql_base *b = os_find_name(s->keys, tr, name); + + if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search tables */ + for(node *n = tr->localtmps.set->h; n; n = n->next) { + sql_table *t = n->data; + sql_key *o = find_sql_key(t, name); + if (o) + return o; + } + } + return (sql_key*)b; +} + sql_idx * find_sql_idx(sql_table *t, const char *iname) { @@ -189,6 +205,22 @@ sql_trans_find_idx(sql_trans *tr, sqlid return NULL; } +sql_idx * +schema_find_idx(sql_trans *tr, sql_schema *s, const char *name) +{ + sql_base *b = os_find_name(s->idxs, tr, name
MonetDB: default - Add test for issue 7282
Changeset: 131d8c083c7b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/131d8c083c7b Added Files: sql/test/BugTracker-2022/Tests/dump-table-data.Bug-7282.test Modified Files: sql/test/BugTracker-2022/Tests/All Branch: default Log Message: Add test for issue 7282 diffs (87 lines): diff --git a/sql/test/BugTracker-2022/Tests/All b/sql/test/BugTracker-2022/Tests/All --- a/sql/test/BugTracker-2022/Tests/All +++ b/sql/test/BugTracker-2022/Tests/All @@ -7,3 +7,4 @@ empty-MAL.Bug-7259 pkey-restart.Bug-7263 delete-update.Bug-7267 having-clauses.Bug-7278 +dump-table-data.Bug-7282 diff --git a/sql/test/BugTracker-2022/Tests/dump-table-data.Bug-7282.test b/sql/test/BugTracker-2022/Tests/dump-table-data.Bug-7282.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2022/Tests/dump-table-data.Bug-7282.test @@ -0,0 +1,74 @@ +statement ok +create table sys.t7282 ("nr" INTEGER PRIMARY KEY, "val1" INTEGER); + +statement ok rowcount 3 +insert into sys.t7282 values (1, 23), (2, 45), (3, 67); + +query II nosort +select * from sys.t7282; + +1 +23 +2 +45 +3 +67 + +statement ok +create schema test; + +statement ok +create table test.t7282 ("mk" VARCHAR(3) PRIMARY KEY, "val2" INTEGER); + +statement ok rowcount 2 +insert into test.t7282 values ('a', 23), ('b', 45); + +query TI nosort +select * from test.t7282; + +a +23 +b +45 + +statement ok +delete from dump_statements; + +statement ok +call sys.dump_table_data(); + +query IT nosort +select * from dump_statements; + +1|COPY 3 RECORDS INTO "sys"."t7282"("nr", "val1") FROM STDIN USING DELIMITERS '|',E'\n','"'; +2|1|23 +2|2|45 +2|3|67 +5|COPY 2 RECORDS INTO "test"."t7282"("mk", "val2") FROM STDIN USING DELIMITERS '|',E'\n','"'; +6|"a"|23 +6|"b"|45 + +# remove one of the tables with the same name +statement ok +drop table sys.t7282; + + +statement ok +delete from dump_statements; + +statement ok +call sys.dump_table_data(); + +query IT nosort +select * from dump_statements; + +1|COPY 2 RECORDS INTO "test"."t7282"("mk", "val2") FROM STDIN USING DELIMITERS '|',E'\n','"'; +2|"a"|23 +2|"b"|45 + +# cleanup +statement ok +drop table test.t7282; + +statement ok +drop schema test; ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Merge with group-commit.
Changeset: 6237bba18938 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6237bba18938 Branch: default Log Message: Merge with group-commit. diffs (truncated from 672 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -543,9 +543,9 @@ gdk_return log_bat_transient(logger *lg, gdk_return log_constant(logger *lg, int type, ptr val, log_id id, lng offset, lng cnt); gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id); gdk_return log_sequence(logger *lg, int seq, lng id); -gdk_return log_tdone(logger *lg, ulng commit_ts); gdk_return log_tend(logger *lg); -gdk_return log_tstart(logger *lg, bool flush); +gdk_return log_tflush(logger *lg, ulng log_file_id, ulng commit_ts); +gdk_return log_tstart(logger *lg, bool flushnow, ulng *log_file_id); gdk_return logger_activate(logger *lg); lng logger_changes(logger *lg); logger *logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata); diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2048,7 +2048,12 @@ logger_load(int debug, const char *fn, c logbat_destroy(lg->seqs_id); logbat_destroy(lg->seqs_val); logbat_destroy(lg->dseqs); + ATOMIC_DESTROY(&lg->refcount); MT_lock_destroy(&lg->lock); + MT_lock_destroy(&lg->rotation_lock); + MT_sema_destroy(&lg->flush_queue_semaphore); + MT_lock_destroy(&lg->flush_lock); + MT_lock_destroy(&lg->flush_queue_lock); GDKfree(lg->fn); GDKfree(lg->dir); GDKfree(lg->local_dir); @@ -2108,11 +2113,21 @@ logger_new(int debug, const char *fn, co GDKfree(lg); return NULL; } - MT_lock_init(&lg->lock, fn); if (lg->debug & 1) { fprintf(stderr, "#logger_new dir set to %s\n", lg->dir); } + ATOMIC_INIT(&lg->refcount, 0); + MT_lock_init(&lg->lock, fn); + MT_lock_init(&lg->rotation_lock, "rotation_lock"); + MT_sema_init(&lg->flush_queue_semaphore, FLUSH_QUEUE_SIZE, "flush_queue_semaphore"); + MT_lock_init(&lg->flush_lock, "flush_lock"); + MT_lock_init(&lg->flush_queue_lock, "flush_queue_lock"); + + // flush variables + lg->flush_queue_begin = 0; + lg->flush_queue_length = 0; + if (logger_load(debug, fn, logdir, lg, filename) == GDK_SUCCEED) { return lg; } @@ -2156,7 +2171,12 @@ logger_destroy(logger *lg) logbat_destroy(lg->catalog_lid); logger_unlock(lg); } + ATOMIC_DESTROY(&lg->refcount); MT_lock_destroy(&lg->lock); + MT_lock_destroy(&lg->rotation_lock); + MT_sema_destroy(&lg->flush_queue_semaphore); + MT_lock_destroy(&lg->flush_lock); + MT_lock_destroy(&lg->flush_queue_lock); GDKfree(lg->fn); GDKfree(lg->dir); GDKfree(lg->buf); @@ -2215,6 +2235,7 @@ logger_cleanup_range(logger *lg) gdk_return logger_activate(logger *lg) { + MT_lock_set(&lg->rotation_lock); logger_lock(lg); if (lg->end > 0 && lg->saved_id+1 == lg->id) { lg->id++; @@ -,10 +2243,12 @@ logger_activate(logger *lg) /* start new file */ if (logger_open_output(lg) != GDK_SUCCEED) { logger_unlock(lg); + MT_lock_unset(&lg->rotation_lock); return GDK_FAIL; } } logger_unlock(lg); + MT_lock_unset(&lg->rotation_lock); return GDK_SUCCEED; } @@ -2361,6 +2384,7 @@ log_constant(logger *lg, int type, ptr v (!is_row && !mnstr_writeLng(lg->output_log, nr)) || (!is_row && mnstr_write(lg->output_log, &tpe, 1, 1) != 1) || (!is_row && !mnstr_writeLng(lg->output_log, offset))) { + (void) ATOMIC_DEC(&lg->refcount); ok = GDK_FAIL; goto bailout; } @@ -2507,6 +2531,7 @@ internal_log_bat(logger *lg, BAT *b, log bailout: if (ok != GDK_SUCCEED) { + (void) ATOMIC_DEC(&lg->refcount); const char *err = mnstr_peek_error(lg->output_log); TRC_CRITICAL(GDK, "write failed%s%s\n", err ? ": " : "", err ? err : ""); } @@ -2527,6 +2552,8 @@ log_bat_persists(logger *lg, BAT *b, log if (logger_add_bat(lg, b, id, -1) != GDK_SUCCEED) { logger_unlock(lg); + if (!LOG_DISABLED(lg)) + (void) ATOMIC_DEC(&lg->refcount); return GDK_FAIL; } @@ -2536,6 +2563,7 @@ log_bat_persists(logger *lg, BAT *b, log if (log_write_format(lg, &l) != GDK_SUCCEED || mnstr_write(lg->output_log, &ta, 1, 1) != 1) { logger_unlock(l
MonetDB: group-commit - Merge heads.
Changeset: b7ed42e59882 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b7ed42e59882 Modified Files: gdk/gdk_logger.c Branch: group-commit Log Message: Merge heads. diffs (truncated from 641 to 300 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1415,6 +1415,8 @@ gdk_export void GDKqsort(void *restrict /* BAT is dense (i.e., BATtvoid() is true and tseqbase is not NIL) */ #define BATtdense(b) (!is_oid_nil((b)->tseqbase) && \ ((b)->tvheap == NULL || (b)->tvheap->free == 0)) +#define BATtdensebi(bi)(!is_oid_nil((bi)->tseq) && \ +((bi)->vh == NULL || (bi)->vhfree == 0)) /* BATtvoid: BAT can be (or actually is) represented by TYPE_void */ #define BATtvoid(b)(BATtdense(b) || (b)->ttype==TYPE_void) #define BATtkey(b) ((b)->tkey || BATtdense(b)) diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -736,7 +736,7 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool /* b does not have storage, keep it that way if we can */ HASHdestroy(b); /* we're not maintaining the hash here */ MT_lock_set(&b->theaplock); - if (BATtdense(n) && ci.tpe == cand_dense && + if (BATtdensebi(&ni) && ci.tpe == cand_dense && (BATcount(b) == 0 || (BATtdense(b) && b->tseqbase + BATcount(b) == n->tseqbase + ci.seq - hseq))) { @@ -776,7 +776,7 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool if (ci.tpe == cand_dense) { b->tnosorted = ci.seq - hseq <= n->tnosorted && n->tnosorted < ci.seq + ci.ncand - hseq ? n->tnosorted + hseq - ci.seq : 0; b->tnorevsorted = ci.seq - hseq <= n->tnorevsorted && n->tnorevsorted < ci.seq + ci.ncand - hseq ? n->tnorevsorted + hseq - ci.seq : 0; - if (BATtdense(n)) { + if (BATtdensebi(&ni)) { b->tseqbase = n->tseqbase + ci.seq - hseq; } } else { @@ -812,7 +812,7 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool BATkey(b, false); } if (b->ttype != TYPE_void && b->tsorted && BATtdense(b) && - (!BATtdense(n) || + (!BATtdensebi(&ni) || ci.tpe != cand_dense || 1 + *(oid *) BUNtloc(bi, last) != BUNtoid(n, ci.seq - hseq))) { b->tseqbase = oid_nil; @@ -1470,7 +1470,7 @@ BATappend_or_update(BAT *b, BAT *p, cons * properties */ bi.minpos = ni.minpos; bi.maxpos = ni.maxpos; - if (BATtdense(n)) { + if (BATtdensebi(&ni)) { /* replaced all of b with a dense sequence */ MT_lock_set(&b->theaplock); BATtseqbase(b, ni.tseq); @@ -1755,7 +1755,7 @@ BATslice(BAT *b, BUN l, BUN h) BUN p = l; BUN q = h; - bn = COLnew((oid) (b->hseqbase + low), BATtdense(b) ? TYPE_void : b->ttype, h - l, TRANSIENT); + bn = COLnew((oid) (b->hseqbase + low), BATtdensebi(&bi) ? TYPE_void : b->ttype, h - l, TRANSIENT); if (bn == NULL) goto doreturn; @@ -1804,7 +1804,7 @@ BATslice(BAT *b, BUN l, BUN h) bn->tnosorted = 0; bn->tnokey[0] = bn->tnokey[1] = 0; bni = bat_iterator_nolock(bn); - if (BATtdense(b)) { + if (BATtdensebi(&bi)) { BATtseqbase(bn, (oid) (bi.tseq + low)); } else if (bn->ttype == TYPE_oid) { if (BATcount(bn) == 0) { @@ -2919,7 +2919,7 @@ BATcount_no_nil(BAT *b, BAT *s) t = ATOMbasetype(bi.type); switch (t) { case TYPE_void: - cnt = ci.ncand * BATtdense(b); + cnt = ci.ncand * BATtdensebi(&bi); break; case TYPE_msk: cnt = ci.ncand; diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1863,14 +1863,14 @@ heap_entry(FILE *fp, BATiter *bi, BUN si (unsigned short) bi->sorted | ((unsigned short) bi->revsorted << 7) | ((unsigned short) bi->key << 8) | - ((unsigned short) BATtdense(b) << 9) | + ((unsigned short) BATtdensebi(bi) << 9) | ((unsigned short) bi->nonil << 10) | ((unsigned short) bi->nil << 11), b->tnokey[0] >= size || b->tnokey[1] >= size ? 0 : b->tnokey[0], b->tnokey[0] >= size || b->tnokey[1] >= size ? 0 : b->tnokey[1], b->tnosorte
MonetDB: group-commit - Merge with default.
Changeset: 5b8600d7596f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5b8600d7596f Modified Files: gdk/gdk_logger.c Branch: group-commit Log Message: Merge with default. diffs (truncated from 1559 to 300 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -692,7 +692,6 @@ gdk_export bool VALisnil(const ValRecord * bool tkey; // tail values are unique * bool tnonil; // tail has no nils * bool tsorted; // are tail values currently ordered? - * bool tvarsized;// for speed: tail type is varsized? * // Tail storage * inttloc; // byte-offset in BUN for tail elements * Heap *theap; // heap for varsized tail values @@ -726,8 +725,7 @@ typedef struct { uint16_t width; /* byte-width of the atom array */ int8_t type;/* type id. */ uint8_t shift; /* log2 of bun width */ - bool varsized:1,/* varsized/void (true) or fixedsized (false) */ - key:1, /* no duplicate values present */ + bool key:1, /* no duplicate values present */ nonil:1,/* there are no nils in the column */ nil:1, /* there is a nil in the column */ sorted:1, /* column is sorted in ascending order */ @@ -820,7 +818,6 @@ typedef struct BAT { /* macros to hide complexity of the BAT structure */ #define ttype T.type #define tkey T.key -#define tvarsized T.varsized #define tseqbase T.seq #define tsortedT.sorted #define trevsorted T.revsorted @@ -1228,8 +1225,8 @@ typedef var_t stridx_t; #define BUNtmsk(bi,p) Tmsk(&(bi), (p)) #define BUNtloc(bi,p) (assert((bi).type != TYPE_msk), ((void *) ((char *) (bi).base + ((p) << (bi).shift #define BUNtpos(bi,p) Tpos(&(bi),p) -#define BUNtvar(bi,p) (assert((bi).type && (bi).b->tvarsized), (void *) ((bi).vh->base+BUNtvaroff(bi,p))) -#define BUNtail(bi,p) ((bi).type?(bi).b->tvarsized?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p)) +#define BUNtvar(bi,p) (assert((bi).type && (bi).vh), (void *) ((bi).vh->base+BUNtvaroff(bi,p))) +#define BUNtail(bi,p) ((bi).type?(bi).vh?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p)) #define BATcount(b)((b)->batCount) @@ -1418,6 +1415,8 @@ gdk_export void GDKqsort(void *restrict /* BAT is dense (i.e., BATtvoid() is true and tseqbase is not NIL) */ #define BATtdense(b) (!is_oid_nil((b)->tseqbase) && \ ((b)->tvheap == NULL || (b)->tvheap->free == 0)) +#define BATtdensebi(bi)(!is_oid_nil((bi)->tseq) && \ +((bi)->vh == NULL || (bi)->vhfree == 0)) /* BATtvoid: BAT can be (or actually is) represented by TYPE_void */ #define BATtvoid(b)(BATtdense(b) || (b)->ttype==TYPE_void) #define BATtkey(b) ((b)->tkey || BATtdense(b)) @@ -1472,7 +1471,7 @@ BATsettrivprop(BAT *b) } } else if (b->batCount == 2 && ATOMlinear(b->ttype)) { int c; - if (b->tvarsized) + if (b->tvheap) c = ATOMcmp(b->ttype, b->tvheap->base + VarHeapVal(Tloc(b, 0), 0, b->twidth), b->tvheap->base + VarHeapVal(Tloc(b, 0), 1, b->twidth)); @@ -1734,7 +1733,7 @@ tfastins_nocheck(BAT *b, BUN p, const vo ; } else if (ATOMstorage(b->ttype) == TYPE_msk) { mskSetVal(b, p, * (msk *) v); - } else if (b->tvarsized) { + } else if (b->tvheap) { return tfastins_nocheckVAR(b, p, v); } else { return tfastins_nocheckFIX(b, p, v); diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -106,7 +106,6 @@ VIEWcreate(oid seq, BAT *b) * accelerator data. We need copies because in case of a mark, * we are going to override a column with a void. */ bn->tkey = b->tkey; - bn->tvarsized = b->tvarsized; bn->tseqbase = b->tseqbase; bn->tsorted = b->tsorted; bn->trevsorted = b->trevsorted; @@ -169,9 +168,8 @@ VIEWcreate(oid seq, BAT *b) */ gdk_return -BATmaterialize(BAT *b) +BATmaterialize(BAT *b, BUN cap) { - BUN cnt; Heap *tail; Heap *h, *vh = NULL; BUN p, q; @@ -179,17 +177,18 @@ BATmaterialize(BAT *b) BATcheck(b, GDK_FAIL); assert(!isVIEW(b)); + if (cap == BUN_NONE || cap < BATcapacity(b)) + cap = BATcapacity(b); if (b->ttype != TYPE_void) { - /* no voids */ - return GDK_SUCCEED; + /* no voids; just call BATextend to make sure of capacity */ + return BATextend(b,