MonetDB: default - Approve changes.

2022-04-07 Thread Martin van Dinther
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...

2022-04-07 Thread Martin van Dinther
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

2022-04-07 Thread Martin van Dinther
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...

2022-04-07 Thread Niels Nes
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

2022-04-07 Thread Martin van Dinther
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.

2022-04-07 Thread Aris Koning
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.

2022-04-07 Thread Aris Koning
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.

2022-04-07 Thread Aris Koning
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,