MonetDB: sequences_7184 - approved output
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" ] [ "cli
monetdb-java: default - For testweb failures need to be written ...
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
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(&ci, 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(&bi); + 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, &ci, ncand, NULL, 0, 0, - skip_nils, sep, separator, NULL); + r = concat_strings(NULL, res, b, b->hseqbase, 1, &ci, 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, &min, &max, &ngrp, @@ -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(&bi); + 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(&bn, NULL, b, b->hseqbase, ngrp, &ci, ncand, (const oid *) Tloc(g, 0), min, max, skip_nils, sep, -separator, &nils); +nseparator, &nils); 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 && @
MonetDB: sequences_7184 - compare with correct last used id.
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...
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...
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(&bi); - tpe = getBatType(getArgType(mb, pci, i + 1)); if ((val = ATOMformat(tpe, p)) == NULL) { + bat_iterator_end(&bi); GDKfree(row); return NULL; } + bat_iterator_end(&bi); 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(&bi); - tpe = getBatType(getArgType(mb, pci, i)); if ((val = ATOMformat(tpe, p)) == NULL) { + bat_iterator_end(&bi); goto memfail; } + bat_iterator_end(&bi); 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, &r, false) != GDK_SUCCEED) { BBPreclaim(bn); bat_iterator_end(&bi); + 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, &r, false) != GDK_SUCCEED) { BBPreclaim(bn); bat_iterator_end(&bi); + 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(&bi); } 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(&bi); 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(&bi); 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(&bi); BBPunfix(b->batCacheid); return MAL_SUCCEED; } @@ -203,6 +208,7 @@ SQLall(ptr ret, const bat *b
MonetDB: sequences_7184 - Implement cardinality based bulk opera...
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->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", SQLS
MonetDB: string_imprints - Merge with default
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 s
MonetDB: string_imprints - Put SQL strimp related functions in s...
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
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 STRIMP_HE
MonetDB: string_imprints - Fix setoptimizer test
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
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 - hseq]
MonetDB: default - Use more const
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(&ci); - 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(&ci); - 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(&ci); - v = VALUE(o - b->hseqbase); + v = VALUE(o - hseq); if (prev == NULL || (*cmp)(v, prev) != 0) { if (bunfastappTYPE(oid, bn, &o) != 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(&b->thashlock); hs = b->thash; if (hs == NULL) { @@ -191,14 +190,14 @@ BATunique(BAT *b, BAT *s) BUN p; o = canditer_next(&ci); - 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(&ci, hb - lo + seq)) { + canditer_contains(&ci, 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(&ci); - 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, &o) != 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...
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(&ci, 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(&bi); + 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, &ci, ncand, NULL, 0, 0, - skip_nils, sep, separator, NULL); + r = concat_strings(NULL, res, b, b->hseqbase, 1, &ci, 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, &min, &max, &ngrp, @@ -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(&bi); + 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(&bn, NULL, b, b->hseqbase, ngrp, &ci, ncand, (const oid *) Tloc(g, 0), min, max, skip_nils, sep, -separator, &nils); +nseparator, &nils); 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
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 ...
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
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
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 st
MonetDB: default - Return the right error constants
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(&c->data); if ((delta = bind_col_data(tr, c, renew?&update_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, &c->base, delta, &tc_gc_col, &commit_update_col, isTempTable(c->t)?NULL:&log_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?&update_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, &i->base, delta, &tc_gc_idx, &commit_update_idx, isTempTable(i->t)?NULL:&log_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
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, &s->cs, true, isTempTable(t)); + if (clear_cs(tr, &s->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, &delta->cs, true, isTempTable(c->t)); + } else if (clear_cs(tr, &delta->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, &delta->cs, true, isTempTable(c->t)); + } else if (clear_cs(tr, &delta->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, &delta->cs, true, isTempTable(i->t)); + } else if (clear_cs(tr, &delta->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, &delta->cs, true, isTempTable(i->t)); + } else if (clear_cs(tr, &delta->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
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(&bat->cs, i); - if (!oi) { + BAT *ni = dict_append_bat(&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
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, &rel_merge_table_rewrite); - rel = rel_visitor_topdown(v, rel, &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
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, &ui, &uv) != 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...
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", "unsaf
MonetDB: default - Check for failures
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(&c->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, &c->base, delta, &tc_gc_col, &commit_update_col, isTempTable(c->t)?NULL:&log_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(&c->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, &c->base, delta, &tc_gc_col, &commit_update_col, isTempTable(c->t)?NULL:&log_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
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
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(&ci); \ - 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(&ci); \ - 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
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, &min, &max); - if (min && max) { + if (sql_trans_ranges(v->sql->session->tr, col, &min, &max) && min && max) { cmin = atom_general(v->sql->sa, &col->type, min); cmax = atom_general(v->sql->sa, &col->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
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
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(&ci); \ - 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(&ci); \ - 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
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 (g
MonetDB: pushcands - Merged with default
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 dire
MonetDB: pushcands - Fix error message
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(&ci2, 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
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(&oi); 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...
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 ...
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(&uu, NULL, NULL, uv, NULL, NULL, false, false, false) != GDK_SUCCEED) { - bat_destroy(uv); - throw(SQL, "dict.compress", SQLSTATE(HY013) MAL_MALLOC_FAIL); - } + if (BATsort(&uu, 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(&o, &u, 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
MonetDB: default - Missing bat descriptor checks and look for gd...
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
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, &be)) != 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(&o, &u, 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(&comp_min_val, &o, 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(420
MonetDB: default - Someone please review this. If a hash lookup ...
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, &equality_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
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.
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.
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", "emptybind
MonetDB: default - Merge with default branch.
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.
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