Changeset: 904f2e10388d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=904f2e10388d
Modified Files:
clients/mapiclient/mclient.c
gdk/gdk_project.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_session.c
monetdb5/modules/mal/wlc.c
monetdb5/optimizer/opt_jit.c
monetdb5/optimizer/opt_macro.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_transaction.c
sql/backends/monet5/sql_user.c
sql/backends/monet5/wlr.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/test/BugTracker-2009/Tests/rollback_bug.stable.err
sql/test/BugTracker-2009/Tests/temporary_table_leftover.SF-2734713.stable.err
sql/test/BugTracker-2018/Tests/multi-column-hash-wrongly-NIL.Bug-6638.stable.out
sql/test/BugTracker/Tests/crash_on_fkey_update2.SF-1703497.stable.err
sql/test/Tests/All
sql/test/bugs/Tests/savepoint_rollback-bug-sf-953553.stable.err
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
testing/Mtest.py.in
Branch: analytics
Log Message:
Merge with default
diffs (truncated from 11804 to 300 lines):
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -404,7 +404,7 @@ utf8strlenmax(char *s, char *e, size_t m
* /usr/share/unicode/emoji/emoji-data.txt
* and code points marked either F or
* W in EastAsianWidth.txt; this list
- * is up-to-date with Unicode 9.0 */
+ * is up-to-date with Unicode 11.0 */
if ((0x1100 <= c && c <= 0x115F) ||
(0x231A <= c && c <= 0x231B) ||
(0x2329 <= c && c <= 0x232A) ||
@@ -447,7 +447,7 @@ utf8strlenmax(char *s, char *e, size_t m
(0x3000 <= c && c <= 0x303E) ||
(0x3041 <= c && c <= 0x3096) ||
(0x3099 <= c && c <= 0x30FF) ||
- (0x3105 <= c && c <= 0x312D) ||
+ (0x3105 <= c && c <= 0x312F) ||
(0x3131 <= c && c <= 0x318E) ||
(0x3190 <= c && c <= 0x31BA) ||
(0x31C0 <= c && c <= 0x31E3) ||
@@ -466,19 +466,20 @@ utf8strlenmax(char *s, char *e, size_t m
(0xFE68 <= c && c <= 0xFE6B) ||
(0xFF01 <= c && c <= 0xFF60) ||
(0xFFE0 <= c && c <= 0xFFE6) ||
- c == 0x16FE0 ||
- (0x17000 <= c && c <= 0x187EC) ||
+ (0x16FE0 <= c && c <= 0x16FE1) ||
+ (0x17000 <= c && c <= 0x187F1) ||
(0x18800 <= c && c <= 0x18AF2) ||
- (0x1B000 <= c && c <= 0x1B001) ||
+ (0x1B000 <= c && c <= 0x1B11E) ||
+ (0x1B170 <= c && c <= 0x1B2FB) ||
c == 0x1F004 ||
c == 0x1F0CF ||
c == 0x1F18E ||
(0x1F191 <= c && c <= 0x1F19A) ||
- /* removed 0x1F1E6..0x1F1FF */
(0x1F200 <= c && c <= 0x1F202) ||
(0x1F210 <= c && c <= 0x1F23B) ||
(0x1F240 <= c && c <= 0x1F248) ||
(0x1F250 <= c && c <= 0x1F251) ||
+ (0x1F260 <= c && c <= 0x1F265) ||
(0x1F300 <= c && c <= 0x1F320) ||
(0x1F32D <= c && c <= 0x1F335) ||
(0x1F337 <= c && c <= 0x1F37C) ||
@@ -501,15 +502,15 @@ utf8strlenmax(char *s, char *e, size_t m
c == 0x1F6CC ||
(0x1F6D0 <= c && c <= 0x1F6D2) ||
(0x1F6EB <= c && c <= 0x1F6EC) ||
- (0x1F6F4 <= c && c <= 0x1F6F6) ||
- (0x1F910 <= c && c <= 0x1F91E) ||
- (0x1F920 <= c && c <= 0x1F927) ||
- c == 0x1F930 ||
- (0x1F933 <= c && c <= 0x1F93E) ||
- (0x1F940 <= c && c <= 0x1F94B) ||
- (0x1F950 <= c && c <= 0x1F95E) ||
- (0x1F980 <= c && c <= 0x1F991) ||
- c == 0x1F9C0 ||
+ (0x1F6F4 <= c && c <= 0x1F6F9) ||
+ (0x1F910 <= c && c <= 0x1F93E) ||
+ (0x1F940 <= c && c <= 0x1F970) ||
+ (0x1F973 <= c && c <= 0x1F976) ||
+ c == 0x1F97A ||
+ (0x1F97C <= c && c <= 0x1F9A2) ||
+ (0x1F9B0 <= c && c <= 0x1F9B9) ||
+ (0x1F9C0 <= c && c <= 0x1F9C2) ||
+ (0x1F9D0 <= c && c <= 0x1F9FF) ||
(0x20000 <= c && c <= 0x2FFFD) ||
(0x30000 <= c && c <= 0x3FFFD))
len++;
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -420,6 +420,7 @@ BATprojectchain(BAT **bats)
oid hseq, tseq;
bool allnil = false, nonil = true;
bool stringtrick = false;
+ bool issorted = true; /* result sorted if all bats sorted */
/* count number of participating BATs and allocate some
* temporary work space */
@@ -435,6 +436,7 @@ BATprojectchain(BAT **bats)
off = 0; /* this will be the BUN offset into last BAT */
for (i = n = 0; b != NULL; n++, i++) {
nonil &= b->tnonil; /* not guaranteed without nils */
+ issorted &= b->tsorted;
if (!allnil) {
if (n > 0 && ba[i-1].vals == NULL) {
/* previous BAT was dense-tailed: we will
@@ -547,7 +549,8 @@ BATprojectchain(BAT **bats)
GDKfree(ba);
return bn;
}
- bn->tnil = bn->tnonil = false; /* we're not paying attention to this */
+ bn->tnil = false; /* we're not paying attention to this */
+ bn->tnonil = nonil;
n = i - 1; /* ba[n] is last BAT */
/* figure out the "other" type, i.e. not compatible with oid */
@@ -724,7 +727,8 @@ BATprojectchain(BAT **bats)
bn->theap.dirty = true;
BATsetcount(bn, cnt);
if (stringtrick) {
- bn->tnonil = bn->tnil = false;
+ bn->tnil = false;
+ bn->tnonil = nonil;
bn->tkey = false;
BBPshare(b->tvheap->parentid);
bn->tvheap = b->tvheap;
@@ -734,6 +738,7 @@ BATprojectchain(BAT **bats)
bn->tshift = b->tshift;
}
bn->tsorted = bn->trevsorted = cnt <= 1;
+ bn->tsorted |= issorted;
bn->tseqbase = oid_nil;
GDKfree(ba);
return bn;
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -427,7 +427,7 @@ mdbCommand(Client cntxt, MalBlkPtr mb, M
retryRead:
msg = (char *)
(*cntxt->phase[MAL_SCENARIO_READER])(cntxt);
if (msg != MAL_SUCCEED || cntxt->mode == FINISHCLIENT){
- GDKfree(msg);
+ freeException(msg);
break;
}
/* SQL patch, it should only react to Smessages, Xclose
requests to be ignored */
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -1468,7 +1468,7 @@ parseEnd(Client cntxt)
if(!errors)
cntxt->curprg->def->errors = msg;
else
- GDKfree(msg);
+ freeException(msg);
return 1;
}
}
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -51,13 +51,13 @@ malBootstrap(void)
mal_exit();
}
if ( (msg = defaultScenario(c)) ) {
- GDKfree(msg);
- fprintf(stderr,"#malBootstrap:Failed to initialise default
scenario");
+ fprintf(stderr,"#malBootstrap:Failed to initialise default
scenario: %s", msg);
+ freeException(msg);
mal_exit();
}
if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
- GDKfree(msg);
- fprintf(stderr,"#malBootstrap:Failed to initialise client");
+ fprintf(stderr,"#malBootstrap:Failed to initialise client: %s",
msg);
+ freeException(msg);
mal_exit();
}
if( MCinitClientThread(c) < 0){
diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c
--- a/monetdb5/modules/mal/wlc.c
+++ b/monetdb5/modules/mal/wlc.c
@@ -289,7 +289,7 @@ WLCreset(void)
wlc_write[0] =0;
MT_lock_unset(&wlc_lock);
if(msg) //TODO we have to return a possible error message somehow
- GDKfree(msg);
+ freeException(msg);
}
/*
diff --git a/monetdb5/optimizer/opt_jit.c b/monetdb5/optimizer/opt_jit.c
--- a/monetdb5/optimizer/opt_jit.c
+++ b/monetdb5/optimizer/opt_jit.c
@@ -83,7 +83,7 @@ OPTjitImplementation(Client cntxt, MalBl
OPTDEBUGjit(
chkTypes(cntxt->usermodule,mb,TRUE);
- GDKfree(msg);
+ freeException(msg);
msg = MAL_SUCCEED;
fprintf(stderr, "#Optimize JIT done\n");
fprintFunction(stderr, mb, 0, LIST_MAL_DEBUG);
diff --git a/monetdb5/optimizer/opt_macro.c b/monetdb5/optimizer/opt_macro.c
--- a/monetdb5/optimizer/opt_macro.c
+++ b/monetdb5/optimizer/opt_macro.c
@@ -500,7 +500,7 @@ str OPTmacro(Client cntxt, MalBlkPtr mb,
msg= OPTmacroImplementation(cntxt,mb,stk,p);
// similar to OPTmacro
if( msg) {
- GDKfree(msg);
+ freeException(msg);
msg= MAL_SUCCEED;
}
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
@@ -1607,6 +1607,7 @@ rel2bin_hash_lookup(backend *be, sql_rel
sql_exp *l = e->l;
stmt *idx = bin_find_column(be, left, l->l, sa_strconcat(sql->sa, "%",
i->base.name));
int swap_exp = 0, swap_rel = 0;
+ comp_type comp = cmp_equal;
if (!idx) {
swap_exp = 1;
@@ -1647,6 +1648,7 @@ rel2bin_hash_lookup(backend *be, sql_rel
h = stmt_Nop(be, stmt_list(be, list_append( list_append(
list_append(sa_list(sql->sa), h), bits), s)),
xor);
+ comp = cmp_equal_nil;
} else {
sql_subfunc *hf = sql_bind_func_result(sql->sa,
sql->session->schema, "hash", tail_type(s), NULL, lng);
@@ -1655,12 +1657,12 @@ rel2bin_hash_lookup(backend *be, sql_rel
}
if (h && h->nrcols) {
if (!swap_rel) {
- return stmt_join(be, idx, h, 0, cmp_equal);
+ return stmt_join(be, idx, h, 0, comp);
} else {
- return stmt_join(be, h, idx, 0, cmp_equal);
+ return stmt_join(be, h, idx, 0, comp);
}
} else {
- return stmt_uselect(be, idx, h, cmp_equal, NULL, 0);
+ return stmt_uselect(be, idx, h, comp, NULL, 0);
}
}
@@ -1714,7 +1716,7 @@ releqjoin( backend *be, list *l1, list *
} else { /* need hash */
l = join_hash_key(be, l1);
r = join_hash_key(be, l2);
- res = stmt_join(be, l, r, 0, cmp_op);
+ res = stmt_join(be, l, r, 0, cmp_op == cmp_equal ?
cmp_equal_nil : cmp_op);
}
if (need_left)
res->flag = cmp_left;
@@ -3117,7 +3119,7 @@ insert_check_ukey(backend *be, list *ins
if (s->key && s->nrcols == 0) {
s = NULL;
if (k->idx && hash_index(k->idx->type))
- s = stmt_uselect(be, stmt_idx(be, k->idx,
dels), idx_inserts, cmp_equal, s, 0);
+ s = stmt_uselect(be, stmt_idx(be, k->idx,
dels), idx_inserts, cmp_equal_nil, s, 0);
for (m = k->columns->h; m; m = m->next) {
sql_kc *c = m->data;
stmt *cs = list_fetch(inserts, c->c->colnr);
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
@@ -226,7 +226,6 @@ SQLmvc(Client cntxt, MalBlkPtr mb, MalSt
str
SQLcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int ret;
mvc *sql = NULL;
str msg;
(void) stk;
@@ -239,11 +238,7 @@ SQLcommit(Client cntxt, MalBlkPtr mb, Ma
if (sql->session->auto_commit != 0)
throw(SQL, "sql.trans", SQLSTATE(2DM30) "COMMIT not allowed in
auto commit mode");
- ret = mvc_commit(sql, 0, 0);
- if (ret < 0) {
- throw(SQL, "sql.trans", SQLSTATE(2D000) "transaction commit
failed");
- }
- return msg;
+ return mvc_commit(sql, 0, 0, false);
}
str
@@ -260,7 +255,7 @@ SQLabort(Client cntxt, MalBlkPtr mb, Mal
return msg;
if (sql->session->active) {
- mvc_rollback(sql, 0, NULL);
+ msg = mvc_rollback(sql, 0, NULL, false);
}
return msg;
}
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -336,7 +336,7 @@ SQLprepareClient(Client c, int login)
str
SQLresetClient(Client c)
{
- str msg = MAL_SUCCEED;
+ str msg = MAL_SUCCEED, other = MAL_SUCCEED;
if (c->sqlcontext == NULL)
throw(SQL, "SQLexitClient", SQLSTATE(42000) "MVC catalogue not
available");
@@ -346,12 +346,11 @@ SQLresetClient(Client c)
assert(m->session);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list