MonetDB: client-filetrans - Closing branch client-filetrans afte...

2018-10-16 Thread Sjoerd Mullender
Changeset: a06a3965a565 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a06a3965a565
Branch: client-filetrans
Log Message:

Closing branch client-filetrans after merging into default.

___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Merged branch client-filetrans into default.

2018-10-16 Thread Sjoerd Mullender
Changeset: fe8b41f64d52 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe8b41f64d52
Modified Files:
NT/monetdb_config.h.in
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
clients/mapiclient/mclient.c
clients/mapilib/mapi.c
clients/mapilib/mapi.h
common/stream/stream.c
configure.ag
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
monetdb5/mal/mal_session.c
sql/ChangeLog
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_result.h
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/backends/monet5/vaults/bam/bam_db_interface.c
sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
sql/benchmarks/tpch/load-sf-0.01.sql
sql/benchmarks/tpch/load-sf-1.sql
sql/common/sql_types.c
sql/server/rel_updates.c
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions.stable.out.int128
sql/test/Users/Tests/copyinto.stable.err
sql/test/Users/Tests/copyinto.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out.powerpc64.int128
testing/exportutils.py
Branch: default
Log Message:

Merged branch client-filetrans into default.


diffs (truncated from 3448 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -910,5 +910,6 @@ typedef __uint128_t uhge;
 
 #define PROMPT1"\001\001\n"/* prompt: ready for new query 
*/
 #define PROMPT2"\001\002\n"/* prompt: more data needed */
+#define PROMPT3"\001\003\n"/* prompt: get file content */
 
 #endif /* _SEEN_MONETDB_CONFIG_H */
diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -10929,7 +10929,7 @@ Ready.
 [ "sql",   "bind_idxbat",  "pattern sql.bind_idxbat(mvc:int, schema:str, 
table:str, index:str, access:int, part_nr:int, nr_parts:int):bat[:any_1] ", 
  "mvc_bind_idxbat_wrap;","Bind the 'schema.table.index' BAT with 
access kind:\n\t0 - base table\n\t1 - inserts\n\t2 - updates"   ]
 [ "sql",   "clear_table",  "pattern sql.clear_table(sname:str, 
tname:str):lng ",   "mvc_clear_table_wrap;","Clear the table 
sname.tname."  ]
 [ "sql",   "commit",   "pattern sql.commit():void ",   "SQLcommit;",   
"Trigger the commit operation for a MAL block"  ]
-[ "sql",   "copy_from","pattern sql.copy_from(t:ptr, sep:str, 
rsep:str, ssep:str, ns:str, fname:str, nr:lng, offset:lng, locked:int, 
best:int, fwf:str):bat[:any]... ","mvc_import_table_wrap;",   
"Import a table from bstream s with the \n\tgiven tuple and seperators 
(sep/rsep)"  ]
+[ "sql",   "copy_from","pattern sql.copy_from(t:ptr, sep:str, 
rsep:str, ssep:str, ns:str, fname:str, nr:lng, offset:lng, locked:int, 
best:int, fwf:str, onclient:int):bat[:any]... ",  "mvc_import_table_wrap;", 
  "Import a table from bstream s with the \n\tgiven tuple and seperators 
(sep/rsep)"  ]
 [ "sql",   "copy_rejects", "pattern sql.copy_rejects() (rowid:bat[:lng], 
fldid:bat[:int], msg:bat[:str], inp:bat[:str]) ", "COPYrejects;", ""  ]
 [ "sql",   "copy_rejects_clear",   "pattern sql.copy_rejects_clear():void 
",   "COPYrejects_clear;",   ""  ]
 [ "sql",   "createorderindex", "pattern sql.createorderindex(sch:str, 
tbl:str, col:str):void ","sql_createorderindex;","Instantiate 
the order index on a column"   ]
@@ -10970,14 +10970,14 @@ Ready.
 [ "sql",   "exportHead",   "pattern sql.exportHead(s:streams, 
res_id:int):void ",  "mvc_export_head_wrap;","Export a result (in 
order) to stream s"]
 [ "sql",   "exportOperation",  "pattern sql.exportOperation():void ",  
"mvc_export_operation_wrap;",   "Export result of schema/transaction queries"   
]
 [ "sql",   "exportResult", "pattern sql.exportResult(s:streams, 

MonetDB: client-filetrans - Test copy into from file ON CLIENT.

2018-10-16 Thread Sjoerd Mullender
Changeset: e352dc4b10d1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e352dc4b10d1
Modified Files:
sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
sql/benchmarks/tpch/load-sf-0.01.sql
sql/benchmarks/tpch/load-sf-1.sql
Branch: client-filetrans
Log Message:

Test copy into from file ON CLIENT.


diffs (64 lines):

diff --git a/sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql 
b/sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
--- a/sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
+++ b/sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
@@ -1,8 +1,8 @@
-COPY 5 RECORDS INTO region from 'PWD/region.tbl' USING DELIMITERS '|', '|\n' 
LOCKED;
-COPY 25 RECORDS INTO nation from 'PWD/nation.tbl' USING DELIMITERS '|', '|\n' 
LOCKED;
-COPY 100 RECORDS INTO supplier from 'PWD/supplier.tbl' USING DELIMITERS '|', 
'|\n' LOCKED;
-COPY 1500 RECORDS INTO customer from 'PWD/customer.tbl' USING DELIMITERS '|', 
'|\n' LOCKED;
-COPY 2000 RECORDS INTO part from 'PWD/part.tbl' USING DELIMITERS '|', '|\n' 
LOCKED;
-COPY 8000 RECORDS INTO partsupp from 'PWD/partsupp.tbl' USING DELIMITERS '|', 
'|\n' LOCKED;
-COPY 15000 RECORDS INTO orders from 'PWD/orders.tbl' USING DELIMITERS '|', 
'|\n' LOCKED;
-COPY 7 RECORDS INTO lineitem from 'PWD/lineitem.tbl' USING DELIMITERS '|', 
'|\n' LOCKED;
+COPY 5 RECORDS INTO region from 'PWD/region.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n' LOCKED;
+COPY 25 RECORDS INTO nation from 'PWD/nation.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n' LOCKED;
+COPY 100 RECORDS INTO supplier from 'PWD/supplier.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n' LOCKED;
+COPY 1500 RECORDS INTO customer from 'PWD/customer.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n' LOCKED;
+COPY 2000 RECORDS INTO part from 'PWD/part.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n' LOCKED;
+COPY 8000 RECORDS INTO partsupp from 'PWD/partsupp.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n' LOCKED;
+COPY 15000 RECORDS INTO orders from 'PWD/orders.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n' LOCKED;
+COPY 7 RECORDS INTO lineitem from 'PWD/lineitem.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n' LOCKED;
diff --git a/sql/benchmarks/tpch/load-sf-0.01.sql 
b/sql/benchmarks/tpch/load-sf-0.01.sql
--- a/sql/benchmarks/tpch/load-sf-0.01.sql
+++ b/sql/benchmarks/tpch/load-sf-0.01.sql
@@ -1,10 +1,10 @@
 START TRANSACTION;
-COPY 5 RECORDS INTO region from 'PWD/region.tbl' USING DELIMITERS '|', '|\n';
-COPY 25 RECORDS INTO nation from 'PWD/nation.tbl' USING DELIMITERS '|', '|\n';
-COPY 100 RECORDS INTO supplier from 'PWD/supplier.tbl' USING DELIMITERS '|', 
'|\n';
-COPY 1500 RECORDS INTO customer from 'PWD/customer.tbl' USING DELIMITERS '|', 
'|\n';
-COPY 2000 RECORDS INTO part from 'PWD/part.tbl' USING DELIMITERS '|', '|\n';
-COPY 8000 RECORDS INTO partsupp from 'PWD/partsupp.tbl' USING DELIMITERS '|', 
'|\n';
-COPY 15000 RECORDS INTO orders from 'PWD/orders.tbl' USING DELIMITERS '|', 
'|\n';
-COPY 7 RECORDS INTO lineitem from 'PWD/lineitem.tbl' USING DELIMITERS '|', 
'|\n';
+COPY 5 RECORDS INTO region from 'PWD/region.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n';
+COPY 25 RECORDS INTO nation from 'PWD/nation.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n';
+COPY 100 RECORDS INTO supplier from 'PWD/supplier.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n';
+COPY 1500 RECORDS INTO customer from 'PWD/customer.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n';
+COPY 2000 RECORDS INTO part from 'PWD/part.tbl' ON CLIENT USING DELIMITERS 
'|', '|\n';
+COPY 8000 RECORDS INTO partsupp from 'PWD/partsupp.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n';
+COPY 15000 RECORDS INTO orders from 'PWD/orders.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n';
+COPY 7 RECORDS INTO lineitem from 'PWD/lineitem.tbl' ON CLIENT USING 
DELIMITERS '|', '|\n';
 COMMIT;
diff --git a/sql/benchmarks/tpch/load-sf-1.sql 
b/sql/benchmarks/tpch/load-sf-1.sql
--- a/sql/benchmarks/tpch/load-sf-1.sql
+++ b/sql/benchmarks/tpch/load-sf-1.sql
@@ -1,10 +1,10 @@
 START TRANSACTION;
-COPY INTO region from 'PWD/region.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO nation from 'PWD/nation.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO supplier from 'PWD/supplier.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO customer from 'PWD/customer.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO part from 'PWD/part.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO partsupp from 'PWD/partsupp.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO orders from 'PWD/orders.tbl' USING DELIMITERS '|', '|\n';
-COPY INTO lineitem from 'PWD/lineitem.tbl' USING DELIMITERS '|', '|\n';
+COPY INTO region from 'PWD/region.tbl' ON CLIENT USING DELIMITERS '|', '|\n';
+COPY INTO nation from 'PWD/nation.tbl' ON CLIENT USING DELIMITERS '|', '|\n';
+COPY INTO supplier from 'PWD/supplier.tbl' ON CLIENT USING DELIMITERS '|', 
'|\n';
+COPY INTO customer from 'PWD/customer.tbl' ON CLIENT USING DELIMITERS '|', 
'|\n';
+COPY INTO part from 'PWD/part.tbl' ON CLIENT USING DELIMITERS '|', '|\n';
+COPY INTO partsupp from 'PWD/partsupp.tbl' ON CLIENT USING DELIMITERS 

MonetDB: client-filetrans - Deal with long response from client.

2018-10-16 Thread Sjoerd Mullender
Changeset: 4ae8eacbc72e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ae8eacbc72e
Modified Files:
sql/backends/monet5/sql.c
Branch: client-filetrans
Log Message:

Deal with long response from client.


diffs (106 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -2062,6 +2062,8 @@ mvc_export_table_wrap( Client cntxt, Mal
BAT *order = NULL, *b = NULL, *tbl = NULL, *atr = NULL, *tpe = 
NULL,*len = NULL,*scale = NULL;
res_table *t = NULL;
bool tostdout;
+   char buf[80];
+   ssize_t sz;
 
(void) format;
 
@@ -2167,10 +2169,13 @@ mvc_export_table_wrap( Client cntxt, Mal
mnstr_write(s, PROMPT3, sizeof(PROMPT3) - 1, 1);
mnstr_printf(s, "w %s\n", filename);
mnstr_flush(s);
-   char buf[80];
-   if (mnstr_readline(m->scanner.rs->s, buf, sizeof(buf)) > 1) {
+   if ((sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf))) > 
1) {
/* non-empty line indicates failure on client */
msg = createException(IO, "streams.open", "%s", buf);
+   /* deal with ridiculously long response from client */
+   while (buf[sz - 1] != '\n' &&
+  (sz = mnstr_readline(m->scanner.rs->s, buf, 
sizeof(buf))) > 0)
+   ;
goto wrapup_result_set1;
}
}
@@ -2180,14 +2185,11 @@ mvc_export_table_wrap( Client cntxt, Mal
mb->optimize = 0;
if (onclient) {
mnstr_flush(s);
-   char buf[80];
-   ssize_t sz;
-   while ((sz = mnstr_readline(m->scanner.rs->s, buf, 
sizeof(buf))) > 0) {
-   if (sz > 1) {
-   msg = createException(IO, "streams.open", "%s", 
buf);
-   goto wrapup_result_set1;
-   }
+   if ((sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf))) > 
1) {
+   msg = createException(IO, "streams.open", "%s", buf);
}
+   while (sz > 0)
+   sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf));
} else if (!tostdout) {
close_stream(s);
}
@@ -2300,6 +2302,8 @@ mvc_export_row_wrap( Client cntxt, MalBl
int mtype;
BAT  *tbl = NULL, *atr = NULL, *tpe = NULL,*len = NULL,*scale = NULL;
bool tostdout;
+   char buf[80];
+   ssize_t sz;
 
(void) format;
if ((msg = getSQLContext(cntxt, mb, , NULL)) != NULL)
@@ -2404,10 +2408,13 @@ mvc_export_row_wrap( Client cntxt, MalBl
mnstr_write(s, PROMPT3, sizeof(PROMPT3) - 1, 1);
mnstr_printf(s, "w %s\n", filename);
mnstr_flush(s);
-   char buf[80];
-   if (mnstr_readline(m->scanner.rs->s, buf, sizeof(buf)) > 1) {
+   if ((sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf))) > 
1) {
/* non-empty line indicates failure on client */
msg = createException(IO, "streams.open", "%s", buf);
+   /* deal with ridiculously long response from client */
+   while (buf[sz - 1] != '\n' &&
+  (sz = mnstr_readline(m->scanner.rs->s, buf, 
sizeof(buf))) > 0)
+   ;
goto wrapup_result_set;
}
}
@@ -2417,14 +2424,11 @@ mvc_export_row_wrap( Client cntxt, MalBl
mb->optimize = 0;
if (onclient) {
mnstr_flush(s);
-   char buf[80];
-   ssize_t sz;
-   while ((sz = mnstr_readline(m->scanner.rs->s, buf, 
sizeof(buf))) > 0) {
-   if (sz > 1) {
-   msg = createException(IO, "streams.open", "%s", 
buf);
-   goto wrapup_result_set;
-   }
+   if ((sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf))) > 
1) {
+   msg = createException(IO, "streams.open", "%s", buf);
}
+   while (sz > 0)
+   sz = mnstr_readline(m->scanner.rs->s, buf, sizeof(buf));
} else if (!tostdout) {
close_stream(s);
}
@@ -2749,8 +2753,12 @@ mvc_import_table_wrap(Client cntxt, MalB
bstream_next(be->mvc->scanner.rs);
ss = be->mvc->scanner.rs->s;
char buf[80];
-   if (mnstr_readline(ss, buf, sizeof(buf)) > 1) {
-   throw(IO, "sql.copy_from", "%s", buf);
+   if ((len = mnstr_readline(ss, buf, sizeof(buf))) > 1) {
+

MonetDB: client-filetrans - Merge with default branch.

2018-10-16 Thread Sjoerd Mullender
Changeset: f6ddcb764592 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6ddcb764592
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger.h
gdk/gdk_qsort.c
gdk/gdk_qsort_impl.h
sql/common/sql_list.c
sql/server/rel_optimizer.c
sql/server/sql_parser.y
tools/mserver/monet_version.c.in
Branch: client-filetrans
Log Message:

Merge with default branch.


diffs (truncated from 700 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -936,8 +936,6 @@ tr_commit(logger *lg, trans *tr)
return tr_destroy(tr);
 }
 
-static gdk_return log_sequence_nrs(logger *lg);
-
 #ifdef _MSC_VER
 #define access(file, mode) _access(file, mode)
 #endif
@@ -991,7 +989,6 @@ logger_open(logger *lg)
 {
char id[BUFSIZ];
char *filename;
-   bat bid;
 
snprintf(id, sizeof(id), LLFMT, lg->id);
filename = GDKfilepath(BBPselectfarm(lg->dbfarm_role, 0, offheap), 
lg->dir, LOGFILE, id);
@@ -1003,36 +1000,12 @@ logger_open(logger *lg)
}
lg->end = 0;
 
-   if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) != 
GDK_SUCCEED) {
+   if (lg->log == NULL || mnstr_errnr(lg->log)) {
fprintf(stderr, "!ERROR: logger_open: creating %s failed\n", 
filename);
GDKfree(filename);
return GDK_FAIL;
}
GDKfree(filename);
-   if ((bid = logger_find_bat(lg, "seqs_id", 0, 0)) != 0) {
-   int dbg = GDKdebug;
-   BAT *b;
-   GDKdebug &= ~CHECKMASK;
-   if ((b = BATdescriptor(bid)) == NULL ||
-   BATmode(b, TRANSIENT) != GDK_SUCCEED ||
-   logger_del_bat(lg, bid) != GDK_SUCCEED) {
-   logbat_destroy(b);
-   return GDK_FAIL;
-   }
-   logbat_destroy(b);
-   b = NULL;
-   if ((bid = logger_find_bat(lg, "seqs_val", 0, 0)) == 0 ||
-   (b = BATdescriptor(bid)) == NULL ||
-   BATmode(b, TRANSIENT) != GDK_SUCCEED ||
-   logger_del_bat(lg, bid) != GDK_SUCCEED) {
-   logbat_destroy(b);
-   return GDK_FAIL;
-   }
-   logbat_destroy(b);
-   GDKdebug = dbg;
-   if (bm_commit(lg) != GDK_SUCCEED)
-   return GDK_FAIL;
-   }
return GDK_SUCCEED;
 }
 
@@ -1044,7 +1017,7 @@ logger_close(logger *lg)
 }
 
 static gdk_return
-logger_readlog(logger *lg, char *filename)
+logger_readlog(logger *lg, char *filename, bool *filemissing)
 {
trans *tr = NULL;
logformat l;
@@ -1067,6 +1040,7 @@ logger_readlog(logger *lg, char *filenam
close_stream(lg->log);
lg->log = NULL;
GDKdebug = dbg;
+   *filemissing = true;
return GDK_SUCCEED;
}
short byteorder;
@@ -1276,7 +1250,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
fprintf(stderr, "#logger_readlogs logger id is " LLFMT "\n", 
lg->id);
}
 
-   while (fgets(id, sizeof(id), fp) != NULL) {
+   if (fgets(id, sizeof(id), fp) != NULL) {
char log_filename[FILENAME_MAX];
lng lid = strtoll(id, NULL, 10);
 
@@ -1285,13 +1259,20 @@ logger_readlogs(logger *lg, FILE *fp, ch
}
 
if (!lg->shared && lid >= lg->id) {
+   bool filemissing = false;
+
lg->id = lid;
-   snprintf(log_filename, sizeof(log_filename), "%s." 
LLFMT, filename, lg->id);
-   res = logger_readlog(lg, log_filename);
+   while (res == GDK_SUCCEED && !filemissing) {
+   snprintf(log_filename, sizeof(log_filename), 
"%s." LLFMT, filename, lg->id);
+   res = logger_readlog(lg, log_filename, 
);
+   if (!filemissing)
+   lg->id++;
+   }
} else {
+   bool filemissing = false;
while (lid >= lg->id && res == GDK_SUCCEED) {
snprintf(log_filename, sizeof(log_filename), 
"%s." LLFMT, filename, lg->id);
-   if ((res = logger_readlog(lg, log_filename)) != 
GDK_SUCCEED && lg->shared && lg->id > 1) {
+   if ((res = logger_readlog(lg, log_filename, 
)) != GDK_SUCCEED && lg->shared && lg->id > 1) {
/* The only special case is if
 * the file is missing
 * altogether and the logger
@@ -1327,24 +1308,9 @@ logger_readlogs(logger *lg, FILE *fp, ch
 static gdk_return
 logger_commit(logger *lg)
 {
-   

MonetDB: config_rss - Let exported mal function return int inste...

2018-10-16 Thread Aris Koning
Changeset: b0828adbc241 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b0828adbc241
Modified Files:
sql/backends/monet5/config_rss/test_rss.c
sql/backends/monet5/config_rss/test_rss.mal
sql/test/configurable_rss/Tests/rss.py
Branch: config_rss
Log Message:

Let exported mal function return int instead of void.


diffs (38 lines):

diff --git a/sql/backends/monet5/config_rss/test_rss.c 
b/sql/backends/monet5/config_rss/test_rss.c
--- a/sql/backends/monet5/config_rss/test_rss.c
+++ b/sql/backends/monet5/config_rss/test_rss.c
@@ -17,8 +17,11 @@
 
 #define TEST_FILE "test_file"
 
-mal_export str TESTrestricted_rss(lng* GDK_mem_maxsize /*in bytes*/)
+mal_export str TESTrestricted_rss(int* RetVal, lng* GDK_mem_maxsize /*in 
bytes*/)
 {
+   *RetVal = 0; // Use a dummy return value to make interfacing with 
sql/mal easy.
+
+
// We are going to try to allocate twice the maximum configured rss 
bound.
size_t rss_bound = (size_t) *GDK_mem_maxsize, to_be_allocated = 2 * 
rss_bound, allocated = 0;
 
diff --git a/sql/backends/monet5/config_rss/test_rss.mal 
b/sql/backends/monet5/config_rss/test_rss.mal
--- a/sql/backends/monet5/config_rss/test_rss.mal
+++ b/sql/backends/monet5/config_rss/test_rss.mal
@@ -1,5 +1,5 @@
 module test_config_rss;
 
-command run_test_config_rss(GDK_mem_maxsize:lng):void 
+command run_test_config_rss(GDK_mem_maxsize:lng):int 
 address TESTrestricted_rss
 comment "C code will allocate memory and test whether the configured rss limit 
is violated.";
diff --git a/sql/test/configurable_rss/Tests/rss.py 
b/sql/test/configurable_rss/Tests/rss.py
--- a/sql/test/configurable_rss/Tests/rss.py
+++ b/sql/test/configurable_rss/Tests/rss.py
@@ -9,7 +9,7 @@ class RSSTestConfig:
 sql_template = \
 """
 create function test_rss(bound bigint)
-returns bigint external name test_config_rss.run_test_config_rss;
+returns int external name test_config_rss.run_test_config_rss;
 
 select test_rss({gdk_mem_maxsize});
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: analytics - Tests approval.

2018-10-16 Thread Pedro Ferreira
Changeset: 8f30a71e9472 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f30a71e9472
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk_analytic_func.c
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
Branch: analytics
Log Message:

Tests approval.


diffs (truncated from 331 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -8394,7 +8394,7 @@ Ready.
 [ "batsql","dense_rank",   "pattern batsql.dense_rank(b:bat[:any_1], 
p:any_2, o:any_3):bat[:int] ","SQLdense_rank;",   "return the 
densely ranked groups"  ]
 [ "batsql","diff", "pattern batsql.diff(b:bat[:any_1]):bat[:bit] ",
"SQLdiff;", "return true if cur != prev row"]
 [ "batsql","diff", "pattern batsql.diff(p:bat[:bit], 
b:bat[:any_1]):bat[:bit] ",   "SQLdiff;", "return true if cur != prev row"  
  ]
-[ "batsql","first_value",  "pattern batsql.first_value(b:bat[:any_1], 
p:any_2, o:any_3):bat[:any_1] ", "SQLfirst_value;",  "return the first 
value of groups"  ]
+[ "batsql","first_value",  "pattern batsql.first_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ", "SQLfirst_value;",  "return 
the first value of groups"  ]
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):bat[:any_1] ",   "SQLlag;",  "return the value in the 
previous 'l' row in the partition or 'd' if non existent"  ]
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ", "SQLlag;",  "return the 
value in the previous 'l' row in the partition or 'd' if non existent"  ]
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ","SQLlag;",  "return the value in the previous 
'l' row in the partition or NULL if non existent" ]
@@ -8402,7 +8402,7 @@ Ready.
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ",   "SQLlag;",  "return 
the value in the previous 'l' row in the partition or 'd' if non existent"  
]
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], l:bat[:any_2], 
p:any_3, o:any_4):bat[:any_1] ",  "SQLlag;",  "return the value in the 
previous 'l' row in the partition or NULL if non existent" ]
 [ "batsql","lag",  "pattern batsql.lag(b:bat[:any_1], p:any_3, 
o:any_4):bat[:any_1] ", "SQLlag;",  "return the value in the previous 
row in the partition or NULL if non existent" ]
-[ "batsql","last_value",   "pattern batsql.last_value(b:bat[:any_1], 
p:any_2, o:any_3):bat[:any_1] ",  "SQLlast_value;",   "return the last 
value of groups"   ]
+[ "batsql","last_value",   "pattern batsql.last_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ",  "SQLlast_value;",   "return 
the last value of groups"   ]
 [ "batsql","lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):bat[:any_1] ",  "SQLlead;", "return the value in the next 
'l' row in the partition or 'd' if non existent"  ]
 [ "batsql","lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ","SQLlead;", "return the 
value in the next 'l' row in the partition or 'd' if non existent"  ]
 [ "batsql","lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ",   "SQLlead;", "return the value in the next 'l' row 
in the partition or NULL if non existent" ]
@@ -8413,8 +8413,8 @@ Ready.
 [ "batsql","max",  "pattern batsql.max(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ", "SQLmax;",  "return the maximum of groups"  
]
 [ "batsql","min",  "pattern batsql.min(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ", "SQLmin;",  "return the minimum of groups"  
]
 [ "batsql","next_value",   "pattern batsql.next_value(sname:bat[:str], 
sequence:str):bat[:lng] ",  "mvc_bat_next_value;",  "return the next value of 
the sequence" ]
-[ "batsql","nth_value","pattern batsql.nth_value(b:bat[:any_1], 
n:any_2, p:any_3, o:any_4):bat[:any_1] ",  "SQLnth_value;","return 
the nth value of each group"]
-[ "batsql","nth_value","pattern batsql.nth_value(b:bat[:any_1], 
n:bat[:any_2], p:any_3, o:any_4):bat[:any_1] ","SQLnth_value;",
"return the nth value of each group"]
+[ "batsql","nth_value","pattern 

MonetDB: default - Reduce cost of sorting lists by removing a qu...

2018-10-16 Thread Sjoerd Mullender
Changeset: d8009b77c0f9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d8009b77c0f9
Modified Files:
sql/common/sql_list.c
sql/server/rel_optimizer.c
Branch: default
Log Message:

Reduce cost of sorting lists by removing a quadratic part.


diffs (150 lines):

diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -473,28 +473,27 @@ list_keysort(list *l, int *keys, fdup du
 {
list *res;
node *n = NULL;
-   int i, j, *pos, cnt = list_length(l);
+   int i, cnt = list_length(l);
+   void **data;
 
-   pos = (int*)GDKmalloc(cnt*sizeof(int));
-   if (pos == NULL) {
+   data = GDKmalloc(cnt*sizeof(void *));
+   if (data == NULL) {
return NULL;
}
res = list_new_(l);
if (res == NULL) {
-   GDKfree(pos);
+   GDKfree(data);
return NULL;
}
for (n = l->h, i = 0; n; n = n->next, i++) {
-   pos[i] = i;
+   data[i] = n->data;
}
/* sort descending */
-   GDKqsort_rev(keys, pos, NULL, cnt, sizeof(int), sizeof(int), TYPE_int);
-   for(j=0; jh, i = 0; i != pos[j]; n = n->next, i++) 
-   assert(n);
-   list_append(res, dup?dup(n->data):n->data);
+   GDKqsort_rev(keys, data, NULL, cnt, sizeof(int), sizeof(void *), 
TYPE_int);
+   for(i=0; ih, i = 0; n; n = n->next, i++) {
keys[i] = key(n->data);
-   pos[i] = i;
+   data[i] = n->data;
}
/* sort descending */
-   GDKqsort_rev(keys, pos, NULL, cnt, sizeof(int), sizeof(int), TYPE_int);
-   for(j=0; jh, i = 0; i != pos[j]; n = n->next, i++) 
-   assert(n);
-   list_append(res, dup?dup(n->data):n->data);
+   GDKqsort_rev(keys, data, NULL, cnt, sizeof(int), sizeof(void *), 
TYPE_int);
+   for(i=0; isa);
if (res == NULL) {
free(keys);
-   free(pos);
+   free(data);
return NULL;
}
for (n = dje->h, i = 0; n; n = n->next, i++) {
@@ -654,18 +655,15 @@ order_join_expressions(mvc *sql, list *d
if (r && is_select(r->op) && r->exps)
keys[i] += list_length(r->exps)*10 + 
exps_count(r->exps)*debug;
}
-   pos[i] = i;
+   data[i] = n->data;
}
/* sort descending */
-   if (cnt > 1) 
-   GDKqsort_rev(keys, pos, NULL, cnt, sizeof(int), sizeof(int), 
TYPE_int);
-   for(j=0; jh, i = 0; i != pos[j]; n = n->next, i++) 
-   ;
-   list_append(res, n->data);
+   GDKqsort_rev(keys, data, NULL, cnt, sizeof(int), sizeof(void *), 
TYPE_int);
+   for(i=0; ihttps://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: analytics - Merge with default

2018-10-16 Thread Pedro Ferreira
Changeset: f8174cbbe776 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f8174cbbe776
Added Files:
sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.sql
sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.stable.err
sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.stable.out
sql/test/BugTracker-2018/Tests/prepared-statement-with-udf.Bug-6650.sql
Modified Files:
MonetDB.spec
gdk/gdk_logger.c
gdk/gdk_logger.h
gdk/gdk_qsort.c
gdk/gdk_qsort_impl.h
sql/server/sql_parser.y
sql/test/BugTracker-2018/Tests/All
testing/Mtest.py.in
testing/listexports.py.in
tools/mserver/monet_version.c.in
Branch: analytics
Log Message:

Merge with default


diffs (truncated from 835 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -878,10 +878,10 @@ Group: Applications/Databases
 %if "%{?_selinux_policy_version}" != ""
 Requires:   selinux-policy >= %{?_selinux_policy_version}
 %endif
-Requires(post):   MonetDB5-server = %{version}-%{release}
-Requires(postun): MonetDB5-server
-Requires(post):   %{name}-SQL-server5 = %{version}-%{release}
-Requires(postun): %{name}-SQL-server5
+Requires(post):   MonetDB5-server%{?_isa} = %{version}-%{release}
+Requires(postun): MonetDB5-server%{?_isa} = %{version}-%{release}
+Requires(post):   %{name}-SQL-server5%{?_isa} = %{version}-%{release}
+Requires(postun): %{name}-SQL-server5%{?_isa} = %{version}-%{release}
 Requires(post):   /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles
 Requires(postun): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles
 BuildArch: noarch
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -936,8 +936,6 @@ tr_commit(logger *lg, trans *tr)
return tr_destroy(tr);
 }
 
-static gdk_return log_sequence_nrs(logger *lg);
-
 #ifdef _MSC_VER
 #define access(file, mode) _access(file, mode)
 #endif
@@ -991,7 +989,6 @@ logger_open(logger *lg)
 {
char id[BUFSIZ];
char *filename;
-   bat bid;
 
snprintf(id, sizeof(id), LLFMT, lg->id);
filename = GDKfilepath(BBPselectfarm(lg->dbfarm_role, 0, offheap), 
lg->dir, LOGFILE, id);
@@ -1003,36 +1000,12 @@ logger_open(logger *lg)
}
lg->end = 0;
 
-   if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) != 
GDK_SUCCEED) {
+   if (lg->log == NULL || mnstr_errnr(lg->log)) {
fprintf(stderr, "!ERROR: logger_open: creating %s failed\n", 
filename);
GDKfree(filename);
return GDK_FAIL;
}
GDKfree(filename);
-   if ((bid = logger_find_bat(lg, "seqs_id", 0, 0)) != 0) {
-   int dbg = GDKdebug;
-   BAT *b;
-   GDKdebug &= ~CHECKMASK;
-   if ((b = BATdescriptor(bid)) == NULL ||
-   BATmode(b, TRANSIENT) != GDK_SUCCEED ||
-   logger_del_bat(lg, bid) != GDK_SUCCEED) {
-   logbat_destroy(b);
-   return GDK_FAIL;
-   }
-   logbat_destroy(b);
-   b = NULL;
-   if ((bid = logger_find_bat(lg, "seqs_val", 0, 0)) == 0 ||
-   (b = BATdescriptor(bid)) == NULL ||
-   BATmode(b, TRANSIENT) != GDK_SUCCEED ||
-   logger_del_bat(lg, bid) != GDK_SUCCEED) {
-   logbat_destroy(b);
-   return GDK_FAIL;
-   }
-   logbat_destroy(b);
-   GDKdebug = dbg;
-   if (bm_commit(lg) != GDK_SUCCEED)
-   return GDK_FAIL;
-   }
return GDK_SUCCEED;
 }
 
@@ -1044,7 +1017,7 @@ logger_close(logger *lg)
 }
 
 static gdk_return
-logger_readlog(logger *lg, char *filename)
+logger_readlog(logger *lg, char *filename, bool *filemissing)
 {
trans *tr = NULL;
logformat l;
@@ -1067,6 +1040,7 @@ logger_readlog(logger *lg, char *filenam
close_stream(lg->log);
lg->log = NULL;
GDKdebug = dbg;
+   *filemissing = true;
return GDK_SUCCEED;
}
short byteorder;
@@ -1276,7 +1250,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
fprintf(stderr, "#logger_readlogs logger id is " LLFMT "\n", 
lg->id);
}
 
-   while (fgets(id, sizeof(id), fp) != NULL) {
+   if (fgets(id, sizeof(id), fp) != NULL) {
char log_filename[FILENAME_MAX];
lng lid = strtoll(id, NULL, 10);
 
@@ -1285,13 +1259,20 @@ logger_readlogs(logger *lg, FILE *fp, ch
}
 
if (!lg->shared && lid >= lg->id) {
+   bool filemissing = false;
+
lg->id = lid;
-   snprintf(log_filename, sizeof(log_filename), "%s." 
LLFMT, filename, lg->id);
-   

MonetDB: analytics - nth_value analytic function with column nth...

2018-10-16 Thread Pedro Ferreira
Changeset: 74e82cef418e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=74e82cef418e
Modified Files:
gdk/gdk_analytic.h
gdk/gdk_analytic_func.c
sql/backends/monet5/sql_rank.c
sql/test/analytics/Tests/analytics01.sql
sql/test/analytics/Tests/analytics01.stable.err
sql/test/analytics/Tests/analytics01.stable.out
Branch: analytics
Log Message:

nth_value analytic function with column nth parameter.


diffs (truncated from 544 to 300 lines):

diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -27,7 +27,7 @@ gdk_export gdk_return GDKanalyticalwindo
 
 gdk_export gdk_return GDKanalyticalfirst(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
 gdk_export gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
-gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, 
BUN nth, int tpe);
+gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, 
BAT *l, const void* restrict bound, int tp1, int tp2);
 gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
 gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
 gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *b, BAT *s, BAT *e, const 
bit* restrict ignore_nils, int tpe);
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -352,84 +352,208 @@ allocation_error:
return GDK_FAIL;
 }
 
-#define ANALYTICAL_NTHVALUE_IMP(TPE) \
-   do { \
-   TPE *bp, *bs, *be, curval, *restrict rb; \
-   bp = (TPE*)Tloc(b, 0);   \
-   rb = (TPE*)Tloc(r, 0);   \
-   if (nth == BUN_NONE) {   \
-   has_nils = true; \
-   for(; i bs && nth < (BUN)(end[i] - 
start[i])) ? *(bs + nth) : TPE##_nil; \
-   *rb = curval;\
-   if (is_##TPE##_nil(curval))  \
-   has_nils = true; \
-   }\
-   }\
+#define ANALYTICAL_NTHVALUE_IMP_SINGLE_FIXED(TPE1) \
+   do { \
+   TPE1 *bp = (TPE1*)Tloc(b, 0), *bs, *be, curval, *restrict rb = 
(TPE1*)Tloc(r, 0); \
+   if (is_lng_nil(nth)) { \
+   has_nils = true; \
+   for (; i bs && nth < (end[i] - start[i])) 
? *(bs + nth) : TPE1##_nil; \
+   *rb = curval; \
+   if (is_##TPE1##_nil(curval)) \
+   has_nils = true; \
+   } \
+   } \
+   } while(0)
+
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, TPE2) \
+   do { \
+   TPE2 *restrict lp = (TPE2*)Tloc(l, 0); \
+   for (; i (end[i] - start[i])) \
+   curval = TPE1##_nil; \
+   else \
+   curval = *(bs + lnth - 1); \
+   *rb = curval; \
+   if (is_##TPE1##_nil(curval)) \
+   has_nils = true; \
+   } \
+   } while(0)
+
+#define ANALYTICAL_NTHVALUE_CALC_FIXED(TPE1) \
+   do { \
+   TPE1 *bp, *bs, *be, curval, *restrict rb; \
+   bp = (TPE1*)Tloc(b, 0); \
+   rb = (TPE1*)Tloc(r, 0); \
+   switch (tp2) { \
+   case TYPE_bte: \
+   ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, bte); 
\
+   break; \
+   case TYPE_sht: \
+   ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, sht); 
\
+   break; \
+   case TYPE_int: \
+   ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, int); 
\
+   break; \
+   case TYPE_lng: \
+   ANALYTICAL_NTHVALUE_IMP_MULTI_FIXED(TPE1, lng); 
\
+   break; \
+   default: \
+   goto nosupport; \
+   } \
+   } while(0)
+
+#define ANALYTICAL_NTHVALUE_IMP_MULTI_VARSIZED(TPE2) \
+   do { \
+   TPE2 *restrict lp = (TPE2*)Tloc(l, 0); \
+   for (; i < cnt; i++) { \
+   TPE2 lnth = lp[i]; \
+   if (is_##TPE2##_nil(lnth) || end[i] <= start[i] || 
(lng)(lnth - 1) > (end[i] - start[i])) \
+   curval = (void *) nil; \
+   else \
+   curval = BUNtail(bpi, (BUN) 

MonetDB: default - The OpenSSL_version function seems to be a fa...

2018-10-16 Thread Sjoerd Mullender
Changeset: 77393d962d1f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=77393d962d1f
Modified Files:
tools/mserver/monet_version.c.in
Branch: default
Log Message:

The OpenSSL_version function seems to be a fairly recent addition.
(In other words, Ubuntu is lagging way behind.)


diffs (15 lines):

diff --git a/tools/mserver/monet_version.c.in b/tools/mserver/monet_version.c.in
--- a/tools/mserver/monet_version.c.in
+++ b/tools/mserver/monet_version.c.in
@@ -88,7 +88,11 @@ monet_version(void)
 #endif
 #ifdef HAVE_OPENSSL
print_libversion("openssl",
+#if OPENSSL_VERSION_NUMBER < 0x1010
+OPENSSL_VERSION_TEXT,
+#else
 OpenSSL_version(OPENSSL_VERSION),
+#endif
 OPENSSL_VERSION_TEXT);
 #endif
 #ifdef HAVE_LIBXML
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list