MonetDB: sequences_7184 - approved output

2021-11-10 Thread Niels Nes
Changeset: 1ebfd2174234 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1ebfd2174234
Modified Files:
clients/Tests/MAL-signatures.stable.out.int128
Branch: sequences_7184
Log Message:

approved output


diffs (truncated from 393 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -8778,6 +8778,7 @@
 [ "batmtime",  "year", "pattern batmtime.year(X_0:bat[:timestamp], 
X_1:bat[:oid]):bat[:int] ", "MTIMEtimestamp_year_bulk;",""  ]
 [ "batpcre",   "replace",  "command batpcre.replace(X_0:bat[:str], 
X_1:str, X_2:str, X_3:str):bat[:str] ", "PCREreplace_bat_wrap;",""  
]
 [ "batpcre",   "replace_first","command 
batpcre.replace_first(X_0:bat[:str], X_1:str, X_2:str, X_3:str):bat[:str] ",   
"PCREreplacefirst_bat_wrap;",   ""  ]
+[ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:lng, X_1:ptr, 
X_2:str):any... ", "PYAPI3PyAPIevalStd;",  "Execute a simple Python script 
value"  ]
 [ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:ptr, X_1:str, 
X_2:any...):any... ",  "PYAPI3PyAPIevalStd;",  "Execute a simple Python script 
value"  ]
 [ "batpyapi3", "eval_aggr","unsafe pattern batpyapi3.eval_aggr(X_0:ptr, 
X_1:str, X_2:any...):any... ", "PYAPI3PyAPIevalAggr;", "grouped aggregates 
through Python" ]
 [ "batpyapi3", "eval_loader",  "unsafe pattern batpyapi3.eval_loader(X_0:ptr, 
X_1:str):any... ",   "PYAPI3PyAPIevalLoader;",   "loader functions 
through Python"   ]
@@ -8786,6 +8787,7 @@
 [ "batpyapi3map",  "eval", "pattern batpyapi3map.eval(X_0:ptr, X_1:str, 
X_2:any...):any... ",  "PYAPI3PyAPIevalStdMap;",   "Execute a simple 
Python script value"  ]
 [ "batpyapi3map",  "eval_aggr","pattern 
batpyapi3map.eval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ", 
"PYAPI3PyAPIevalAggrMap;",  "grouped aggregates through Python" ]
 [ "batpyapi3map",  "subeval_aggr", "pattern 
batpyapi3map.subeval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ",  
"PYAPI3PyAPIevalAggrMap;",  "grouped aggregates through Python" ]
+[ "batrapi",   "eval", "pattern batrapi.eval(X_0:lng, X_1:ptr, X_2:str):any... 
",  "RAPIevalStd;", "Execute a simple R script value"   ]
 [ "batrapi",   "eval", "pattern batrapi.eval(X_0:ptr, X_1:str, 
X_2:any...):any... ",   "RAPIevalStd;", "Execute a simple R script value"   
]
 [ "batrapi",   "eval_aggr","pattern batrapi.eval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ",  "RAPIevalAggr;","grouped aggregates through 
R"  ]
 [ "batrapi",   "subeval_aggr", "pattern batrapi.subeval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ",   "RAPIevalAggr;","grouped aggregates through R"  
]
@@ -11654,10 +11656,10 @@
 [ "capi",  "eval_aggr","pattern capi.eval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ","CUDFevalAggr;","grouped 
aggregates through CUDF"   ]
 [ "capi",  "prelude",  "command capi.prelude():void ", "CUDFprelude;", 
""  ]
 [ "capi",  "subeval_aggr", "pattern capi.subeval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ", "CUDFevalAggr;","grouped aggregates 
through CUDF"   ]
-[ "clients",   "addUser",  "pattern clients.addUser(X_0:str, X_1:str):oid 
",   "CLTaddUser;",  "Allow user with password access to the given 
scenarios"]
+[ "clients",   "addUser",  "unsafe pattern clients.addUser(X_0:str, 
X_1:str):oid ","CLTaddUser;",  "Allow user with password access to the 
given scenarios"]
 [ "clients",   "backendsum",   "command clients.backendsum(X_0:str):str ", 
"CLTbackendsum;",   "Return hex string representation of the currently used 
hash of the given string"   ]
-[ "clients",   "changePassword",   "pattern 
clients.changePassword(X_0:str, X_1:str):void ",   "CLTchangePassword;",   
"Change the password for the current user"  ]
-[ "clients",   "changeUsername",   "pattern 
clients.changeUsername(X_0:str, X_1:str):void ",   "CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
+[ "clients",   "changePassword",   "unsafe pattern 
clients.changePassword(X_0:str, X_1:str):void ","CLTchangePassword;",   
"Change the password for the current user"  ]
+[ "clients",   "changeUsername",   "unsafe pattern 
clients.changeUsername(X_0:str, X_1:str):void ","CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
 [ "clients",   "checkPermission",  "pattern 
clients.checkPermission(X_0:str, X_1:str):void ",  "CLTcheckPermission;",  
"Check permission for a user, requires hashed password (backendsum)"]
 [ "clients",   "current_sessionid","pattern 
clients.current_sessionid():int ", "CLTgetSessionID;", "return current 
session ID" ]
 [ 

monetdb-java: default - For testweb failures need to be written ...

2021-11-10 Thread Martin van Dinther
Changeset: 73f4f30e4c62 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/73f4f30e4c62
Modified Files:
tests/TestRunner.java
Branch: default
Log Message:

For testweb failures need to be written to err


diffs (31 lines):

diff --git a/tests/TestRunner.java b/tests/TestRunner.java
--- a/tests/TestRunner.java
+++ b/tests/TestRunner.java
@@ -142,13 +142,13 @@ public class TestRunner {
if (verbosity >= VERBOSITY_SHOW_ALL)
dumpOutput(testName);
} catch (Failure e) {
-   System.out.println();
-   System.out.println("Test " + testName + " failed");
+   System.err.println();
+   System.err.println("Test " + testName + " failed");
dumpOutput(testName);
} catch (Exception e) {
-   System.out.println();
-   System.out.println("Test " + testName + " failed:");
-   e.printStackTrace(System.out);
+   System.err.println();
+   System.err.println("Test " + testName + " failed:");
+   e.printStackTrace(System.err);
dumpOutput(testName);
// Show the inner bits of the exception again, they may 
have scrolled off screen
Throwable t = e;
@@ -157,7 +157,7 @@ public class TestRunner {
}
System.out.println("Innermost cause was " + t);
if (t.getStackTrace().length > 0) {
-   System.out.println(" at " + 
t.getStackTrace()[0]);
+   System.err.println(" at " + 
t.getStackTrace()[0]);
}
} finally {
watchDog.setContext(null);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: sequences_7184 - merged with default

2021-11-10 Thread Niels Nes
Changeset: a951ee924c15 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a951ee924c15
Modified Files:
sql/backends/monet5/sql.c
Branch: sequences_7184
Log Message:

merged with default


diffs (truncated from 482 to 300 lines):

diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -1078,28 +1078,39 @@ BATstr_group_concat(ValPtr res, BAT *b, 
 {
BUN ncand;
struct canditer ci;
+   gdk_return r = GDK_SUCCEED;
+   bool free_nseparator = false;
+   char *nseparator = (char *)separator;
 
(void) abort_on_error;
-   assert((separator && !sep) || (!separator && sep)); /* only one of them 
must be set */
+   assert((nseparator && !sep) || (!nseparator && sep)); /* only one of 
them must be set */
res->vtype = TYPE_str;
 
ncand = canditer_init(, b, s);
 
if (sep && BATcount(sep) == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
-   separator = BUNtvar(bi, 0);
+   nseparator = GDKstrdup(BUNtvar(bi, 0));
bat_iterator_end();
+   if (!nseparator)
+   return GDK_FAIL;
+   free_nseparator = true;
sep = NULL;
}
 
-   if (ncand == 0 || (separator && strNil(separator))) {
+   if (ncand == 0 || (nseparator && strNil(nseparator))) {
if (VALinit(res, TYPE_str, nil_if_empty ? str_nil : "") == NULL)
-   return GDK_FAIL;
-   return GDK_SUCCEED;
+   r = GDK_FAIL;
+   if (free_nseparator)
+   GDKfree(nseparator);
+   return r;
}
 
-   return concat_strings(NULL, res, b, b->hseqbase, 1, , ncand, NULL, 
0, 0,
- skip_nils, sep, separator, NULL);
+   r = concat_strings(NULL, res, b, b->hseqbase, 1, , ncand, NULL, 0, 0,
+ skip_nils, sep, nseparator, NULL);
+   if (free_nseparator)
+   GDKfree(nseparator);
+   return r;
 }
 
 BAT *
@@ -1112,8 +1123,10 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
struct canditer ci;
const char *err;
gdk_return res;
+   bool free_nseparator = false;
+   char *nseparator = (char *)separator;
 
-   assert((separator && !sep) || (!separator && sep)); /* only one of them 
must be set */
+   assert((nseparator && !sep) || (!nseparator && sep)); /* only one of 
them must be set */
(void) skip_nils;
 
if ((err = BATgroupaggrinit(b, g, e, s, , , ,
@@ -1128,29 +1141,37 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
 
if (sep && BATcount(sep) == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
-   separator = BUNtvar(bi, 0);
+   nseparator = GDKstrdup(BUNtvar(bi, 0));
bat_iterator_end();
+   if (!nseparator)
+   return NULL;
+   free_nseparator = true;
sep = NULL;
}
 
-   if (ncand == 0 || ngrp == 0 || (separator && strNil(separator))) {
+   if (ncand == 0 || ngrp == 0 || (nseparator && strNil(nseparator))) {
/* trivial: no strings to concat, so return bat
 * aligned with g with nil in the tail */
-   return BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, 
ngrp, TRANSIENT);
+   bn = BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, ngrp, 
TRANSIENT);
+   goto done;
}
 
if (BATtdense(g) || (g->tkey && g->tnonil)) {
/* trivial: singleton groups, so all results are equal
 * to the inputs (but possibly a different type) */
-   return BATconvert(b, s, TYPE_str, abort_on_error, 0, 0, 0);
+   bn = BATconvert(b, s, TYPE_str, abort_on_error, 0, 0, 0);
+   goto done;
}
 
res = concat_strings(, NULL, b, b->hseqbase, ngrp, , ncand,
 (const oid *) Tloc(g, 0), min, max, skip_nils, sep,
-separator, );
+nseparator, );
if (res != GDK_SUCCEED)
-   return NULL;
+   bn = NULL;
 
+done:
+   if (free_nseparator)
+   GDKfree(nseparator);
return bn;
 }
 
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -31,7 +31,7 @@ BATunique(BAT *b, BAT *s)
const char *vals;
const char *vars;
int width;
-   oid i, o;
+   oid i, o, hseq;
const char *nme;
Hash *hs = NULL;
BUN hb;
@@ -102,6 +102,7 @@ BATunique(BAT *b, BAT *s)
vars = NULL;
width = bi.width;
cmp = ATOMcompare(bi.type);
+   hseq = b->hseqbase;
 
if (ATOMbasetype(bi.type) == TYPE_bte ||
(bi.width == 1 &&
@@ -114,7 +115,7 @@ BATunique(BAT *b, BAT 

MonetDB: sequences_7184 - compare with correct last used id.

2021-11-10 Thread Niels Nes
Changeset: 653e89d4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/653e89d4
Modified Files:
sql/storage/store_sequence.c
Branch: sequences_7184
Log Message:

compare with correct last used id.


diffs (12 lines):

diff --git a/sql/storage/store_sequence.c b/sql/storage/store_sequence.c
--- a/sql/storage/store_sequence.c
+++ b/sql/storage/store_sequence.c
@@ -214,7 +214,7 @@ seqbulk_next_value(sql_store store, sql_
if ((i+1) < cnt)
s->cur += seq->increment;
}
-   *end = s->cur;
+   nr = *end = s->cur;
if (save || nr >= s->cached) {
while(s->cached <= nr)
s->cached += seq->cacheinc*seq->increment;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


monetdb-java: default - Answer to question. Please test if it wo...

2021-11-10 Thread Martin van Dinther
Changeset: 718492fb8714 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/718492fb8714
Modified Files:
tests/OnClientTester.java
Branch: default
Log Message:

Answer to question. Please test if it works for your system.


diffs (34 lines):

diff --git a/tests/OnClientTester.java b/tests/OnClientTester.java
--- a/tests/OnClientTester.java
+++ b/tests/OnClientTester.java
@@ -16,6 +16,7 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.List;
 
@@ -34,7 +35,7 @@ public final class OnClientTester extend
boolean watchDogEnabled = true;
 
// Don't know why I need this all of a sudden.. is it only on 
my system?
-   Class.forName("org.monetdb.jdbc.MonetDriver");
+   // Class.forName("org.monetdb.jdbc.MonetDriver");   // 
should not be needed if you add: import java.sql.DriverManager;
 
for (String arg : args) {
if (arg.equals("-v"))
@@ -324,7 +325,6 @@ public final class OnClientTester extend
assertEq("connection is closed", true, conn.isClosed());
}
 
-
public void test_FailUploadLate2() throws SQLException, Failure {
// Here we send empty lines only, to check if the server 
detects is properly instead
// of simply complaining about an incomplete file.
@@ -572,5 +572,4 @@ public final class OnClientTester extend
return lines;
}
}
-
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Hold bat iterator a little longer and small f...

2021-11-10 Thread Pedro Ferreira
Changeset: a7e3d519e8fb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a7e3d519e8fb
Modified Files:
monetdb5/modules/atoms/json.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_subquery.c
Branch: default
Log Message:

Hold bat iterator a little longer and small fixes


diffs (132 lines):

diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -1980,14 +1980,15 @@ JSONrenderRowObject(BAT **bl, MalBlkPtr 
len = 1;
for (i = pci->retc; i < pci->argc; i += 2) {
name = stk->stk[getArg(pci, i)].val.sval;
+   tpe = getBatType(getArgType(mb, pci, i + 1));
bi = bat_iterator(bl[i + 1]);
p = BUNtail(bi, idx);
-   bat_iterator_end();
-   tpe = getBatType(getArgType(mb, pci, i + 1));
if ((val = ATOMformat(tpe, p)) == NULL) {
+   bat_iterator_end();
GDKfree(row);
return NULL;
}
+   bat_iterator_end();
if (strncmp(val, "nil", 3) == 0) {
GDKfree(val);
val = NULL;
@@ -2096,13 +2097,14 @@ JSONrenderRowArray(BAT **bl, MalBlkPtr m
row[1] = 0;
len = 1;
for (i = pci->retc; i < pci->argc; i++) {
+   tpe = getBatType(getArgType(mb, pci, i));
bi = bat_iterator(bl[i]);
p = BUNtail(bi, idx);
-   bat_iterator_end();
-   tpe = getBatType(getArgType(mb, pci, i));
if ((val = ATOMformat(tpe, p)) == NULL) {
+   bat_iterator_end();
goto memfail;
}
+   bat_iterator_end();
if (strcmp(val, "nil") == 0) {
GDKfree(val);
val = NULL;
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
@@ -3382,6 +3382,7 @@ SQLbat_alpha_cst(bat *res, const bat *de
if (BUNappend(bn, , false) != GDK_SUCCEED) {
BBPreclaim(bn);
bat_iterator_end();
+   BBPunfix(b->batCacheid);
throw(SQL, "sql.alpha", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
}
}
@@ -3428,6 +3429,7 @@ SQLcst_alpha_bat(bat *res, const dbl *de
if (BUNappend(bn, , false) != GDK_SUCCEED) {
BBPreclaim(bn);
bat_iterator_end();
+   BBPunfix(b->batCacheid);
throw(SQL, "sql.alpha", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
}
}
diff --git a/sql/backends/monet5/sql_subquery.c 
b/sql/backends/monet5/sql_subquery.c
--- a/sql/backends/monet5/sql_subquery.c
+++ b/sql/backends/monet5/sql_subquery.c
@@ -16,18 +16,17 @@ zero_or_one_error(ptr ret, const bat *bi
BAT *b;
BUN c;
size_t _s;
+   BATiter bi = {0};
const void *p = NULL;
 
-   if ((b = BATdescriptor(*bid)) == NULL) {
+   if ((b = BATdescriptor(*bid)) == NULL)
throw(SQL, "sql.zero_or_one", SQLSTATE(HY005) "Cannot access 
column descriptor");
-   }
c = BATcount(b);
if (c == 0) {
p = ATOMnilptr(b->ttype);
} else if (c == 1 || (c > 1 && *err == false)) {
-   BATiter bi = bat_iterator(b);
+   bi = bat_iterator(b);
p = BUNtail(bi, 0);
-   bat_iterator_end();
} else {
p = NULL;
BBPunfix(b->batCacheid);
@@ -40,6 +39,8 @@ zero_or_one_error(ptr ret, const bat *bi
_s = ATOMlen(ATOMtype(b->ttype), p);
*(ptr *) ret = GDKmalloc(_s);
if (*(ptr *) ret == NULL) {
+   if (bi.b)
+   bat_iterator_end();
BBPunfix(b->batCacheid);
throw(SQL, "sql.zero_or_one", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
}
@@ -47,6 +48,8 @@ zero_or_one_error(ptr ret, const bat *bi
} else if (b->ttype == TYPE_bat) {
bat bid = *(bat *) p;
if ((*(BAT **) ret = BATdescriptor(bid)) == NULL){
+   if (bi.b)
+   bat_iterator_end();
BBPunfix(b->batCacheid);
throw(SQL, "sql.zero_or_one", SQLSTATE(HY005) "Cannot 
access column descriptor");
}
@@ -65,6 +68,8 @@ zero_or_one_error(ptr ret, const bat *bi
} else {
memcpy(ret, p, _s);
}
+   if (bi.b)
+   bat_iterator_end();
BBPunfix(b->batCacheid);
return MAL_SUCCEED;
 }
@@ -203,6 +208,7 @@ SQLall(ptr ret, const bat *bid)
if 

MonetDB: sequences_7184 - Implement cardinality based bulk opera...

2021-11-10 Thread Aris Koning
Changeset: 9e50bda62d61 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9e50bda62d61
Modified Files:
monetdb5/extras/rapi/rapi.c
sql/backends/monet5/UDF/pyapi3/pyapi3.c
Branch: sequences_7184
Log Message:

Implement cardinality based bulk operations for rapi en pyapi3.


diffs (truncated from 345 to 300 lines):

diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -598,8 +598,6 @@ bailout:
 
 static str RAPIeval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, 
bit grouped) {
sql_func * sqlfun = NULL;
-   str exprStr = *getArgReference_str(stk, pci, pci->retc + 1);
-
SEXP x, env, retval;
SEXP varname = R_NilValue;
SEXP varvalue = R_NilValue;
@@ -621,6 +619,19 @@ static str RAPIeval(Client cntxt, MalBlk
 
rapiClient = cntxt;
 
+   // If the first input argument is of type lng, this is a 
cardinality-only bulk operation.
+   int has_card_arg = 0;
+   lng card; // cardinality of non-bat inputs
+   if (getArgType(mb, pci, pci->retc) == TYPE_lng) {
+   has_card_arg=1;
+   card = *getArgReference_lng(stk, pci, pci->retc);
+   }
+   else {
+   has_card_arg=0;
+   card = 1;
+   }
+   str exprStr = *getArgReference_str(stk, pci, pci->retc + 1 + 
has_card_arg);
+
if (!RAPIEnabled()) {
throw(MAL, "rapi.eval",
  "Embedded R has not been enabled. Start server with 
--set %s=true",
@@ -632,10 +643,10 @@ static str RAPIeval(Client cntxt, MalBlk
}
 
if (!grouped) {
-   sql_subfunc *sqlmorefun = (*(sql_subfunc**) 
getArgReference(stk, pci, pci->retc));
-   if (sqlmorefun) sqlfun = (*(sql_subfunc**) getArgReference(stk, 
pci, pci->retc))->func;
+   sql_subfunc *sqlmorefun = (*(sql_subfunc**) 
getArgReference(stk, pci, pci->retc+has_card_arg));
+   if (sqlmorefun) sqlfun = sqlmorefun->func;
} else {
-   sqlfun = *(sql_func**) getArgReference(stk, pci, pci->retc);
+   sqlfun = *(sql_func**) getArgReference(stk, pci, 
pci->retc+has_card_arg);
}
 
args = (str*) GDKzalloc(sizeof(str) * pci->argc);
@@ -653,7 +664,7 @@ static str RAPIeval(Client cntxt, MalBlk
// NEW macro temporarily renamed to MNEW to allow including 
sql_catalog.h
 
if (sqlfun != NULL && sqlfun->ops->cnt > 0) {
-   int carg = pci->retc + 2;
+   int carg = pci->retc + 2 + has_card_arg;
argnode = sqlfun->ops->h;
while (argnode) {
char* argname = ((sql_arg*) argnode->data)->name;
@@ -664,7 +675,7 @@ static str RAPIeval(Client cntxt, MalBlk
}
// the first unknown argument is the group, we don't really care for 
the rest.
argnameslen = 2;
-   for (i = pci->retc + 2; i < pci->argc; i++) {
+   for (i = pci->retc + 2 + has_card_arg; i < pci->argc; i++) {
if (args[i] == NULL) {
if (!seengrp && grouped) {
args[i] = GDKstrdup("aggr_group");
@@ -679,30 +690,16 @@ static str RAPIeval(Client cntxt, MalBlk
 
// install the MAL variables into the R environment
// we can basically map values to int ("INTEGER") or double ("REAL")
-   for (i = pci->retc + 2; i < pci->argc; i++) {
+   for (i = pci->retc + 2 + has_card_arg; i < pci->argc; i++) {
int bat_type = getBatType(getArgType(mb,pci,i));
// check for BAT or scalar first, keep code left
if (!isaBatType(getArgType(mb,pci,i))) {
-   b = COLnew(0, getArgType(mb, pci, i), 0, TRANSIENT);
+   const ValRecord *v = >stk[getArg(pci, i)];
+   b = BATconstant(0, v->vtype, VALptr(v), card, 
TRANSIENT);
if (b == NULL) {
msg = createException(MAL, "rapi.eval", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto wrapup;
}
-   if ( getArgType(mb,pci,i) == TYPE_str) {
-   if (BUNappend(b, *getArgReference_str(stk, pci, 
i), false) != GDK_SUCCEED) {
-   BBPreclaim(b);
-   b = NULL;
-   msg = createException(MAL, "rapi.eval", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
-   goto wrapup;
-   }
-   } else {
-   if (BUNappend(b, getArgReference(stk, pci, i), 
false) != GDK_SUCCEED) {
-   BBPreclaim(b);
-   b = NULL;
-   msg = createException(MAL, "rapi.eval", 

MonetDB: string_imprints - Merge with default

2021-11-10 Thread Panagiotis Koutsourakis
Changeset: d955714c71b3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d955714c71b3
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_bbp.c
monetdb5/optimizer/CMakeLists.txt
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.c
sql/backends/monet5/CMakeLists.txt
sql/backends/monet5/sql.c
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
Branch: string_imprints
Log Message:

Merge with default


diffs (truncated from 59222 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
@@ -6617,7 +6617,7 @@
 [ "batstr","unicodeAt","pattern batstr.unicodeAt(X_0:bat[:str], 
X_1:int, X_2:bat[:oid]):bat[:int] ",   "STRbatWChrAtcst;", "get a unicode 
character (as an int) from a string position."   ]
 [ "battxtsim", "similarity",   "command battxtsim.similarity(X_0:bat[:str], 
X_1:bat[:str]):bat[:dbl] ","fstrcmp0_impl_bulk;",  "Normalized edit 
distance between two strings"  ]
 [ "batuuid",   "isaUUID",  "command 
batuuid.isaUUID(X_0:bat[:str]):bat[:bit] ","UUIDisaUUID_bulk;","Test a 
string for a UUID format"   ]
-[ "batuuid",   "new",  "unsafe command batuuid.new(X_0:bat[:int]):bat[:uuid] 
","UUIDgenerateUuidInt_bulk;","Generate a new uuid (dummy version 
for side effect free multiplex loop)"   ]
+[ "batuuid",   "new",  "command batuuid.new(X_0:bat[:int]):bat[:uuid] ",   
"UUIDgenerateUuidInt_bulk;","Generate a new uuid (dummy version for side 
effect free multiplex loop)"   ]
 [ "batxml","attribute","command batxml.attribute(X_0:str, 
X_1:bat[:str]):bat[:xml] ",  "BATXMLattribute;", "Construct an attribute 
value pair."]
 [ "batxml","comment",  "command 
batxml.comment(X_0:bat[:str]):bat[:xml] ", "BATXMLcomment;",   "Create 
an XML comment element."]
 [ "batxml","concat",   "command batxml.concat(X_0:bat[:xml], 
X_1:bat[:xml]):bat[:xml] ",   "BATXMLconcat;","Concatenate the XML 
values."   ]
@@ -8381,10 +8381,10 @@
 [ "capi",  "eval_aggr","pattern capi.eval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ","CUDFevalAggr;","grouped 
aggregates through CUDF"   ]
 [ "capi",  "prelude",  "command capi.prelude():void ", "CUDFprelude;", 
""  ]
 [ "capi",  "subeval_aggr", "pattern capi.subeval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ", "CUDFevalAggr;","grouped aggregates 
through CUDF"   ]
-[ "clients",   "addUser",  "pattern clients.addUser(X_0:str, X_1:str):oid 
",   "CLTaddUser;",  "Allow user with password access to the given 
scenarios"]
+[ "clients",   "addUser",  "unsafe pattern clients.addUser(X_0:str, 
X_1:str):oid ","CLTaddUser;",  "Allow user with password access to the 
given scenarios"]
 [ "clients",   "backendsum",   "command clients.backendsum(X_0:str):str ", 
"CLTbackendsum;",   "Return hex string representation of the currently used 
hash of the given string"   ]
-[ "clients",   "changePassword",   "pattern 
clients.changePassword(X_0:str, X_1:str):void ",   "CLTchangePassword;",   
"Change the password for the current user"  ]
-[ "clients",   "changeUsername",   "pattern 
clients.changeUsername(X_0:str, X_1:str):void ",   "CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
+[ "clients",   "changePassword",   "unsafe pattern 
clients.changePassword(X_0:str, X_1:str):void ","CLTchangePassword;",   
"Change the password for the current user"  ]
+[ "clients",   "changeUsername",   "unsafe pattern 
clients.changeUsername(X_0:str, X_1:str):void ","CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
 [ "clients",   "checkPermission",  "pattern 
clients.checkPermission(X_0:str, X_1:str):void ",  "CLTcheckPermission;",  
"Check permission for a user, requires hashed password (backendsum)"]
 [ "clients",   "current_sessionid","pattern 
clients.current_sessionid():int ", "CLTgetSessionID;", "return current 
session ID" ]
 [ "clients",   "getId","pattern clients.getId():int ", 
"CLTgetClientId;",  "Return a number that uniquely represents the current 
client."  ]
@@ -8396,42 +8396,42 @@
 [ "clients",   "getUsers", "pattern clients.getUsers() (X_0:bat[:oid], 
X_1:bat[:str]) ",   "CLTgetUsers;", "return a BAT with user id and one with 
name available in the 

MonetDB: string_imprints - Put SQL strimp related functions in s...

2021-11-10 Thread Panagiotis Koutsourakis
Changeset: 2525bf3f4af0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2525bf3f4af0
Modified Files:
sql/scripts/90_strimps.sql
Branch: string_imprints
Log Message:

Put SQL strimp related functions in sys schema


diffs (14 lines):

diff --git a/sql/scripts/90_strimps.sql b/sql/scripts/90_strimps.sql
--- a/sql/scripts/90_strimps.sql
+++ b/sql/scripts/90_strimps.sql
@@ -1,7 +1,5 @@
-create schema strimps;
+CREATE FILTER FUNCTION sys.strimp_filter(strs STRING, q STRING) EXTERNAL NAME 
strimps.strimpfilter;
+GRANT EXECUTE ON FILTER FUNCTION sys.strimp_filter TO PUBLIC;
 
-CREATE FILTER FUNCTION strimps.filter(strs STRING, q STRING) EXTERNAL NAME 
strimps.strimpfilter;
-GRANT EXECUTE ON FILTER FUNCTION strimps.filter TO PUBLIC;
-
-CREATE PROCEDURE sys.createstrimps(sch string, tab string, col string)
+CREATE PROCEDURE sys.strimp_create(sch string, tab string, col string)
EXTERNAL NAME sql.createstrimps;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: string_imprints - Documentation updates

2021-11-10 Thread Panagiotis Koutsourakis
Changeset: 7492eca2c981 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7492eca2c981
Modified Files:
gdk/gdk_strimps.c
Branch: string_imprints
Log Message:

Documentation updates


diffs (226 lines):

diff --git a/gdk/gdk_strimps.c b/gdk/gdk_strimps.c
--- a/gdk/gdk_strimps.c
+++ b/gdk/gdk_strimps.c
@@ -56,13 +56,24 @@
  *
  * Strimp creation goes as follows:
  *
- * - Construct a histogram of the element (byte or character) pairs for
- *   all the strings in the BAT.
+ * - Construct a histogram of all the element pairs for all the strings
+ *   in the BAT.
+ *
+ * - Take the np most frequent pairs as the Strimp Header.
+ *
+ * - For each string s in the BAT, construct an np-bit mask, m_s that
+ *   encodes the presence or absence of each member of the header in the
+ *   string.
  *
- * - Take the 64 most frequent pairs as the Strimp Header.
+ * Filtering with a query string q goes as follows:
+ *
+ * - Use the strimp header to construct an np-bit mask for q encoding
+ *   the presence or absence of each member of the header in q.
  *
- * - For each string in the bat construct a 64 bit mask that encodes
- *   the presence or absence of each member of the header in the string.
+ * - For each bitmask in the strimp compute the bitwise AND of m_s and
+ *   q. If the result is equal to q, that means that string s contains
+ *   the same strimp header elements as q, so it is kept for more
+ *   detailed examination.
  */
 
 #include "monetdb_config.h"
@@ -70,14 +81,6 @@
 #include "gdk_private.h"
 
 
-#define swp(_a, _i, _j, TPE)   \
-   do {\
-   TPE _t = ((TPE *)_a)[_i];   \
-   ((TPE *) _a)[_i] = ((TPE *) _a)[_j];\
-   ((TPE *) _a)[_j] = _t;  \
-   } while(0)
-
-
 /* Macros for accessing metadada of a strimp. These are recorded in the
  * first 8 bytes of the heap.
  */
@@ -100,9 +103,15 @@ pair_equal(CharPair *p1, CharPair *p2) {
 #else
 /* BytePairs implementation.
  *
- * All the of the following functions and macros up to #endif need to be
+ * The header elemens are pairs of bytes. In this case the histogram is
+ * 256*256=65536 entries long. We use the numeric value of the 2 byte
+ * sequence of the pair as the index to the histogram.
+ *
+ * Note: All the of the following functions and macros up to #endif need to be
  * implemented for the UTF8 case.
  */
+
+/* We disregard spaces, digits and punctuation characters */
 #define isIgnored(x) (isspace((x)) || isdigit((x)) || ispunct((x)))
 #define pairToIndex(b1, b2) (size_t)(((uint16_t)b2)<<8 | ((uint16_t)b1))
 
@@ -137,10 +146,20 @@ next_pair(PairIterator *pi) {
return true;
 }
 
+/* Returns true if the specified char is ignored.
+ */
+static bool
+ignored(CharPair *p, uint8_t elm) {
+   assert(elm == 0 || elm == 1);
+   return isIgnored(p->pbytes[elm]);
+}
+
 #endif // UTF8STRIMPS
 
-/* Look up a given pair in a strimp. Returns the index of the pair, or
- * -1 if it is not found. Assumes that there no more than 128 pairs.
+/* Looks up a given pair in the strimp header. Returns the index of the
+ * pair, or -1 if it is not found.
+ *
+ * NOTE: This routine assumes that there are no more than 128 pairs.
  */
 static int8_t
 STRMPpairLookup(Strimps *s, CharPair *p) {
@@ -149,7 +168,8 @@ STRMPpairLookup(Strimps *s, CharPair *p)
size_t offset = 0;
CharPair sp;
 
-   // The return type implies that we have no more than 128 pairs.
+   // The return type implies that we have no more than 128 pairs
+   // in the header.
assert(npairs <= 128);
 
for (idx = 0; idx < npairs; idx++) {
@@ -163,17 +183,9 @@ STRMPpairLookup(Strimps *s, CharPair *p)
return -1;
 }
 
-static bool
-ignored(CharPair *p, uint8_t elm) {
-   assert(elm == 0 || elm == 1);
-   return isIgnored(p->pbytes[elm]);
-}
 
-/* Given a strimp header and a string compute the bitstring of which
- * digrams are present in the string. The strimp header is a map from
- * digram to index in the strimp.
+/* Computes the bitstring of a string s with respect to the strimp r.
  *
- * This should probably be inlined.
  */
 static uint64_t
 STRMPmakebitstring(const str s, Strimps *r)
@@ -197,8 +209,15 @@ STRMPmakebitstring(const str s, Strimps 
return ret;
 }
 
-/* Given a histogram find the indices of the STRIMP_HEADER_SIZE largest
- * counts.
+#define SWAP(_a, _i, _j, TPE)  \
+   do {\
+   TPE _t = ((TPE *)_a)[_i];   \
+   ((TPE *) _a)[_i] = ((TPE *) _a)[_j];\
+   ((TPE *) _a)[_j] = _t;  \
+   } while(0)
+
+/* Finds the indices of the STRIMP_HEADER_SIZE largest counts in a given
+ * a histogram. It returns them in the cp pointer.
  *
  * We make one scan of histogram and every time we find a count that is
  * greater than the current minimum of the 

MonetDB: string_imprints - Fix setoptimizer test

2021-11-10 Thread Panagiotis Koutsourakis
Changeset: 7a05829b9426 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7a05829b9426
Modified Files:
monetdb5/optimizer/opt_pipes.c
Branch: string_imprints
Log Message:

Fix setoptimizer test


diffs (57 lines):

diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -51,8 +51,10 @@ static struct PIPELINES {
 "optimizer.generator();"
 //"optimizer.candidates();" only for decoration in explain
 //"optimizer.mask();"
-"optimizer.garbageCollector();",
+"optimizer.garbageCollector();"
+"optimizer.profiler();",
 "stable", NULL, 1},
+#ifdef USE_STRIMPS_OPTIMIZERS
{"minimal_strimps_pipe",
 "optimizer.inline();"
 "optimizer.remap();"
@@ -63,13 +65,12 @@ static struct PIPELINES {
 "optimizer.multiplex();"
 "optimizer.strimps();"
 "optimizer.generator();"
-"optimizer.profiler();"
-"optimizer.profiler();"
 //"optimizer.candidates();" only for decoration in explain
 //"optimizer.mask();"
 "optimizer.garbageCollector();"
 "optimizer.profiler();",
 "stable", NULL, 1},
+#endif  // USE_STRIMPS_OPTIMIZERS
{"minimal_fast",
 "optimizer.minimalfast()",
 "stable", NULL, 1},
@@ -116,6 +117,7 @@ static struct PIPELINES {
 "optimizer.garbageCollector();"
 "optimizer.profiler();",
 "stable", NULL, 1},
+#ifdef USE_STRIMPS_OPTIMIZERS
{"strimps_pipe",
 "optimizer.inline();"
 "optimizer.remap();"
@@ -142,15 +144,16 @@ static struct PIPELINES {
 "optimizer.multiplex();"
 "optimizer.strimps();"
 "optimizer.generator();"
-"optimizer.profiler();"
 "optimizer.candidates();"
 //"optimizer.mask();"
 "optimizer.deadcode();"
 "optimizer.postfix();"
 //  "optimizer.jit();" awaiting the new batcalc api
 "optimizer.wlc();"
-"optimizer.garbageCollector();",
+"optimizer.garbageCollector();"
+"optimizer.profiler();",
 "stable", NULL, 1},
+#endif  // USE_STRIMPS_OPTIMIZERS
{"default_fast",
 "optimizer.defaultfast()",
 "stable", NULL, 1},
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: string_imprints - Merge with default

2021-11-10 Thread Panagiotis Koutsourakis
Changeset: 3ab7e51d3112 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3ab7e51d3112
Modified Files:
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/sql.c
Branch: string_imprints
Log Message:

Merge with default


diffs (truncated from 422 to 300 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3326,14 +3326,13 @@ BATgroupsize(BAT *b, BAT *g, BAT *e, BAT
i = canditer_next(ci) - hseq;   \
if (!skip_nils ||   \
!is_##TYPE##_nil(vals[i])) {\
-   oids[i] = i + hseq; \
+   oids[gid++] = i + hseq; \
nils--; \
}   \
}   \
TIMEOUT_CHECK(timeoffset,   \
  TIMEOUT_HANDLER(BUN_NONE));   \
} else {\
-   gid = 0; /* in case gids == NULL */ \
TIMEOUT_LOOP(ncand, timeoffset) {   \
i = canditer_next(ci) - hseq;   \
if (gids == NULL || \
@@ -3365,7 +3364,7 @@ do_groupmin(oid *restrict oids, BATiter 
oid min, oid max, struct canditer *restrict ci, BUN ncand,
bool skip_nils, bool gdense)
 {
-   oid gid;
+   oid gid = 0;
BUN i, nils;
int t;
const void *nil;
@@ -3423,15 +3422,16 @@ do_groupmin(oid *restrict oids, BATiter 
while (ncand > 0) {
ncand--;
i = canditer_next(ci);
-   oids[i - hseq] = i;
+   oids[gid++] = i;
nils--;
}
} else {
while (ncand > 0) {
ncand--;
i = canditer_next(ci);
-   if (is_oid_nil(oids[i - hseq])) {
-   oids[i - hseq] = i;
+   gid = gids[i - hseq] - min;
+   if (is_oid_nil(oids[gid])) {
+   oids[gid] = i;
nils--;
}
}
@@ -3447,14 +3447,13 @@ do_groupmin(oid *restrict oids, BATiter 
i = canditer_next(ci) - hseq;
if (!skip_nils ||
(*atomcmp)(BUNtail(*bi, i), nil) != 0) {
-   oids[i] = i + hseq;
+   oids[gid++] = i + hseq;
nils--;
}
}
TIMEOUT_CHECK(timeoffset,
  TIMEOUT_HANDLER(BUN_NONE));
} else {
-   gid = 0; /* in case gids == NULL */
TIMEOUT_LOOP(ncand, timeoffset) {
i = canditer_next(ci) - hseq;
if (gids == NULL ||
@@ -3495,7 +3494,7 @@ do_groupmax(oid *restrict oids, BATiter 
oid min, oid max, struct canditer *restrict ci, BUN ncand,
bool skip_nils, bool gdense)
 {
-   oid gid;
+   oid gid = 0;
BUN i, nils;
int t;
const void *nil;
@@ -3553,16 +3552,17 @@ do_groupmax(oid *restrict oids, BATiter 
while (ncand > 0) {
ncand--;
i = canditer_next(ci);
-   oids[i - hseq] = i;
+   oids[gid++] = i;
nils--;
}
} else {
while (ncand > 0) {
ncand--;
i = canditer_next(ci);
-   if (is_oid_nil(oids[i - hseq]))
+   gid = gids[i - hseq] - min;
+   if (is_oid_nil(oids[gid]))
nils--;
-   oids[i - 

MonetDB: default - Use more const

2021-11-10 Thread Pedro Ferreira
Changeset: 52235158eb64 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/52235158eb64
Modified Files:
gdk/gdk_unique.c
Branch: default
Log Message:

Use more const


diffs (96 lines):

diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -31,7 +31,7 @@ BATunique(BAT *b, BAT *s)
const char *vals;
const char *vars;
int width;
-   oid i, o;
+   oid i, o, hseq;
const char *nme;
Hash *hs = NULL;
BUN hb;
@@ -102,6 +102,7 @@ BATunique(BAT *b, BAT *s)
vars = NULL;
width = bi.width;
cmp = ATOMcompare(bi.type);
+   hseq = b->hseqbase;
 
if (ATOMbasetype(bi.type) == TYPE_bte ||
(bi.width == 1 &&
@@ -114,7 +115,7 @@ BATunique(BAT *b, BAT *s)
memset(seen, 0, sizeof(seen));
TIMEOUT_LOOP_IDX(i, cnt, timeoffset) {
o = canditer_next();
-   val = ((const uint8_t *) vals)[o - b->hseqbase];
+   val = ((const uint8_t *) vals)[o - hseq];
uint32_t m = UINT32_C(1) << (val & 0x1F);
if (!(seen[val >> 5] & m)) {
seen[val >> 5] |= m;
@@ -140,7 +141,7 @@ BATunique(BAT *b, BAT *s)
memset(seen, 0, sizeof(seen));
TIMEOUT_LOOP_IDX(i, cnt, timeoffset) {
o = canditer_next();
-   val = ((const uint16_t *) vals)[o - b->hseqbase];
+   val = ((const uint16_t *) vals)[o - hseq];
uint32_t m = UINT32_C(1) << (val & 0x1F);
if (!(seen[val >> 5] & m)) {
seen[val >> 5] |= m;
@@ -160,7 +161,7 @@ BATunique(BAT *b, BAT *s)
algomsg = "unique: sorted";
TIMEOUT_LOOP_IDX(i, cnt, timeoffset) {
o = canditer_next();
-   v = VALUE(o - b->hseqbase);
+   v = VALUE(o - hseq);
if (prev == NULL || (*cmp)(v, prev) != 0) {
if (bunfastappTYPE(oid, bn, ) != GDK_SUCCEED)
goto bunins_failed;
@@ -174,13 +175,11 @@ BATunique(BAT *b, BAT *s)
cnt == bi.count &&
BAThash(b) == GDK_SUCCEED)) {
BUN lo = 0;
-   oid seq;
 
/* we already have a hash table on b, or b is
 * persistent and we could create a hash table, or b
 * is a view on a bat that already has a hash table */
algomsg = "unique: existing hash";
-   seq = b->hseqbase;
MT_rwlock_rdlock(>thashlock);
hs = b->thash;
if (hs == NULL) {
@@ -191,14 +190,14 @@ BATunique(BAT *b, BAT *s)
BUN p;
 
o = canditer_next();
-   p = o - seq;
+   p = o - hseq;
v = VALUE(p);
for (hb = HASHgetlink(hs, p + lo);
 hb != BUN_NONE && hb >= lo;
 hb = HASHgetlink(hs, hb)) {
assert(hb < p + lo);
if (cmp(v, BUNtail(bi, hb)) == 0 &&
-   canditer_contains(, hb - lo + seq)) {
+   canditer_contains(, hb - lo + hseq)) {
/* we've seen this value
 * before */
break;
@@ -251,7 +250,7 @@ BATunique(BAT *b, BAT *s)
}
TIMEOUT_LOOP_IDX(i, cnt, timeoffset) {
o = canditer_next();
-   v = VALUE(o - b->hseqbase);
+   v = VALUE(o - hseq);
prb = HASHprobe(hs, v);
for (hb = HASHget(hs, prb);
 hb != BUN_NONE;
@@ -260,7 +259,7 @@ BATunique(BAT *b, BAT *s)
break;
}
if (hb == BUN_NONE) {
-   p = o - b->hseqbase;
+   p = o - hseq;
if (bunfastappTYPE(oid, bn, ) != GDK_SUCCEED)
goto bunins_failed;
/* enter into hash table */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Don't use dangling pointers from vheaps where...

2021-11-10 Thread Pedro Ferreira
Changeset: 04d64ec0826a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/04d64ec0826a
Modified Files:
gdk/gdk_string.c
Branch: default
Log Message:

Don't use dangling pointers from vheaps where is not safe


diffs (106 lines):

diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -1078,28 +1078,39 @@ BATstr_group_concat(ValPtr res, BAT *b, 
 {
BUN ncand;
struct canditer ci;
+   gdk_return r = GDK_SUCCEED;
+   bool free_nseparator = false;
+   char *nseparator = (char *)separator;
 
(void) abort_on_error;
-   assert((separator && !sep) || (!separator && sep)); /* only one of them 
must be set */
+   assert((nseparator && !sep) || (!nseparator && sep)); /* only one of 
them must be set */
res->vtype = TYPE_str;
 
ncand = canditer_init(, b, s);
 
if (sep && BATcount(sep) == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
-   separator = BUNtvar(bi, 0);
+   nseparator = GDKstrdup(BUNtvar(bi, 0));
bat_iterator_end();
+   if (!nseparator)
+   return GDK_FAIL;
+   free_nseparator = true;
sep = NULL;
}
 
-   if (ncand == 0 || (separator && strNil(separator))) {
+   if (ncand == 0 || (nseparator && strNil(nseparator))) {
if (VALinit(res, TYPE_str, nil_if_empty ? str_nil : "") == NULL)
-   return GDK_FAIL;
-   return GDK_SUCCEED;
+   r = GDK_FAIL;
+   if (free_nseparator)
+   GDKfree(nseparator);
+   return r;
}
 
-   return concat_strings(NULL, res, b, b->hseqbase, 1, , ncand, NULL, 
0, 0,
- skip_nils, sep, separator, NULL);
+   r = concat_strings(NULL, res, b, b->hseqbase, 1, , ncand, NULL, 0, 0,
+ skip_nils, sep, nseparator, NULL);
+   if (free_nseparator)
+   GDKfree(nseparator);
+   return r;
 }
 
 BAT *
@@ -1112,8 +1123,10 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
struct canditer ci;
const char *err;
gdk_return res;
+   bool free_nseparator = false;
+   char *nseparator = (char *)separator;
 
-   assert((separator && !sep) || (!separator && sep)); /* only one of them 
must be set */
+   assert((nseparator && !sep) || (!nseparator && sep)); /* only one of 
them must be set */
(void) skip_nils;
 
if ((err = BATgroupaggrinit(b, g, e, s, , , ,
@@ -1128,29 +1141,37 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
 
if (sep && BATcount(sep) == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
-   separator = BUNtvar(bi, 0);
+   nseparator = GDKstrdup(BUNtvar(bi, 0));
bat_iterator_end();
+   if (!nseparator)
+   return NULL;
+   free_nseparator = true;
sep = NULL;
}
 
-   if (ncand == 0 || ngrp == 0 || (separator && strNil(separator))) {
+   if (ncand == 0 || ngrp == 0 || (nseparator && strNil(nseparator))) {
/* trivial: no strings to concat, so return bat
 * aligned with g with nil in the tail */
-   return BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, 
ngrp, TRANSIENT);
+   bn = BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, ngrp, 
TRANSIENT);
+   goto done;
}
 
if (BATtdense(g) || (g->tkey && g->tnonil)) {
/* trivial: singleton groups, so all results are equal
 * to the inputs (but possibly a different type) */
-   return BATconvert(b, s, TYPE_str, abort_on_error, 0, 0, 0);
+   bn = BATconvert(b, s, TYPE_str, abort_on_error, 0, 0, 0);
+   goto done;
}
 
res = concat_strings(, NULL, b, b->hseqbase, ngrp, , ncand,
 (const oid *) Tloc(g, 0), min, max, skip_nils, sep,
-separator, );
+nseparator, );
if (res != GDK_SUCCEED)
-   return NULL;
+   bn = NULL;
 
+done:
+   if (free_nseparator)
+   GDKfree(nseparator);
return bn;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: pushcands - Merged with default

2021-11-10 Thread Pedro Ferreira
Changeset: 6b937379c58e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6b937379c58e
Modified Files:
sql/backends/monet5/for.c
Branch: pushcands
Log Message:

Merged with default


diffs (truncated from 432 to 300 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
@@ -237,7 +237,7 @@ DICTcompress_col(Client cntxt, MalBlkPtr
if (!c)
throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
unknown", sname, tname, cname);
if (c->storage_type)
-   throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
allready compressed", sname, tname, cname);
+   throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
already compressed", sname, tname, cname);
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o, *u;
@@ -1083,7 +1083,7 @@ DICTprepare4append_vals(void **noffsets,
}
if (!f) {
if (BATcount(dict) >= (64*1024)-1) {
-   assert(0);
+   assert(0);
GDKfree(n);
return -2;
} else {
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -42,7 +42,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
tt != TYPE_hge &&
 #endif
tt != TYPE_lng && tt != TYPE_int)
-   throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress: 
invalid type");
+   throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress: 
invalid offset type");
 
BAT *o = BATdescriptor(O), *b = NULL;
if (!o) {
@@ -76,7 +76,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
}
} else {
bat_destroy(o);
-   throw(SQL, "for.decompress", SQLSTATE(3F000) "unknown offset 
type");
+   throw(SQL, "for.decompress", SQLSTATE(3F000) "offset type %s 
not yet implemented", ATOMname(tt));
}
bat_destroy(o);
BATsetcount(b, cnt);
@@ -109,14 +109,7 @@ FORcompress_intern(char **comp_min_val, 
}
 
BUN cnt = BATcount(b);
-#ifdef HAVE_HGE
-   if (b->ttype == TYPE_hge) {
-   GDKfree(mn);
-   GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
implement type hge");
-   } else
-#endif
-   if (b->ttype == TYPE_lng) {
+   if (tt == TYPE_lng) {
lng min_val = *(lng*)mn;
lng max_val = *(lng*)mx;
GDKfree(mn);
@@ -141,14 +134,10 @@ FORcompress_intern(char **comp_min_val, 
ov[i] = (sht)(iv[i] - min_val);
}
snprintf(buf, 64, "FOR-" LLFMT, min_val);
-   } else if (b->ttype == TYPE_int) {
-   GDKfree(mn);
-   GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
implement type int");
} else {
GDKfree(mn);
GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type 
not yet implemented");
+   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type 
%s not yet implemented", ATOMname(tt));
}
if (!(*comp_min_val = GDKstrdup(buf))) {
bat_destroy(o);
@@ -199,7 +188,7 @@ FORcompress_col(Client cntxt, MalBlkPtr 
if (c->null)
throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: for 
'for' compression column's cannot have NULL's");
if (c->storage_type)
-   throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
allready compressed", sname, tname, cname);
+   throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
already compressed", sname, tname, cname);
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o = NULL;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1720,7 +1720,7 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
if (!r)
return 0;
 
-   if (rel_is_ref(r) && refs_find_rel(refs, r)) /* allready handled */
+   if (rel_is_ref(r) && refs_find_rel(refs, r)) /* already handled */
return 0;
switch (r->op) {
case op_basetable: {
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1080,7 +1080,7 @@ static BAT *
 dict_append_bat(column_storage *cs, BAT *i)
 {
BAT *newoffsets = NULL;
-   BAT *u = temp_descriptor(cs->ebid);
+ 

MonetDB: pushcands - Compute function module and implementation ...

2021-11-10 Thread Pedro Ferreira
Changeset: 2e02c19fcb8b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2e02c19fcb8b
Modified Files:
sql/backends/monet5/sql_statement.c
Branch: pushcands
Log Message:

Compute function module and implementation after instantiation. Simplify cases 
to push cands


diffs (31 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1357,12 +1357,14 @@ stmt_genselect(backend *be, stmt *lops, 
 {
MalBlkPtr mb = be->mb;
InstrPtr q = NULL;
-   const char *mod = sql_func_mod(f->func), *fimp = sql_func_imp(f->func);
-   int k, pushed = 0, push_cands = (f->func->type == F_FUNC || 
f->func->type == F_FILT) &&
-   (f->func->lang == FUNC_LANG_INT || f->func->lang == 
FUNC_LANG_MAL) && strcmp(mod, "algebra") == 0;
+   const char *mod, *fimp;
+   int k, pushed = 0, push_cands;
 
if (backend_create_subfunc(be, f, NULL) < 0)
return NULL;
+   mod = sql_func_mod(f->func);
+   fimp = sql_func_imp(f->func);
+   push_cands = strcmp(mod, "algebra") == 0;
 
if (!push_cands && sel) {
for (node *n = lops->op4.lval->h; n; n = n->next) {
@@ -3384,8 +3386,7 @@ stmt_Nop(backend *be, stmt *ops, stmt *s
return NULL;
mod = sql_func_mod(f->func);
fimp = convertMultiplexFcn(sql_func_imp(f->func));
-   push_cands = (f->func->type == F_FUNC || f->func->type == F_FILT) && 
(f->func->lang == FUNC_LANG_INT || f->func->lang == FUNC_LANG_MAL) &&
-   ((strcmp(mod, "calc") == 0 && strcmp(fimp, "ifthenelse") != 0) 
|| strcmp(mod, "mmath") == 0 || strcmp(mod, "mtime") == 0 || strcmp(mod, 
"mkey") == 0 ||
+   push_cands = ((strcmp(mod, "calc") == 0 && strcmp(fimp, "ifthenelse") 
!= 0) || strcmp(mod, "mmath") == 0 || strcmp(mod, "mtime") == 0 || strcmp(mod, 
"mkey") == 0 ||
(strcmp(mod, "str") == 0 && batstr_func_has_candidates(fimp)) 
|| strcmp(mod, "algebra") == 0 || strcmp(mod, "blob") == 0);
 
if (list_length(ops->op4.lval)) {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


monetdb-java: default - Resolve Xlint warning

2021-11-10 Thread Martin van Dinther
Changeset: 9f658a97666f for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/9f658a97666f
Modified Files:
tests/TestRunner.java
Branch: default
Log Message:

Resolve Xlint warning
tests/TestRunner.java:328: warning: [serial] serializable class Failure has no 
definition of serialVersionUID
static class Failure extends Exception {
   ^
1 warning

Also added some final keywords


diffs (209 lines):

diff --git a/tests/TestRunner.java b/tests/TestRunner.java
--- a/tests/TestRunner.java
+++ b/tests/TestRunner.java
@@ -25,6 +25,7 @@ public class TestRunner {
public static final int VERBOSITY_NONE = 0;
public static final int VERBOSITY_ON = 1;
public static final int VERBOSITY_SHOW_ALL = 2;
+
protected final String jdbcUrl;
private final int verbosity;
protected String currentTestName;
@@ -33,7 +34,7 @@ public class TestRunner {
protected Statement stmt;
private StringWriter outBuffer;
protected PrintWriter out;
-   private Path tmpDir = null;
+   private Path tmpDir;
 
public TestRunner(String jdbcUrl, int verbosity, boolean 
watchDogEnabled) {
this.jdbcUrl = jdbcUrl;
@@ -48,7 +49,7 @@ public class TestRunner {
protected int runTests(String testPrefix) throws SQLException {
int testCount = 0;
int skippedCount = 0;
-   ArrayList failures = new ArrayList<>();
+   final ArrayList failures = new ArrayList<>();
 
watchDog.stop();
try {
@@ -66,13 +67,13 @@ public class TestRunner {
}
testCount++;
// so user can add $ to force full match
-   String augmentedMethodName = method.getName() + 
"$";
+   final String augmentedMethodName = 
method.getName() + "$";
if 
(!augmentedMethodName.startsWith(methodPrefix)) {
skippedCount++;
continue;
}
-   String testName = 
method.getName().substring(initialPrefix.length());
-   boolean succeeded = runTest(testName, method);
+   final String testName = 
method.getName().substring(initialPrefix.length());
+   final boolean succeeded = runTest(testName, 
method);
if (!succeeded)
failures.add(testName);
}
@@ -85,7 +86,7 @@ public class TestRunner {
return 1;
}
 
-   int failureCount = failures.size();
+   final int failureCount = failures.size();
if (failureCount > 0) {
System.out.println();
System.out.printf("Ran %d out of %d %s tests, %d 
failed: %s%n",
@@ -102,14 +103,14 @@ public class TestRunner {
return failureCount;
}
 
-   private synchronized boolean runTest(String testName, Method method) 
throws SQLException {
+   private synchronized boolean runTest(final String testName, final 
Method method) throws SQLException {
currentTestName = testName;
watchDog.setContext("test " + testName);
watchDog.setDuration(3_000);
outBuffer = new StringWriter();
out = new PrintWriter(outBuffer);
 
-   Connection genericConnection = 
DriverManager.getConnection(jdbcUrl);
+   final Connection genericConnection = 
DriverManager.getConnection(jdbcUrl);
conn = genericConnection.unwrap(MonetConnection.class);
stmt = conn.createStatement();
 
@@ -171,13 +172,13 @@ public class TestRunner {
return !failed;
}
 
-   private void dumpOutput(String testName) {
-   String output = outBuffer.getBuffer().toString();
+   private void dumpOutput(final String testName) {
+   final String output = outBuffer.getBuffer().toString();
if (output.isEmpty()) {
System.out.println("(Test did not produce any output)");
} else {
System.out.println("-- Accumulated output for test 
" + testName + ":");
-   boolean terminated = 
output.endsWith(System.lineSeparator());
+   final boolean terminated = 
output.endsWith(System.lineSeparator());
if (terminated) {
System.out.print(output);
} else {
@@ -208,8 +209,7 @@ public class TestRunner {
try {
watchDog.start();
out.println("EXECUTE: " 

MonetDB: sequences_7184 - merge with default

2021-11-10 Thread Niels Nes
Changeset: 0b776181433e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0b776181433e
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/server/rel_optimizer.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: sequences_7184
Log Message:

merge with default


diffs (truncated from 65435 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
@@ -6605,7 +6605,7 @@
 [ "batstr","unicodeAt","pattern batstr.unicodeAt(X_0:bat[:str], 
X_1:int, X_2:bat[:oid]):bat[:int] ",   "STRbatWChrAtcst;", "get a unicode 
character (as an int) from a string position."   ]
 [ "battxtsim", "similarity",   "command battxtsim.similarity(X_0:bat[:str], 
X_1:bat[:str]):bat[:dbl] ","fstrcmp0_impl_bulk;",  "Normalized edit 
distance between two strings"  ]
 [ "batuuid",   "isaUUID",  "command 
batuuid.isaUUID(X_0:bat[:str]):bat[:bit] ","UUIDisaUUID_bulk;","Test a 
string for a UUID format"   ]
-[ "batuuid",   "new",  "unsafe command batuuid.new(X_0:bat[:int]):bat[:uuid] 
","UUIDgenerateUuidInt_bulk;","Generate a new uuid (dummy version 
for side effect free multiplex loop)"   ]
+[ "batuuid",   "new",  "command batuuid.new(X_0:bat[:int]):bat[:uuid] ",   
"UUIDgenerateUuidInt_bulk;","Generate a new uuid (dummy version for side 
effect free multiplex loop)"   ]
 [ "batxml","attribute","command batxml.attribute(X_0:str, 
X_1:bat[:str]):bat[:xml] ",  "BATXMLattribute;", "Construct an attribute 
value pair."]
 [ "batxml","comment",  "command 
batxml.comment(X_0:bat[:str]):bat[:xml] ", "BATXMLcomment;",   "Create 
an XML comment element."]
 [ "batxml","concat",   "command batxml.concat(X_0:bat[:xml], 
X_1:bat[:xml]):bat[:xml] ",   "BATXMLconcat;","Concatenate the XML 
values."   ]
@@ -8369,10 +8369,10 @@
 [ "capi",  "eval_aggr","pattern capi.eval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ","CUDFevalAggr;","grouped 
aggregates through CUDF"   ]
 [ "capi",  "prelude",  "command capi.prelude():void ", "CUDFprelude;", 
""  ]
 [ "capi",  "subeval_aggr", "pattern capi.subeval_aggr(X_0:ptr, X_1:bit, 
X_2:str, X_3:any...):any... ", "CUDFevalAggr;","grouped aggregates 
through CUDF"   ]
-[ "clients",   "addUser",  "pattern clients.addUser(X_0:str, X_1:str):oid 
",   "CLTaddUser;",  "Allow user with password access to the given 
scenarios"]
+[ "clients",   "addUser",  "unsafe pattern clients.addUser(X_0:str, 
X_1:str):oid ","CLTaddUser;",  "Allow user with password access to the 
given scenarios"]
 [ "clients",   "backendsum",   "command clients.backendsum(X_0:str):str ", 
"CLTbackendsum;",   "Return hex string representation of the currently used 
hash of the given string"   ]
-[ "clients",   "changePassword",   "pattern 
clients.changePassword(X_0:str, X_1:str):void ",   "CLTchangePassword;",   
"Change the password for the current user"  ]
-[ "clients",   "changeUsername",   "pattern 
clients.changeUsername(X_0:str, X_1:str):void ",   "CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
+[ "clients",   "changePassword",   "unsafe pattern 
clients.changePassword(X_0:str, X_1:str):void ","CLTchangePassword;",   
"Change the password for the current user"  ]
+[ "clients",   "changeUsername",   "unsafe pattern 
clients.changeUsername(X_0:str, X_1:str):void ","CLTchangeUsername;",   
"Change the username of the user into the new string"   ]
 [ "clients",   "checkPermission",  "pattern 
clients.checkPermission(X_0:str, X_1:str):void ",  "CLTcheckPermission;",  
"Check permission for a user, requires hashed password (backendsum)"]
 [ "clients",   "current_sessionid","pattern 
clients.current_sessionid():int ", "CLTgetSessionID;", "return current 
session ID" ]
 [ "clients",   "getId","pattern clients.getId():int ", 
"CLTgetClientId;",  "Return a number that uniquely represents the current 
client."  ]
@@ -8384,42 +8384,42 @@
 [ "clients",   "getUsers", "pattern clients.getUsers() (X_0:bat[:oid], 
X_1:bat[:str]) ",   "CLTgetUsers;", "return a BAT with user id and one with 
name available in the system"   ]
 [ "clients",   "getprofile",   "pattern clients.getprofile() (X_0:str, 
X_1:int, X_2:int, X_3:int, X_4:int) ",  "CLTgetProfile;",   "Retrieve the 
profile settings for a client"]
 [ "clients",   "md5sum",   "command clients.md5sum(X_0:str):str ", 
"CLTmd5sum;",   "Return hex 

MonetDB: default - Return the right error constants

2021-11-10 Thread Pedro Ferreira
Changeset: 68ce13f06d1d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/68ce13f06d1d
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Return the right error constants


diffs (21 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -3186,7 +3186,7 @@ clear_col(sql_trans *tr, sql_column *c, 
sql_delta *delta, *odelta = ATOMIC_PTR_GET(>data);
 
if ((delta = bind_col_data(tr, c, renew?_conflict:NULL)) == NULL)
-   return update_conflict ? LOG_CONFLICT : LOG_ERR;
+   return update_conflict ? BUN_NONE - 1 : BUN_NONE;
if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t)) 
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, >base, delta, _gc_col, _update_col, 
isTempTable(c->t)?NULL:_update_col);
if (delta)
@@ -3203,7 +3203,7 @@ clear_idx(sql_trans *tr, sql_idx *i, boo
if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns) 
<= 1) || !idx_has_column(i->type))
return 0;
if ((delta = bind_idx_data(tr, i, renew?_conflict:NULL)) == NULL)
-   return update_conflict ? LOG_CONFLICT : LOG_ERR;
+   return update_conflict ? BUN_NONE - 1 : BUN_NONE;
if ((!inTransaction(tr, i->t) && (odelta != delta || isTempTable(i->t)) 
&& isGlobal(i->t)) || (!isNew(i->t) && isLocalTemp(i->t)))
trans_add(tr, >base, delta, _gc_idx, _update_idx, 
isTempTable(i->t)?NULL:_update_idx);
if (delta)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Throw errors to the upper layers

2021-11-10 Thread Pedro Ferreira
Changeset: 52f707d30ca8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/52f707d30ca8
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Throw errors to the upper layers


diffs (55 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -3214,7 +3214,8 @@ clear_idx(sql_trans *tr, sql_idx *i, boo
 static int
 clear_storage(sql_trans *tr, sql_table *t, storage *s)
 {
-   clear_cs(tr, >cs, true, isTempTable(t));
+   if (clear_cs(tr, >cs, true, isTempTable(t)) == BUN_NONE)
+   return LOG_ERR;
s->cs.cleared = 1;
if (s->segs)
destroy_segments(s->segs);
@@ -3533,13 +3534,15 @@ commit_update_col_( sql_trans *tr, sql_c
if (c->t->commit_action == CA_COMMIT || 
c->t->commit_action == CA_PRESERVE) {
if (!delta->cs.merged)
ok = merge_delta(delta);
-   } else /* CA_DELETE as CA_DROP's are gone already (or 
for globals are equal to a CA_DELETE) */
-   clear_cs(tr, >cs, true, 
isTempTable(c->t));
+   } else if (clear_cs(tr, >cs, true, 
isTempTable(c->t)) == BUN_NONE) {
+   ok = LOG_ERR; /* CA_DELETE as CA_DROP's are 
gone already (or for globals are equal to a CA_DELETE) */
+   }
} else { /* rollback */
-   if (c->t->commit_action == CA_COMMIT/* || 
c->t->commit_action == CA_PRESERVE*/)
+   if (c->t->commit_action == CA_COMMIT/* || 
c->t->commit_action == CA_PRESERVE*/) {
ok = rollback_delta(tr, delta, 
c->type.type->localtype);
-   else /* CA_DELETE as CA_DROP's are gone already (or for 
globals are equal to a CA_DELETE) */
-   clear_cs(tr, >cs, true, 
isTempTable(c->t));
+   } else if (clear_cs(tr, >cs, true, 
isTempTable(c->t)) == BUN_NONE) {
+   ok = LOG_ERR; /* CA_DELETE as CA_DROP's are 
gone already (or for globals are equal to a CA_DELETE) */
+   }
}
if (!tr->parent)
c->t->base.new = c->base.new = 0;
@@ -3643,13 +3646,15 @@ commit_update_idx_( sql_trans *tr, sql_i
if (i->t->commit_action == CA_COMMIT || 
i->t->commit_action == CA_PRESERVE) {
if (!delta->cs.merged)
ok = merge_delta(delta);
-   } else /* CA_DELETE as CA_DROP's are gone already */
-   clear_cs(tr, >cs, true, 
isTempTable(i->t));
+   } else if (clear_cs(tr, >cs, true, 
isTempTable(i->t)) == BUN_NONE) {
+   ok = LOG_ERR; /* CA_DELETE as CA_DROP's are 
gone already */
+   }
} else { /* rollback */
-   if (i->t->commit_action == CA_COMMIT/* || 
i->t->commit_action == CA_PRESERVE*/)
+   if (i->t->commit_action == CA_COMMIT/* || 
i->t->commit_action == CA_PRESERVE*/) {
ok = rollback_delta(tr, delta, type);
-   else /* CA_DELETE as CA_DROP's are gone already */
-   clear_cs(tr, >cs, true, 
isTempTable(i->t));
+   } else if (clear_cs(tr, >cs, true, 
isTempTable(i->t)) == BUN_NONE) {
+   ok = LOG_ERR; /* CA_DELETE as CA_DROP's are 
gone already */
+   }
}
if (!tr->parent)
i->t->base.new = i->base.new = 0;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Fixed more bat reference leaks

2021-11-10 Thread Pedro Ferreira
Changeset: 7a9823f0eba8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7a9823f0eba8
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Fixed more bat reference leaks


diffs (78 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1840,11 +1840,14 @@ delta_append_bat(sql_trans *tr, sql_delt
 
lock_column(tr->store, id);
if (bat->cs.st == ST_DICT) {
-   oi = i = dict_append_bat(>cs, i);
-   if (!oi) {
+   BAT *ni = dict_append_bat(>cs, i);
+   if (oi != i) /* oi and i will be replaced, so destroy possible 
unmask reference */
+   bat_destroy(oi);
+   if (!ni) {
unlock_column(tr->store, id);
return LOG_ERR;
}
+   oi = i = ni;
}
 
b = temp_descriptor(bat->cs.bid);
@@ -2965,7 +2968,7 @@ log_destroy_delta(sql_trans *tr, sql_del
sqlstore *store = tr->store;
if (!GDKinmemory(0) && b && b->cs.bid)
ok = log_bat_transient(store->logger, id);
-   if (!GDKinmemory(0) && b && b->cs.ebid)
+   if (ok == GDK_SUCCEED && !GDKinmemory(0) && b && b->cs.ebid)
ok = log_bat_transient(store->logger, -id);
return ok == GDK_SUCCEED ? LOG_OK : LOG_ERR;
 }
@@ -3136,21 +3139,31 @@ clear_cs(sql_trans *tr, column_storage *
if (b) {
sz += BATcount(b);
if (cs->st == ST_DICT) {
-   bat bid = cs->ebid;
-   cs->ebid = temp_copy(bid, true, temp); /* 
create empty copy */
-   temp_destroy(bid);
-
-   bid = cs->bid;
+   bat nebid = temp_copy(cs->ebid, true, temp); /* 
create empty copy */
BAT *n = COLnew(0, TYPE_bte, 0, PERSISTENT);
+
+   if (nebid == BID_NIL || !n) {
+   temp_destroy(nebid);
+   bat_destroy(n);
+   return BUN_NONE;
+   }
+   temp_destroy(cs->ebid);
+   cs->ebid = nebid;
if (!temp)
bat_set_access(n, BAT_READ);
+   temp_destroy(cs->bid);
cs->bid = temp_create(n); /* create empty copy 
*/
bat_destroy(n);
} else {
-   bat bid = cs->bid;
-   cs->bid = temp_copy(bid, true, temp); /* create 
empty copy */
-   temp_destroy(bid);
+   bat nbid = temp_copy(cs->bid, true, temp); /* 
create empty copy */
+
+   if (nbid == BID_NIL)
+   return BUN_NONE;
+   temp_destroy(cs->bid);
+   cs->bid = nbid;
}
+   } else {
+   return BUN_NONE;
}
}
if (cs->uibid) {
@@ -3303,7 +3316,7 @@ tr_log_cs( sql_trans *tr, sql_table *t, 
bat_set_access(ins, BAT_READ);
ok = log_bat_persists(store->logger, ins, id);
bat_destroy(ins);
-   if (cs->ebid) {
+   if (ok == GDK_SUCCEED && cs->ebid) {
BAT *ins = temp_descriptor(cs->ebid);
if (!ins)
return LOG_ERR;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: sequences_7184 - cleanup no longer needed optimizer

2021-11-10 Thread Niels Nes
Changeset: 610fd35da5eb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/610fd35da5eb
Modified Files:
sql/server/rel_optimizer.c
Branch: sequences_7184
Log Message:

cleanup no longer needed optimizer


diffs (110 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9065,88 +9065,6 @@ merge_table_prune_and_unionize(visitor *
return nrel;
 }
 
-static bool
-_rel_flag_independent_projections(mvc *sql, sql_exp* e, list* projected_from)
-{
-   bool is_independent = false;
-
-   switch(e->type) {
-   case e_func: // I.e. f() or f(arg) or f(arg1, ..., argn)
-   {
-   is_independent = true;
-
-   sql_subfunc *f = e->f;
-   if (strcmp(sql_func_mod(f->func), "") == 0 && 
strcmp(sql_func_imp(f->func), "") == 0 && strcmp(f->func->base.name, "star") == 
0) {
-   /* the star() function call signals that the parent 
expression is a function call
-* to some window function without column expressions.
-* We do not optimize such window functions here.*/
-   is_independent = false;
-   break;
-   }
-
-   list* args = e->l;// The list of actual arguments which can be 
empty
-   if (args)
-   for (node *en = args->h; en; en = en->next) {
-   sql_exp* arg = en->data;
-   if (!_rel_flag_independent_projections(sql, 
arg, projected_from)) {
-   is_independent = false;
-   }
-   }
-   }
-   /* If this function's arguments are independent
-* of the available column expression from the project's inner 
relation,
-* we have to flag the function with the projectional 
independence. 
-* Else if this expression has an alias we add it to the 
projected_from list
-* since it might be consumed by a following expression. */
-   if (is_independent)
-   e->argument_independence = 1;
-   break;
-   case e_cmp:
-   is_independent = _rel_flag_independent_projections(sql, e->l, 
projected_from) && _rel_flag_independent_projections(sql, e->r, projected_from);
-   break;
-   case e_atom: // Any atom potentially aliased, e.g. 2 as i
-   is_independent = true;
-   break;
-   case e_convert: // E.g. CAST (i AS BIGINT)
-   is_independent = _rel_flag_independent_projections(sql, e->l, 
projected_from);
-   break;
-   case e_column:
-   is_independent = !exps_find_exp(projected_from, e);
-   break;
-   default:
-   assert(0);
-   break;
-   }
-
-   if (!is_independent && e->alias.name)
-   list_append(projected_from, exp_copy(sql, e));
-
-   return is_independent;
-}
-
-
-static bool
-rel_flag_independent_projections(mvc *sql, list* projected_to, list* 
projected_from)
-{
-   // TODO: signal changes
-   for (node *en = projected_to->h; en; en = en->next) {
-   sql_exp* e = en->data;
-   (void) _rel_flag_independent_projections(sql, e, 
projected_from);
-   }
-   return true;
-}
-
-static sql_rel *
-rel_optimize_function_calls(visitor *v, sql_rel *rel)
-{
-   if (rel->op == op_project) {
-   list *i = _rel_projections(v->sql, rel->l, NULL, 1, 1, 0);
-   rel_flag_independent_projections(v->sql, rel->exps, i);
-   list_destroy(i);
-   }
-   return rel;
-}
-
 /* rewrite merge tables into union of base tables */
 static sql_rel *
 rel_merge_table_rewrite(visitor *v, sql_rel *rel)
@@ -9593,7 +9511,7 @@ rel_optimize_unions_topdown(visitor *v, 
 static inline sql_rel *
 rel_basecount(visitor *v, sql_rel *rel)
 {
-   if (is_groupby(rel->op) && !rel_is_ref(rel) && rel->l && 
list_empty(rel->r) && 
+   if (is_groupby(rel->op) && !rel_is_ref(rel) && rel->l && 
list_empty(rel->r) &&
list_length(rel->exps) == 1 && 
exp_aggr_is_count(rel->exps->h->data)) {
sql_rel *bt = rel->l;
sql_exp *e = rel->exps->h->data;
@@ -9846,8 +9764,6 @@ optimize_rel(visitor *v, sql_rel *rel, g
if (gp->needs_mergetable_rewrite)
rel = rel_visitor_topdown(v, rel, _merge_table_rewrite);
 
-   rel = rel_visitor_topdown(v, rel, _optimize_function_calls);
-
return rel;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Don't leak physical references and small cleanup

2021-11-10 Thread Pedro Ferreira
Changeset: d26006f4b681 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d26006f4b681
Modified Files:
sql/backends/monet5/dict.c
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Don't leak physical references and small cleanup


diffs (162 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
@@ -1083,7 +1083,7 @@ DICTprepare4append_vals(void **noffsets,
}
if (!f) {
if (BATcount(dict) >= (64*1024)-1) {
-   assert(0);
+   assert(0);
GDKfree(n);
return -2;
} else {
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1080,7 +1080,7 @@ static BAT *
 dict_append_bat(column_storage *cs, BAT *i)
 {
BAT *newoffsets = NULL;
-   BAT *u = temp_descriptor(cs->ebid);
+   BAT *u = temp_descriptor(cs->ebid), *b = NULL, *n = NULL;
 
if (!u)
return NULL;
@@ -1091,16 +1091,19 @@ dict_append_bat(column_storage *cs, BAT 
/* returns new offset bat (ie to be appended), possibly with 
larger type ! */
if (BATcount(u) >= max_cnt) {
if (max_cnt == 64*1024) { /* decompress */
-   BAT *b = temp_descriptor(cs->bid);
+   if (!(b = temp_descriptor(cs->bid))) {
+   bat_destroy(u);
+   return NULL;
+   }
if (cs->ucnt) {
BAT *ui = NULL, *uv = NULL;
BAT *nb = COLcopy(b, b->ttype, true, 
TRANSIENT);
+   bat_destroy(b);
if (!nb || cs_real_update_bats(cs, , 
) != LOG_OK) {
-   bat_destroy(b);
+   bat_destroy(nb);
bat_destroy(u);
return NULL;
}
-   bat_destroy(b);
b = nb;
if (BATupdate(b, ui, uv, true) != 
GDK_SUCCEED) {
bat_destroy(ui);
@@ -,12 +1114,11 @@ dict_append_bat(column_storage *cs, BAT 
bat_destroy(ui);
bat_destroy(uv);
}
-   BAT *n = b?DICTdecompress_(b , u):NULL;
+   n = DICTdecompress_(b, u);
bat_destroy(b);
assert(newoffsets == NULL);
if (!n) {
bat_destroy(u);
-   bat_destroy(n);
return NULL;
}
if (cs->bid)
@@ -1135,18 +1137,22 @@ dict_append_bat(column_storage *cs, BAT 
cs->st = ST_DEFAULT;
cs->cleared = true;
} else {
-   BAT *b = temp_descriptor(cs->bid);
-   BAT *n = b?DICTenlarge(b, BATcount(b), 
BATcount(b) + BATcount(i)):NULL;
+   if (!(b = temp_descriptor(cs->bid))) {
+   bat_destroy(newoffsets);
+   bat_destroy(u);
+   return NULL;
+   }
+   n = DICTenlarge(b, BATcount(b), BATcount(b) + 
BATcount(i));
bat_destroy(b);
if (!n) {
bat_destroy(newoffsets);
bat_destroy(u);
-   bat_destroy(n);
return NULL;
}
if (cs->bid)
temp_destroy(cs->bid);
cs->bid = temp_create(n);
+   bat_destroy(n);
cs->cleared = true;
i = newoffsets;
}
@@ -1196,10 +1202,13 @@ cs_update_bat( sql_trans *tr, column_sto

MonetDB: sequences_7184 - cleanup of too complex seqbulk_* inter...

2021-11-10 Thread Niels Nes
Changeset: 885491efa3d2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/885491efa3d2
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/storage/sql_storage.h
sql/storage/store.c
sql/storage/store_sequence.c
sql/storage/store_sequence.h
Branch: sequences_7184
Log Message:

cleanup of too complex seqbulk_* interface

added simplified single seqbulk operator.


diffs (truncated from 705 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
@@ -6347,9 +6347,6 @@
 [ "batsql","diff", "pattern batsql.diff(X_0:bat[:bit], 
X_1:bat[:any_1]):bat[:bit] ",   "SQLdiff;", "return true if cur != prev 
row"]
 [ "batsql","diff", "pattern batsql.diff(X_0:bit, 
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev 
row"]
 [ "batsql","first_value",  "pattern batsql.first_value(X_0:bat[:any_1], 
X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:any_1] ",
"SQLfirst_value;",  "return the first value of groups"  ]
-[ "batsql","get_value","pattern batsql.get_value(X_0:bat[:str], 
X_1:bat[:str]):bat[:lng] ","mvc_bat_get_value;",   "return the current 
value of sequences" ]
-[ "batsql","get_value","pattern batsql.get_value(X_0:bat[:str], 
X_1:str):bat[:lng] ",  "mvc_bat_get_value;",   "return the current value of the 
sequence"  ]
-[ "batsql","get_value","pattern batsql.get_value(X_0:str, 
X_1:bat[:str]):bat[:lng] ",  "mvc_bat_get_value;",   "return the current value 
of sequences" ]
 [ "batsql","index","command batsql.index(X_0:bat[:str], 
X_1:bit):bat[:bte] ",  "BATSTRindex_bte;", "Return the offsets as an 
index bat"]
 [ "batsql","index","command batsql.index(X_0:bat[:str], 
X_1:bit):bat[:int] ",  "BATSTRindex_int;", "Return the offsets as an 
index bat"]
 [ "batsql","index","command batsql.index(X_0:bat[:str], 
X_1:bit):bat[:sht] ",  "BATSTRindex_sht;", "Return the offsets as an 
index bat"]
@@ -6378,9 +6375,7 @@
 [ "batsql","lead", "pattern batsql.lead(X_0:bat[:any_1], X_1:bat[:any], 
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ",  "SQLlead;", 
"return the value in the next 'l' row in the partition or 'd' if non existent"  
]
 [ "batsql","max",  "pattern batsql.max(X_0:bat[:any_1], X_1:any, X_2:any, 
X_3:int, X_4:any, X_5:any):bat[:any_1] ","SQLmax;",  "return the 
maximum of groups"  ]
 [ "batsql","min",  "pattern batsql.min(X_0:bat[:any_1], X_1:any, X_2:any, 
X_3:int, X_4:any, X_5:any):bat[:any_1] ","SQLmin;",  "return the 
minimum of groups"  ]
-[ "batsql","next_value",   "pattern batsql.next_value(X_0:bat[:str], 
X_1:bat[:str]):bat[:lng] ",   "mvc_bat_next_value;",  "return the next value of 
sequences"]
-[ "batsql","next_value",   "pattern batsql.next_value(X_0:bat[:str], 
X_1:str):bat[:lng] ", "mvc_bat_next_value;",  "return the next value of the 
sequence" ]
-[ "batsql","next_value",   "pattern batsql.next_value(X_0:str, 
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;",  "return the next value of 
sequences"]
+[ "batsql","next_value",   "pattern batsql.next_value(X_0:lng, X_1:str, 
X_2:str):bat[:lng] ",  "mvc_next_value_bulk;", "return the next value of 
the sequence" 
 [ "batsql","nth_value","pattern batsql.nth_value(X_0:any_1, 
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ", 
"SQLnth_value;","return the nth value of each group"]
 [ "batsql","nth_value","pattern batsql.nth_value(X_0:bat[:any_1], 
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",   
"SQLnth_value;","return the nth value of each group"]
 [ "batsql","nth_value","pattern batsql.nth_value(X_0:bat[:any_1], 
X_1:lng, X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ", 
"SQLnth_value;","return the nth value of each group"]
@@ -6397,13 +6392,6 @@
 [ "batsql","prod", "pattern batsql.prod(X_0:bat[:lng], X_1:any, X_2:any, 
X_3:int, X_4:any, X_5:any):bat[:lng] ",   "SQLprod;", "return the product 
of groups"  ]
 [ "batsql","prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any, 
X_3:int, X_4:any, X_5:any):bat[:lng] ",   "SQLprod;", "return the product 
of groups"  ]
 [ "batsql","rank", "pattern batsql.rank(X_0:bat[:any_1], X_1:any_2, 
X_2:any_3):bat[:int] ","SQLrank;", "return the ranked groups"  ]
-[ "batsql","restart",  "unsafe pattern batsql.restart(X_0:bat[:str], 
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ","mvc_bat_restart_seq;", 
"restart the sequence with value start" ]
-[ "batsql","restart",  

MonetDB: default - Check for failures

2021-11-10 Thread Pedro Ferreira
Changeset: 9c74f4aaa961 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9c74f4aaa961
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Check for failures


diffs (45 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1730,6 +1730,7 @@ update_col_execute(sql_trans *tr, sql_de
 static int
 update_col(sql_trans *tr, sql_column *c, void *tids, void *upd, int tpe)
 {
+   int res = LOG_OK;
bool update_conflict = false;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(>data);
 
@@ -1746,9 +1747,10 @@ update_col(sql_trans *tr, sql_column *c,
if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t)) 
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, >base, delta, _gc_col, _update_col, 
isTempTable(c->t)?NULL:_update_col);
 
-   int res =  update_col_execute(tr, delta, c->t, isNew(c), tids, upd, tpe 
== TYPE_bat);
+   if ((res = update_col_execute(tr, delta, c->t, isNew(c), tids, upd, tpe 
== TYPE_bat)) != LOG_OK)
+   return res;
if (delta->cs.st == ST_DEFAULT && c->storage_type)
-   sql_trans_alter_storage(tr, c, NULL);
+   res = sql_trans_alter_storage(tr, c, NULL);
return res;
 }
 
@@ -1954,6 +1956,7 @@ append_col_execute(sql_trans *tr, sql_de
 static int
 append_col(sql_trans *tr, sql_column *c, BUN offset, BAT *offsets, void *i, 
BUN cnt, int tpe)
 {
+   int res = LOG_OK;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(>data);
 
if ((delta = bind_col_data(tr, c, NULL)) == NULL)
@@ -1965,9 +1968,10 @@ append_col(sql_trans *tr, sql_column *c,
if ((!inTransaction(tr, c->t) && (odelta != delta || 
!segments_in_transaction(tr, c->t) || isTempTable(c->t)) && isGlobal(c->t)) || 
(!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, >base, delta, _gc_col, _update_col, 
isTempTable(c->t)?NULL:_update_col);
 
-   int res = append_col_execute(tr, delta, c->base.id, offset, offsets, i, 
cnt, tpe == TYPE_bat);
+   if ((res = append_col_execute(tr, delta, c->base.id, offset, offsets, 
i, cnt, tpe == TYPE_bat)) != LOG_OK)
+   return res;
if (delta->cs.st == ST_DEFAULT && c->storage_type)
-   sql_trans_alter_storage(tr, c, NULL);
+   res = sql_trans_alter_storage(tr, c, NULL);
return res;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Typo and cleanup

2021-11-10 Thread Pedro Ferreira
Changeset: fd95290f0733 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fd95290f0733
Modified Files:
sql/backends/monet5/dict.c
sql/backends/monet5/for.c
sql/server/rel_rel.c
Branch: default
Log Message:

Typo and cleanup


diffs (86 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
@@ -237,7 +237,7 @@ DICTcompress_col(Client cntxt, MalBlkPtr
if (!c)
throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
unknown", sname, tname, cname);
if (c->storage_type)
-   throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
allready compressed", sname, tname, cname);
+   throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
already compressed", sname, tname, cname);
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o, *u;
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -42,7 +42,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
tt != TYPE_hge &&
 #endif
tt != TYPE_lng && tt != TYPE_int)
-   throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress: 
invalid type");
+   throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress: 
invalid offset type");
 
BAT *o = BATdescriptor(O), *b = NULL;
if (!o) {
@@ -76,7 +76,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
}
} else {
bat_destroy(o);
-   throw(SQL, "for.decompress", SQLSTATE(3F000) "unknown offset 
type");
+   throw(SQL, "for.decompress", SQLSTATE(3F000) "offset type %s 
not yet implemented", ATOMname(tt));
}
bat_destroy(o);
BATsetcount(b, cnt);
@@ -109,14 +109,7 @@ FORcompress_intern(char **comp_min_val, 
}
 
BUN cnt = BATcount(b);
-#ifdef HAVE_HGE
-   if (b->ttype == TYPE_hge) {
-   GDKfree(mn);
-   GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
implement type hge");
-   } else
-#endif
-   if (b->ttype == TYPE_lng) {
+   if (tt == TYPE_lng) {
lng min_val = *(lng*)mn;
lng max_val = *(lng*)mx;
GDKfree(mn);
@@ -141,14 +134,10 @@ FORcompress_intern(char **comp_min_val, 
ov[i] = (sht)(iv[i] - min_val);
}
snprintf(buf, 64, "FOR-" LLFMT, min_val);
-   } else if (b->ttype == TYPE_int) {
-   GDKfree(mn);
-   GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
implement type int");
} else {
GDKfree(mn);
GDKfree(mx);
-   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type 
not yet implemented");
+   throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type 
%s not yet implemented", ATOMname(tt));
}
if (!(*comp_min_val = GDKstrdup(buf))) {
bat_destroy(o);
@@ -199,7 +188,7 @@ FORcompress_col(Client cntxt, MalBlkPtr 
if (c->null)
throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: for 
'for' compression column's cannot have NULL's");
if (c->storage_type)
-   throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
allready compressed", sname, tname, cname);
+   throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
already compressed", sname, tname, cname);
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o = NULL;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1720,7 +1720,7 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
if (!r)
return 0;
 
-   if (rel_is_ref(r) && refs_find_rel(refs, r)) /* allready handled */
+   if (rel_is_ref(r) && refs_find_rel(refs, r)) /* already handled */
return 0;
switch (r->op) {
case op_basetable: {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: pushcands - Merged with default

2021-11-10 Thread Pedro Ferreira
Changeset: 1ef467e6d092 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1ef467e6d092
Modified Files:
gdk/gdk_group.c
sql/backends/monet5/for.c
sql/server/rel_optimizer.c
Branch: pushcands
Log Message:

Merged with default


diffs (265 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -611,7 +611,7 @@ ctz(oid x)
if (ci.tpe == cand_dense) { \
TIMEOUT_LOOP_IDX(r, cnt, timeoffset) {  \
oid o = canditer_next_dense();   \
-   p = o - b->hseqbase;\
+   p = o - hseqb;  \
uint##BG##_t x = GV;\
if ((v = sgrps[x]) == (uint##BG##_t) ~0 && ngrp 
< (1 << BG)) { \
sgrps[x] = v = (uint##BG##_t) ngrp++; \
@@ -628,7 +628,7 @@ ctz(oid x)
} else {\
TIMEOUT_LOOP_IDX(r, cnt, timeoffset) {  \
oid o = canditer_next(); \
-   p = o - b->hseqbase;\
+   p = o - hseqb;  \
uint##BG##_t x = GV;\
if ((v = sgrps[x]) == (uint##BG##_t) ~0 && ngrp 
< (1 << BG)) { \
sgrps[x] = v = (uint##BG##_t) ngrp++; \
diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -71,6 +71,7 @@ OPTdictImplementation(Client cntxt, MalB
varisdict[k] = getArg(p,1);
vardictvalue[k] = getArg(p, 2);
dictunique[k] = 1;
+   freeInstruction(p);
continue;
}
int done = 0;
@@ -90,6 +91,7 @@ OPTdictImplementation(Client cntxt, MalB
vardictvalue[l] = vardictvalue[k];
dictunique[l] = dictunique[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (p->argc == 2 && p->retc == 1 && 
getFunctionId(p) == NULL) {
@@ -98,6 +100,7 @@ OPTdictImplementation(Client cntxt, MalB
varisdict[l] = varisdict[k];
vardictvalue[l] = vardictvalue[k];
dictunique[l] = dictunique[k];
+   freeInstruction(p);
done = 1;
break;
} else if (getModuleId(p) == algebraRef && 
getFunctionId(p) == subsliceRef) {
@@ -106,6 +109,7 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = copyInstruction(p);
getArg(r, j) = varisdict[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (getModuleId(p) == batRef && 
getFunctionId(p) == mirrorRef) {
@@ -114,6 +118,7 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = copyInstruction(p);
getArg(r, j) = varisdict[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (isSelect(p)) {
@@ -173,6 +178,7 @@ OPTdictImplementation(Client cntxt, MalB
t = pushNil(mb, t, TYPE_lng); 
/* estimate */
pushInstruction(mb,t);
}
+   freeInstruction(p);
done = 1;
break;
} else if (j == 2 && p->argc > j+1 && 
getModuleId(p) == algebraRef && getFunctionId(p) == joinRef
@@ -186,6 +192,7 @@ OPTdictImplementation(Client cntxt, MalB
getArg(r, j+0) = varisdict[k];
getArg(r, j+1) = varisdict[l];
 

MonetDB: default - A check I forgot

2021-11-10 Thread Pedro Ferreira
Changeset: f07f4d2d6802 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f07f4d2d6802
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:

A check I forgot


diffs (13 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -8694,8 +8694,7 @@ merge_table_prune_and_unionize(visitor *
/* check if the part 
falls within the bounds of the select expression else skip this (keep at least 
on part-table) */
if (!cmin && !cmax && 
first_attempt) {
char *min = 
NULL, *max = NULL;
-   (void) 
sql_trans_ranges(v->sql->session->tr, col, , );
-   if (min && max) 
{
+   if 
(sql_trans_ranges(v->sql->session->tr, col, , ) && min && max) {
cmin = 
atom_general(v->sql->sa, >type, min);
cmax = 
atom_general(v->sql->sa, >type, max);
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Throw errors and added missing free calls

2021-11-10 Thread Pedro Ferreira
Changeset: d06dbfd4c22e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d06dbfd4c22e
Modified Files:
sql/backends/monet5/for.c
Branch: default
Log Message:

Throw errors and added missing free calls


diffs (32 lines):

diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -91,6 +91,7 @@ FORcompress_intern(char **comp_min_val, 
BAT *o = NULL;
char buf[64];
int tt = b->ttype;
+   ptr mn = NULL, mx = NULL;
 
if (
 #ifdef HAVE_HGE
@@ -100,12 +101,18 @@ FORcompress_intern(char **comp_min_val, 
throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
invalid column type");
 
/* For now we only handle hge, lng, and int -> sht and bte */
-   ptr mn = BATmin(b, NULL);
-   ptr mx = BATmax(b, NULL);
+   if (!(mn = BATmin(b, NULL)))
+   throw(SQL, "for.compress", GDK_EXCEPTION);
+   if (!(mx = BATmax(b, NULL))) {
+   GDKfree(mn);
+   throw(SQL, "for.compress", GDK_EXCEPTION);
+   }
 
BUN cnt = BATcount(b);
 #ifdef HAVE_HGE
if (b->ttype == TYPE_hge) {
+   GDKfree(mn);
+   GDKfree(mx);
throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: 
implement type hge");
} else
 #endif
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Use constants inside loops

2021-11-10 Thread Pedro Ferreira
Changeset: ce1141f0d8a1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ce1141f0d8a1
Modified Files:
gdk/gdk_group.c
Branch: default
Log Message:

Use constants inside loops


diffs (21 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -611,7 +611,7 @@ ctz(oid x)
if (ci.tpe == cand_dense) { \
TIMEOUT_LOOP_IDX(r, cnt, timeoffset) {  \
oid o = canditer_next_dense();   \
-   p = o - b->hseqbase;\
+   p = o - hseqb;  \
uint##BG##_t x = GV;\
if ((v = sgrps[x]) == (uint##BG##_t) ~0 && ngrp 
< (1 << BG)) { \
sgrps[x] = v = (uint##BG##_t) ngrp++; \
@@ -628,7 +628,7 @@ ctz(oid x)
} else {\
TIMEOUT_LOOP_IDX(r, cnt, timeoffset) {  \
oid o = canditer_next(); \
-   p = o - b->hseqbase;\
+   p = o - hseqb;  \
uint##BG##_t x = GV;\
if ((v = sgrps[x]) == (uint##BG##_t) ~0 && ngrp 
< (1 << BG)) { \
sgrps[x] = v = (uint##BG##_t) ngrp++; \
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - fixing leaks

2021-11-10 Thread Niels Nes
Changeset: de1cbb7275ca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/de1cbb7275ca
Modified Files:
monetdb5/optimizer/opt_dict.c
monetdb5/optimizer/opt_for.c
sql/backends/monet5/for.c
sql/storage/store.c
Branch: default
Log Message:

fixing leaks


diffs (202 lines):

diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -71,6 +71,7 @@ OPTdictImplementation(Client cntxt, MalB
varisdict[k] = getArg(p,1);
vardictvalue[k] = getArg(p, 2);
dictunique[k] = 1;
+   freeInstruction(p);
continue;
}
int done = 0;
@@ -90,6 +91,7 @@ OPTdictImplementation(Client cntxt, MalB
vardictvalue[l] = vardictvalue[k];
dictunique[l] = dictunique[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (p->argc == 2 && p->retc == 1 && 
getFunctionId(p) == NULL) {
@@ -98,6 +100,7 @@ OPTdictImplementation(Client cntxt, MalB
varisdict[l] = varisdict[k];
vardictvalue[l] = vardictvalue[k];
dictunique[l] = dictunique[k];
+   freeInstruction(p);
done = 1;
break;
} else if (getModuleId(p) == algebraRef && 
getFunctionId(p) == subsliceRef) {
@@ -106,6 +109,7 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = copyInstruction(p);
getArg(r, j) = varisdict[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (getModuleId(p) == batRef && 
getFunctionId(p) == mirrorRef) {
@@ -114,6 +118,7 @@ OPTdictImplementation(Client cntxt, MalB
InstrPtr r = copyInstruction(p);
getArg(r, j) = varisdict[k];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (isSelect(p)) {
@@ -173,6 +178,7 @@ OPTdictImplementation(Client cntxt, MalB
t = pushNil(mb, t, TYPE_lng); 
/* estimate */
pushInstruction(mb,t);
}
+   freeInstruction(p);
done = 1;
break;
} else if (j == 2 && p->argc > j+1 && 
getModuleId(p) == algebraRef && getFunctionId(p) == joinRef
@@ -186,6 +192,7 @@ OPTdictImplementation(Client cntxt, MalB
getArg(r, j+0) = varisdict[k];
getArg(r, j+1) = varisdict[l];
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if (j == 2 && p->argc > j+1 && 
getModuleId(p) == algebraRef && getFunctionId(p) == joinRef
@@ -207,6 +214,7 @@ OPTdictImplementation(Client cntxt, MalB
r = addArgument(mb, r, getArg(p, 6));
r = addArgument(mb, r, getArg(p, 7));
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if ((isMapOp(p) || isMap2Op(p)) && 
allConstExcept(mb, p, j)) {
@@ -224,6 +232,7 @@ OPTdictImplementation(Client cntxt, MalB
vardictvalue[l] = vardictvalue[m] = 
getArg(r,0);
dictunique[l] = 0;
pushInstruction(mb,r);
+   freeInstruction(p);
done = 1;
break;
} else if 

MonetDB: pushcands - Merged with default

2021-11-10 Thread Pedro Ferreira
Changeset: 391b643810b9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/391b643810b9
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
gdk/gdk_group.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
sql/backends/monet5/for.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test
Branch: pushcands
Log Message:

Merged with default


diffs (truncated from 3728 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
@@ -7126,6 +7126,15 @@ stdout of test 'MAL-signatures` in direc
 [ "color", "value","command color.value(X_0:color):flt ",  
"CLRvalue;","Extracts value component from a color atom"]
 [ "color", "value","command color.value(X_0:color):int ",  
"CLRvalueInt;", "Extracts value component from a color atom"]
 [ "color", "ycc",  "command color.ycc(X_0:int, X_1:int, X_2:int):color ",  
"CLRycc;",  "Converts an YCC triplets to a color atom"  ]
+[ "dict",  "compress", "pattern dict.compress(X_0:bat[:any_1]) 
(X_1:bat[:any], X_2:bat[:any_1]) ", "DICTcompress;","dict compress 
a bat"   ]
+[ "dict",  "compress", "pattern dict.compress(X_0:str, X_1:str, 
X_2:str):void ",   "DICTcompress_col;","compress a sql column" ]
+[ "dict",  "compress", "pattern dict.compress(X_0:str, X_1:str, 
X_2:str, X_3:bit):void ",  "DICTcompress_col;","compress a sql column" ]
+[ "dict",  "convert",  "pattern 
dict.convert(X_0:bat[:any]):bat[:any_1] ", "DICTconvert;", "convert 
candidate list into compressed offsets"]
+[ "dict",  "decompress",   "pattern dict.decompress(X_0:bat[:any], 
X_1:bat[:any_1]):bat[:any_1] ", "DICTdecompress;",  "decompress a 
dictionary compressed (sub)column"]
+[ "dict",  "join", "pattern dict.join(X_0:bat[:any], X_1:bat[:any_1], 
X_2:bat[:any], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng) 
(X_8:bat[:oid], X_9:bat[:oid]) ","DICTjoin;","join 2 dictionaries"   ]
+[ "dict",  "renumber", "pattern dict.renumber(X_0:bat[:any_1], 
X_1:bat[:any_1]):bat[:any_1] ", "DICTrenumber;","renumber offsets"  
]
+[ "dict",  "select",   "pattern dict.select(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:any_1, X_4:any_1, X_5:bit, X_6:bit, 
X_7:bit, X_8:bit):bat[:oid] ",  "DICTselect;",  "value - range select on a 
dictionary"  ]
+[ "dict",  "thetaselect",  "pattern dict.thetaselect(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:any_1, X_4:str):bat[:oid] ",   
"DICTthetaselect;", "thetaselect on a dictionary"   ]
 [ "factories", "getArrival",   "command factories.getArrival():bat[:timestamp] 
",  "FCTgetArrival;",   "Retrieve the time stamp the last call was 
made."   ]
 [ "factories", "getCaller","command factories.getCaller():int ",   
"FCTgetCaller;","Retrieve the unique identity of the factory caller."   
]
 [ "factories", "getDeparture", "command 
factories.getDeparture():bat[:timestamp] ","FCTgetDeparture;", 
"Retrieve the time stamp the last answer was returned." ]
@@ -7138,6 +7147,8 @@ stdout of test 'MAL-signatures` in direc
 [ "fits",  "listdir",  "unsafe pattern fits.listdir(X_0:str):void ",   
"FITSdir;", "Attach all FITS files in the directory"]
 [ "fits",  "listdirpattern",   "unsafe pattern 
fits.listdirpattern(X_0:str, X_1:str):void ",   "FITSdirpat;",  "Attach all 
FITS file in the directory, giving a pattern"   ]
 [ "fits",  "load", "unsafe pattern fits.load(X_0:str):void ",  
"FITSloadTable;",   "Load a FITS table from an attached file"   ]
+[ "for",   "compress", "pattern for.compress(X_0:str, X_1:str, 
X_2:str):void ","FORcompress_col;", "compress a sql column"]
+[ "for",   "decompress",   "pattern for.decompress(X_0:bat[:any], 
X_1:any_1):bat[:any_1] ","FORdecompress;",   "decompress a for 
compressed (sub)column"   ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:bte], X_1:bat[:bte]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   ""  ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:dbl], X_1:bat[:dbl]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   "Overloaded join 
operation" ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:flt], X_1:bat[:flt]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   ""  ]
@@ -7765,11 +7776,15 @@ stdout of test 'MAL-signatures` in 

MonetDB: pushcands - Fix error message

2021-11-10 Thread Pedro Ferreira
Changeset: 6dd1c2c7c008 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6dd1c2c7c008
Modified Files:
gdk/gdk_string.c
Branch: pushcands
Log Message:

Fix error message


diffs (12 lines):

diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -1101,7 +1101,7 @@ BATstr_group_concat(ValPtr res, BAT *b, 
if (sep) {
BUN ncand2 = canditer_init(, sep, s2);
if (ncand != ncand2) {
-   GDKerror("b1, b2 must be aligned\n");
+   GDKerror("b and sep must be aligned\n");
return GDK_FAIL;
}
if (ncand2 == 1) { /* Only one element in sep */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Throw right error message and identation fix

2021-11-10 Thread Pedro Ferreira
Changeset: 6dc3b5ad6189 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6dc3b5ad6189
Modified Files:
sql/backends/monet5/dict.c
sql/backends/monet5/for.c
Branch: default
Log Message:

Throw right error message and identation fix


diffs (56 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
@@ -346,7 +346,7 @@ DICTdecompress_(BAT *o, BAT *u)
} else {
BATloop(o, p, q) {
BUN up = op[p];
-if (BUNappend(b, BUNtail(ui, up), false) != 
GDK_SUCCEED) {
+   if (BUNappend(b, BUNtail(ui, up), false) != 
GDK_SUCCEED) {
bat_iterator_end();
bat_destroy(b);
return NULL;
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -59,23 +59,26 @@ FORdecompress(Client cntxt, MalBlkPtr mb
lng minval = *getArgReference_lng(stk, pci, 2);
 
b = COLnew(o->hseqbase, TYPE_lng, cnt, PERSISTENT);
-   if (b) {
-   if (o->ttype == TYPE_bte) {
-   lng *ov = Tloc(b, 0);
-   bte *iv = Tloc(o, 0);
-   for(BUN i = 0; ittype == TYPE_bte) {
+   lng *ov = Tloc(b, 0);
+   bte *iv = Tloc(o, 0);
+   for(BUN i = 0; ibatCacheid);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - make sure we run the usual chkFlow/Types/Prog...

2021-11-10 Thread Niels Nes
Changeset: b83806761bbe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b83806761bbe
Modified Files:
monetdb5/optimizer/opt_dict.c
Branch: default
Log Message:

make sure we run the usual chkFlow/Types/Program on changes caused by the dict 
optimizer


diffs (18 lines):

diff --git a/monetdb5/optimizer/opt_dict.c b/monetdb5/optimizer/opt_dict.c
--- a/monetdb5/optimizer/opt_dict.c
+++ b/monetdb5/optimizer/opt_dict.c
@@ -268,10 +268,13 @@ OPTdictImplementation(Client cntxt, MalB
pushInstruction(mb, r);
 
getArg(p, j) = getArg(r, 0);
+   actions++;
}
}
}
-   if (!done)
+   if (done)
+   actions++;
+   else
pushInstruction(mb, p);
}
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Set property only when call succeeded. Throw ...

2021-11-10 Thread Pedro Ferreira
Changeset: cff68e94fa4d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cff68e94fa4d
Modified Files:
sql/backends/monet5/dict.c
sql/backends/monet5/for.c
Branch: default
Log Message:

Set property only when call succeeded. Throw storage errors


diffs (148 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
@@ -87,9 +87,9 @@ static str
 DICTcompress_intern(BAT **O, BAT **U, BAT *b, bool ordered, bool persists, 
bool smallest_type)
 {
/* for now use all rows */
-   BAT *u = BATunique(b, NULL);
+   BAT *u = BATunique(b, NULL), *uu = NULL;
if (!u)
-   throw(SQL, "dict.compress", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   throw(SQL, "dict.compress", GDK_EXCEPTION);
assert(u->tkey);
 
BUN cnt = BATcount(u);
@@ -104,33 +104,34 @@ DICTcompress_intern(BAT **O, BAT **U, BA
throw(SQL, "dict.compress", SQLSTATE(3F000) "dict compress: too 
many values");
}
BAT *uv = BATproject(u, b); /* get values */
-   uv->tkey = true;
bat_destroy(u);
if (!uv)
-   throw(SQL, "dict.compress", SQLSTATE(HY013) MAL_MALLOC_FAIL);
-BAT *uu = NULL;
+   throw(SQL, "dict.compress", GDK_EXCEPTION);
+   uv->tkey = true;
+
if (ordered) {
-   if (BATsort(, NULL, NULL, uv, NULL, NULL, false, 
false, false) != GDK_SUCCEED) {
-   bat_destroy(uv);
-   throw(SQL, "dict.compress", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-   }
+   if (BATsort(, NULL, NULL, uv, NULL, NULL, false, false, 
false) != GDK_SUCCEED) {
bat_destroy(uv);
-   uv = uu;
+   throw(SQL, "dict.compress", GDK_EXCEPTION);
+   }
+   bat_destroy(uv);
+   uv = uu;
}
u = uv;
if (persists) {
uu = COLcopy(uv, uv->ttype, true, PERSISTENT);
bat_destroy(uv);
+   if (!uu)
+   throw(SQL, "dict.compress", GDK_EXCEPTION);
assert(uu->tkey);
-   if (!uu)
-   throw(SQL, "dict.compress", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
u = uu;
}
 
BAT *o = COLnew(b->hseqbase, tt, BATcount(b), 
persists?PERSISTENT:TRANSIENT);
if (!o || BAThash(u) != GDK_SUCCEED) {
+   bat_destroy(o);
bat_destroy(u);
-   throw(SQL, "dict.compress", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   throw(SQL, "dict.compress", GDK_EXCEPTION);
}
 
BUN p, q;
@@ -246,10 +247,31 @@ DICTcompress_col(Client cntxt, MalBlkPtr
msg = DICTcompress_intern(, , b, ordered, true, true);
bat_destroy(b);
if (msg == MAL_SUCCEED) {
-   if (sql_trans_alter_storage(tr, c, "DICT") != LOG_OK || 
(c=get_newcolumn(tr, c)) == NULL || store->storage_api.col_compress(tr, c, 
ST_DICT, o, u) != LOG_OK) {
-   bat_destroy(u);
-   bat_destroy(o);
-   throw(SQL, "dict.compress", SQLSTATE(HY013) 
"alter_storage failed");
+   switch (sql_trans_alter_storage(tr, c, "DICT")) {
+   case -1:
+   msg = createException(SQL, "dict.compress", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   break;
+   case -2:
+   case -3:
+   msg = createException(SQL, "dict.compress", 
SQLSTATE(42000) "transaction conflict detected");
+   break;
+   default:
+   break;
+   }
+   if (msg == MAL_SUCCEED && !(c = get_newcolumn(tr, c)))
+   msg = createException(SQL, "dict.compress", 
SQLSTATE(HY013) "alter_storage failed");
+   if (msg == MAL_SUCCEED) {
+   switch (store->storage_api.col_compress(tr, c, ST_DICT, 
o, u)) {
+   case -1:
+   msg = createException(SQL, 
"dict.compress", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   break;
+   case -2:
+   case -3:
+   msg = createException(SQL, 
"dict.compress", SQLSTATE(42000) "transaction conflict detected");
+   break;
+   default:
+   break;
+   }
}
bat_destroy(u);
bat_destroy(o);
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -131,9 +131,9 

MonetDB: default - Missing bat descriptor checks and look for gd...

2021-11-10 Thread Pedro Ferreira
Changeset: b9c401194700 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b9c401194700
Modified Files:
sql/backends/monet5/dict.c
Branch: default
Log Message:

Missing bat descriptor checks and look for gdk errors


diffs (84 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
@@ -563,17 +563,20 @@ DICTjoin(Client cntxt, MalBlkPtr mb, Mal
BAT *ro = BATdescriptor(RO);
BAT *rv = BATdescriptor(RV);
 
-   if (!lo || !lv || !ro || !rv) {
+   if (!is_bat_nil(LC))
+   lc = BATdescriptor(LC);
+   if (!is_bat_nil(RC))
+   rc = BATdescriptor(RC);
+   if (!lo || !lv || !ro || !rv || (!is_bat_nil(LC) && !lc) || 
(!is_bat_nil(RC) && !rc)) {
bat_destroy(lo);
bat_destroy(lv);
bat_destroy(ro);
bat_destroy(rv);
+   bat_destroy(lc);
+   bat_destroy(rc);
throw(SQL, "dict.join", SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
-   if (!is_bat_nil(LC))
-   lc = BATdescriptor(LC);
-   if (!is_bat_nil(RC))
-   rc = BATdescriptor(RC);
+
/* if both are the same, continue with join on indices */
if (lv->batCacheid != rv->batCacheid) {
/* first join values of the dicts */
@@ -636,13 +639,15 @@ DICTthetaselect(Client cntxt, MalBlkPtr 
BAT *lo = BATdescriptor(LO);
BAT *lv = BATdescriptor(LV);
 
-   if (!lo || !lv) {
+   if (!is_bat_nil(LC))
+   lc = BATdescriptor(LC);
+   if (!lo || !lv || (!is_bat_nil(LC) && !lc)) {
bat_destroy(lo);
bat_destroy(lv);
+   bat_destroy(lc);
throw(SQL, "dict.thetaselect", SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
-   if (!is_bat_nil(LC))
-   lc = BATdescriptor(LC);
+
BUN max_cnt = lv->ttype == TYPE_bte?256:(64*1024);
if ((lv->tkey && (op[0] == '=' || op[0] == '!')) || ((op[0] == '<' || 
op[0] == '>') && lv->tsorted && BATcount(lv) < (max_cnt/2))) {
BUN p = BUN_NONE;
@@ -687,7 +692,7 @@ DICTthetaselect(Client cntxt, MalBlkPtr 
bat_destroy(lv);
bat_destroy(lc);
if (!bn)
-   throw(SQL, "dict.thetaselect", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   throw(SQL, "dict.thetaselect", GDK_EXCEPTION);
BBPkeepref(*R0 = bn->batCacheid);
return MAL_SUCCEED;
 }
@@ -719,13 +724,14 @@ DICTselect(Client cntxt, MalBlkPtr mb, M
BAT *lo = BATdescriptor(LO);
BAT *lv = BATdescriptor(LV);
 
-   if (!lo || !lv) {
+   if (!is_bat_nil(LC))
+   lc = BATdescriptor(LC);
+   if (!lo || !lv || (!is_bat_nil(LC) && !lc)) {
bat_destroy(lo);
bat_destroy(lv);
+   bat_destroy(lc);
throw(SQL, "dict.select", SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
-   if (!is_bat_nil(LC))
-   lc = BATdescriptor(LC);
 
if (ATOMvarsized(lv->ttype)) {
l = *(ptr*)l;
@@ -789,7 +795,7 @@ DICTselect(Client cntxt, MalBlkPtr mb, M
bat_destroy(lv);
bat_destroy(lc);
if (!bn)
-   throw(SQL, "dict.select", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   throw(SQL, "dict.select", GDK_EXCEPTION);
BBPkeepref(*R0 = bn->batCacheid);
return MAL_SUCCEED;
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Defensive lines I missed

2021-11-10 Thread Pedro Ferreira
Changeset: 2176b3caaca9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2176b3caaca9
Modified Files:
sql/backends/monet5/dict.c
sql/backends/monet5/for.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statement.c
Branch: default
Log Message:

Defensive lines I missed


diffs (163 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
@@ -213,6 +213,12 @@ DICTcompress_col(Client cntxt, MalBlkPtr
 
if (!sname || !tname || !cname)
throw(SQL, "dict.compress", SQLSTATE(3F000) "dict compress: 
invalid column name");
+   if (strNil(sname))
+   throw(SQL, "dict.compress", SQLSTATE(42000) "Schema name cannot 
be NULL");
+   if (strNil(tname))
+   throw(SQL, "dict.compress", SQLSTATE(42000) "Table name cannot 
be NULL");
+   if (strNil(cname))
+   throw(SQL, "dict.compress", SQLSTATE(42000) "Column name cannot 
be NULL");
if ((msg = getBackendContext(cntxt, )) != MAL_SUCCEED)
return msg;
tr = be->mvc->session->tr;
@@ -223,6 +229,9 @@ DICTcompress_col(Client cntxt, MalBlkPtr
sql_table *t = find_sql_table(tr, s, tname);
if (!t)
throw(SQL, "dict.compress", SQLSTATE(3F000) "table '%s.%s' 
unknown", sname, tname);
+   if (!isTable(t))
+   throw(SQL, "dict.compress", SQLSTATE(42000) "%s '%s' is not 
persistent",
+ TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
sql_column *c = find_sql_column(t, cname);
if (!c)
throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
unknown", sname, tname, cname);
@@ -231,6 +240,8 @@ DICTcompress_col(Client cntxt, MalBlkPtr
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o, *u;
+   if( b == NULL)
+   throw(SQL,"dict.compress", SQLSTATE(HY005) "Cannot access 
column descriptor");
 
msg = DICTcompress_intern(, , b, ordered, true, true);
bat_destroy(b);
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -113,12 +113,16 @@ FORcompress_intern(char **comp_min_val, 
throw(SQL, "for.compress", SQLSTATE(3F000) "for 
compress: too large value spread for 'for' compression");
if ((max_val-min_val) < GDK_bte_max/2) {
o = COLnew(b->hseqbase, TYPE_bte, cnt, PERSISTENT);
+   if (!o)
+   throw(SQL, "for.compress", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
bte *ov = Tloc(o, 0);
lng *iv = Tloc(b, 0);
for(BUN i = 0; ihseqbase, TYPE_sht, cnt, PERSISTENT);
+   if (!o)
+   throw(SQL, "for.compress", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
sht *ov = Tloc(o, 0);
lng *iv = Tloc(b, 0);
for(BUN i = 0; imvc->session->tr;
@@ -161,6 +174,9 @@ FORcompress_col(Client cntxt, MalBlkPtr 
sql_table *t = find_sql_table(tr, s, tname);
if (!t)
throw(SQL, "for.compress", SQLSTATE(3F000) "table '%s.%s' 
unknown", sname, tname);
+   if (!isTable(t))
+   throw(SQL, "for.compress", SQLSTATE(42000) "%s '%s' is not 
persistent",
+ TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
sql_column *c = find_sql_column(t, cname);
if (!c)
throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s' 
unknown", sname, tname, cname);
@@ -171,6 +187,8 @@ FORcompress_col(Client cntxt, MalBlkPtr 
 
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o = NULL;
+   if( b == NULL)
+   throw(SQL,"for.compress", SQLSTATE(HY005) "Cannot access column 
descriptor");
 
char *comp_min_val = NULL;
msg = FORcompress_intern(_min_val, , b);
@@ -181,8 +199,8 @@ FORcompress_col(Client cntxt, MalBlkPtr 
bat_destroy(o);
throw(SQL, "for.compress", SQLSTATE(HY013) 
"alter_storage failed");
}
+   GDKfree(comp_min_val);
bat_destroy(o);
}
-   GDKfree(comp_min_val);
return msg;
 }
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
@@ -5077,6 +5077,12 @@ SQLstr_column_vacuum(Client cntxt, MalBl
sql_table *t = NULL;
sql_column *c = NULL;
 
+   if (strNil(sname))
+   throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Schema 
name cannot be NULL");
+   if (strNil(tname))
+   throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Table 

MonetDB: default - Someone please review this. If a hash lookup ...

2021-11-10 Thread Pedro Ferreira
Changeset: 45596e1afe7b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/45596e1afe7b
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: default
Log Message:

Someone please review this. If a hash lookup is used, don't generate extra 
lookups


diffs (73 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -34,6 +34,8 @@ clean_mal_statements(backend *be, int ol
 {
MSresetInstructions(be->mb, oldstop);
freeVariables(be->client, be->mb, NULL, oldvtop, oldvid);
+   be->mvc->session->status = 0; /* clean possible generated error */
+   be->mvc->errstr[0] = '\0';
 }
 
 static int
@@ -2545,7 +2547,7 @@ rel2bin_join(backend *be, sql_rel *rel, 
(void) equality_only;
jexps = get_equi_joins_first(sql, jexps, 
_only);
/* generate a relational join (releqjoin) which does a 
multi attribute (equi) join */
-   for( en = jexps->h; en; en = en->next ) {
+   for( en = jexps->h; en && !used_hash; en = en->next ) {
int join_idx = be->join_idx;
sql_exp *e = en->data;
stmt *s = NULL;
@@ -2556,20 +2558,24 @@ rel2bin_join(backend *be, sql_rel *rel, 
break;
 
/* handle possible index lookups, expressions 
are in index order! */
-   if (!join &&
-   (p=find_prop(e->p, PROP_HASHCOL)) != 
NULL) {
+   if (!join && (p=find_prop(e->p, PROP_HASHCOL)) 
!= NULL) {
sql_idx *i = p->value;
+   int oldvtop = be->mb->vtop, oldstop = 
be->mb->stop, oldvid = be->mb->vid;
 
join = s = rel2bin_hash_lookup(be, rel, 
left, right, i, en);
if (s) {
list_append(lje, s->op1);
list_append(rje, s->op2);
list_append(exps, NULL);
-   used_hash = 1;
+   used_hash = 1; /* uses hash, 
all jexps were consumed */
+   } else {
+   /* hash lookup cannot be used, 
clean leftover mal statements */
+   clean_mal_statements(be, 
oldstop, oldvtop, oldvid);
}
}
 
-   s = exp_bin(be, e, left, right, NULL, NULL, 
NULL, NULL, 0, 1, 0);
+   if (!s)
+   s = exp_bin(be, e, left, right, NULL, 
NULL, NULL, NULL, 0, 1, 0);
if (!s) {
assert(sql->session->status == -10); /* 
Stack overflow errors shouldn't terminate the server */
return NULL;
@@ -3637,8 +3643,12 @@ rel2bin_select(backend *be, sql_rel *rel
 
if ((p=find_prop(e->p, PROP_HASHCOL)) != NULL) {
sql_idx *i = p->value;
-
-   sel = rel2bin_hash_lookup(be, rel, sub, NULL, i, en);
+   int oldvtop = be->mb->vtop, oldstop = be->mb->stop, 
oldvid = be->mb->vid;
+
+   if ((sel = rel2bin_hash_lookup(be, rel, sub, NULL, i, 
en)))
+   goto done;
+   /* hash lookup cannot be used, clean leftover mal 
statements */
+   clean_mal_statements(be, oldstop, oldvtop, oldvid);
}
}
for( en = rel->exps->h; en; en = en->next ) {
@@ -3665,6 +3675,7 @@ rel2bin_select(backend *be, sql_rel *rel
}
}
 
+done:
if (sub && sel) {
sub = stmt_list(be, sub->op4.lval); /* protect against 
references */
sub->cand = sel;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Approved output

2021-11-10 Thread Pedro Ferreira
Changeset: b56ef405f11d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b56ef405f11d
Modified Files:
sql/test/Tests/setoptimizer.test
Branch: default
Log Message:

Approved output


diffs (28 lines):

diff --git a/sql/test/Tests/setoptimizer.test b/sql/test/Tests/setoptimizer.test
--- a/sql/test/Tests/setoptimizer.test
+++ b/sql/test/Tests/setoptimizer.test
@@ -29,13 +29,13 @@ query TTT nosort
 select * from optimizers()
 
 minimal_pipe
-optimizer.inline();optimizer.remap();optimizer.bincopyfrom();optimizer.deadcode();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();optimizer.profiler();
+optimizer.inline();optimizer.remap();optimizer.bincopyfrom();optimizer.emptybind();optimizer.deadcode();optimizer.for();optimizer.dict();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();optimizer.profiler();
 stable
 minimal_fast
 optimizer.minimalfast()
 stable
 default_pipe
-optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.aliases();optimizer.evaluate();optimizer.emptybind();optimizer.deadcode();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.bincopyfrom();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.matpack();optimizer.reorder();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.candidates();optimizer.deadcode();optimizer.postfix();optimizer.wlc();optimizer.garbageCollector();optimizer.profiler();
+optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.aliases();optimizer.evaluate();optimizer.emptybind();optimizer.deadcode();optimizer.pushselect();optimizer.aliases();optimizer.for();optimizer.dict();optimizer.mitosis();optimizer.mergetable();optimizer.bincopyfrom();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.matpack();optimizer.reorder();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.candidates();optimizer.deadcode();optimizer.postfix();optimizer.wlc();optimizer.garbageCollector();optimizer.profiler();
 stable
 default_fast
 optimizer.defaultfast()
@@ -50,7 +50,7 @@ no_mitosis_pipe
 
optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.aliases();optimizer.evaluate();optimizer.emptybind();optimizer.deadcode();optimizer.pushselect();optimizer.aliases();optimizer.mergetable();optimizer.bincopyfrom();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.matpack();optimizer.reorder();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.candidates();optimizer.deadcode();optimizer.postfix();optimizer.wlc();optimizer.garbageCollector();optimizer.profiler();
 stable
 sequential_pipe
-optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.aliases();optimizer.evaluate();optimizer.emptybind();optimizer.deadcode();optimizer.pushselect();optimizer.aliases();optimizer.mergetable();optimizer.bincopyfrom();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.matpack();optimizer.reorder();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.candidates();optimizer.deadcode();optimizer.postfix();optimizer.wlc();optimizer.garbageCollector();optimizer.profiler();
+optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.aliases();optimizer.evaluate();optimizer.emptybind();optimizer.deadcode();optimizer.pushselect();optimizer.aliases();optimizer.for();optimizer.dict();optimizer.mergetable();optimizer.bincopyfrom();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.matpack();optimizer.reorder();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.candidates();optimizer.deadcode();optimizer.postfix();optimizer.wlc();optimizer.garbageCollector();optimizer.profiler();
 stable
 
 statement ok
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: dict - Close dict branch after merge into default.

2021-11-10 Thread Sjoerd Mullender
Changeset: e882dca6a020 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e882dca6a020
Branch: dict
Log Message:

Close dict branch after merge into default.

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


MonetDB: default - Merge dict branch into default.

2021-11-10 Thread Sjoerd Mullender
Changeset: 669b4dea64ad for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/669b4dea64ad
Branch: default
Log Message:

Merge dict branch into default.


diffs (truncated from 3484 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
@@ -8449,6 +8449,15 @@
 [ "color", "value","command color.value(X_0:color):flt ",  
"CLRvalue;","Extracts value component from a color atom"]
 [ "color", "value","command color.value(X_0:color):int ",  
"CLRvalueInt;", "Extracts value component from a color atom"]
 [ "color", "ycc",  "command color.ycc(X_0:int, X_1:int, X_2:int):color ",  
"CLRycc;",  "Converts an YCC triplets to a color atom"  ]
+[ "dict",  "compress", "pattern dict.compress(X_0:bat[:any_1]) 
(X_1:bat[:any], X_2:bat[:any_1]) ", "DICTcompress;","dict compress 
a bat"   ]
+[ "dict",  "compress", "pattern dict.compress(X_0:str, X_1:str, 
X_2:str):void ",   "DICTcompress_col;","compress a sql column" ]
+[ "dict",  "compress", "pattern dict.compress(X_0:str, X_1:str, 
X_2:str, X_3:bit):void ",  "DICTcompress_col;","compress a sql column" ]
+[ "dict",  "convert",  "pattern 
dict.convert(X_0:bat[:any]):bat[:any_1] ", "DICTconvert;", "convert 
candidate list into compressed offsets"]
+[ "dict",  "decompress",   "pattern dict.decompress(X_0:bat[:any], 
X_1:bat[:any_1]):bat[:any_1] ", "DICTdecompress;",  "decompress a 
dictionary compressed (sub)column"]
+[ "dict",  "join", "pattern dict.join(X_0:bat[:any], X_1:bat[:any_1], 
X_2:bat[:any], X_3:bat[:any_1], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng) 
(X_8:bat[:oid], X_9:bat[:oid]) ","DICTjoin;","join 2 dictionaries"   ]
+[ "dict",  "renumber", "pattern dict.renumber(X_0:bat[:any_1], 
X_1:bat[:any_1]):bat[:any_1] ", "DICTrenumber;","renumber offsets"  
]
+[ "dict",  "select",   "pattern dict.select(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:any_1, X_4:any_1, X_5:bit, X_6:bit, 
X_7:bit, X_8:bit):bat[:oid] ",  "DICTselect;",  "value - range select on a 
dictionary"  ]
+[ "dict",  "thetaselect",  "pattern dict.thetaselect(X_0:bat[:any], 
X_1:bat[:oid], X_2:bat[:any_1], X_3:any_1, X_4:str):bat[:oid] ",   
"DICTthetaselect;", "thetaselect on a dictionary"   ]
 [ "factories", "getArrival",   "command factories.getArrival():bat[:timestamp] 
",  "FCTgetArrival;",   "Retrieve the time stamp the last call was 
made."   ]
 [ "factories", "getCaller","command factories.getCaller():int ",   
"FCTgetCaller;","Retrieve the unique identity of the factory caller."   
]
 [ "factories", "getDeparture", "command 
factories.getDeparture():bat[:timestamp] ","FCTgetDeparture;", 
"Retrieve the time stamp the last answer was returned." ]
@@ -8461,6 +8470,8 @@
 [ "fits",  "listdir",  "unsafe pattern fits.listdir(X_0:str):void ",   
"FITSdir;", "Attach all FITS files in the directory"]
 [ "fits",  "listdirpattern",   "unsafe pattern 
fits.listdirpattern(X_0:str, X_1:str):void ",   "FITSdirpat;",  "Attach all 
FITS file in the directory, giving a pattern"   ]
 [ "fits",  "load", "unsafe pattern fits.load(X_0:str):void ",  
"FITSloadTable;",   "Load a FITS table from an attached file"   ]
+[ "for",   "compress", "pattern for.compress(X_0:str, X_1:str, 
X_2:str):void ","FORcompress_col;", "compress a sql column"]
+[ "for",   "decompress",   "pattern for.decompress(X_0:bat[:any], 
X_1:any_1):bat[:any_1] ","FORdecompress;",   "decompress a for 
compressed (sub)column"   ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:bte], X_1:bat[:bte]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   ""  ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:dbl], X_1:bat[:dbl]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   "Overloaded join 
operation" ]
 [ "generator", "join", "pattern generator.join(X_0:bat[:flt], X_1:bat[:flt]) 
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;",   ""  ]
@@ -9100,11 +9111,15 @@
 [ "optimizer", "default_pipe", "function optimizer.default_pipe():void;",  
"", ""  ]
 [ "optimizer", "defaultfast",  "pattern optimizer.defaultfast():str ", 
"OPTwrapper;",  ""  ]
 [ "optimizer", "defaultfast",  "pattern optimizer.defaultfast(X_0:str, 
X_1:str):str ", "OPTwrapper;",  "Fast compound default optimizer pipe"  ]
+[ "optimizer", "dict", "pattern optimizer.dict():str ","OPTwrapper;",  
""  ]
+[ "optimizer", "dict", "pattern optimizer.dict(X_0:str, X_1:str):str ",
"OPTwrapper;",  "Push dict decompress down" ]
 [ "optimizer", "emptybind","pattern optimizer.emptybind():str ",   
"OPTwrapper;",  ""  ]
 [ "optimizer", 

MonetDB: default - Merge with default branch.

2021-11-10 Thread Sjoerd Mullender
Changeset: 2e0da9356727 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2e0da9356727
Modified Files:
gdk/gdk_bbp.c
Branch: default
Log Message:

Merge with default branch.


diffs (26 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2082,11 +2082,11 @@ BBPdir_step(bat bid, BUN size, int n, ch
}
}
if (!found) {
-   TRC_WARNING(GDK, "file %s not 
found (expected size %zu)\n", fname, free);
+   TRC_WARNING(GDK, "file %s not 
found (expected size %" PRIu64 ")\n", fname, free);
} else {
assert((uint64_t) stb.st_size 
>= free);
if ((uint64_t) stb.st_size < 
free)
-   TRC_WARNING(GDK, "file 
%s too small (expected %zu, actual %zu)\n", fname, free, (size_t) stb.st_size);
+   TRC_WARNING(GDK, "file 
%s too small (expected %" PRIu64 ", actual %zu)\n", fname, free, (size_t) 
stb.st_size);
}
GDKfree(fname);
if (vfree == 0)
@@ -2114,7 +2114,7 @@ BBPdir_step(bat bid, BUN size, int n, ch
}
assert((uint64_t) stb.st_size >= vfree);
if ((uint64_t) stb.st_size < vfree)
-   TRC_WARNING(GDK, "file %s too 
small (expected %zu, actual %zu)\n", fname, vfree, (size_t) stb.st_size);
+   TRC_WARNING(GDK, "file %s too 
small (expected %" PRIu64 ", actual %zu)\n", fname, vfree, (size_t) 
stb.st_size);
GDKfree(fname);
break;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Use correct printf format.

2021-11-10 Thread Sjoerd Mullender
Changeset: 9706b16b3ffa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9706b16b3ffa
Modified Files:
gdk/gdk_bbp.c
Branch: Jul2021
Log Message:

Use correct printf format.


diffs (26 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1773,11 +1773,11 @@ BBPdir_step(bat bid, BUN size, int n, ch
}
}
if (!found) {
-   TRC_WARNING(GDK, "file %s not 
found (expected size %zu)\n", fname, free);
+   TRC_WARNING(GDK, "file %s not 
found (expected size %" PRIu64 ")\n", fname, free);
} else {
assert((uint64_t) stb.st_size 
>= free);
if ((uint64_t) stb.st_size < 
free)
-   TRC_WARNING(GDK, "file 
%s too small (expected %zu, actual %zu)\n", fname, free, (size_t) stb.st_size);
+   TRC_WARNING(GDK, "file 
%s too small (expected %" PRIu64 ", actual %zu)\n", fname, free, (size_t) 
stb.st_size);
}
GDKfree(fname);
if (vfree == 0)
@@ -1805,7 +1805,7 @@ BBPdir_step(bat bid, BUN size, int n, ch
}
assert((uint64_t) stb.st_size >= vfree);
if ((uint64_t) stb.st_size < vfree)
-   TRC_WARNING(GDK, "file %s too 
small (expected %zu, actual %zu)\n", fname, vfree, (size_t) stb.st_size);
+   TRC_WARNING(GDK, "file %s too 
small (expected %" PRIu64 ", actual %zu)\n", fname, vfree, (size_t) 
stb.st_size);
GDKfree(fname);
break;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list