Changeset: 69f5c8e3cb5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69f5c8e3cb5d
Added Files:
sql/test/miscellaneous/Tests/simple_plans.sql
sql/test/miscellaneous/Tests/simple_plans.stable.err
sql/test/miscellaneous/Tests/simple_plans.stable.out
Modified Files:
clients/mapiclient/dump.c
clients/mapiclient/mhelp.c
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_bbp.c
monetdb5/mal/mal_import.c
monetdb5/optimizer/opt_mergetable.c
sql/ChangeLog.Jun2020
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/25_debug.sql
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/rel_psm.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_rewriter.c
sql/server/rel_rewriter.h
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/rel_unnest.h
sql/server/rel_updates.c
sql/storage/store.c
sql/test/BugDay_2005-10-06_2.9.3/Tests/bool_boolean.SF-935601.stable.out
sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/miscellaneous/Tests/All
sql/test/miscellaneous/Tests/column_aliases.sql
sql/test/miscellaneous/Tests/column_aliases.stable.err
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/miscellaneous/Tests/groupby_error.stable.out
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
sql/test/subquery/Tests/subquery3.sql
sql/test/subquery/Tests/subquery3.stable.err
sql/test/subquery/Tests/subquery3.stable.out
sql/test/subquery/Tests/subquery5.sql
sql/test/subquery/Tests/subquery5.stable.err
sql/test/subquery/Tests/subquery5.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
sql/test/testdb-reload/Tests/reload.stable.out
sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
sql/test/testdb/Tests/dump.stable.out
sql/test/testdb/Tests/load.sql
tools/merovingian/client/monetdb.c
tools/merovingian/daemon/merovingian.c
tools/merovingian/utils/control.c
tools/merovingian/utils/control.h
tools/merovingian/utils/properties.c
tools/merovingian/utils/utils.c
tools/merovingian/utils/utils.h
Branch: scoping
Log Message:
Merged with default
diffs (truncated from 7496 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -2018,12 +2018,20 @@ dump_function(Mapi mid, stream *toConsol
sep = "";
while (mapi_fetch_row(hdl) != 0) {
const char *aname = mapi_fetch_field(hdl, 0);
- char *atype = strdup(mapi_fetch_field(hdl, 1));
- char *adigs = strdup(mapi_fetch_field(hdl, 2));
- char *ascal = strdup(mapi_fetch_field(hdl, 3));
+ char *atype = mapi_fetch_field(hdl, 1);
+ char *adigs = mapi_fetch_field(hdl, 2);
+ char *ascal = mapi_fetch_field(hdl, 3);
const char *ainou = mapi_fetch_field(hdl, 4);
- if (!atype || !adigs || !ascal) {
+ if (strcmp(ainou, "0") == 0) {
+ /* end of arguments */
+ break;
+ }
+
+ atype = strdup(atype);
+ adigs = strdup(adigs);
+ ascal = strdup(ascal);
+ if (atype == NULL || adigs == NULL || ascal == NULL) {
free(atype);
free(adigs);
free(ascal);
@@ -2037,13 +2045,6 @@ dump_function(Mapi mid, stream *toConsol
}
goto bailout;
}
- if (strcmp(ainou, "0") == 0) {
- /* end of arguments */
- free(atype);
- free(adigs);
- free(ascal);
- break;
- }
mnstr_printf(toConsole, "%s", sep);
dquoted_print(toConsole, aname, " ");
@@ -2064,7 +2065,7 @@ dump_function(Mapi mid, stream *toConsol
char *adigs = strdup(mapi_fetch_field(hdl, 2));
char *ascal = strdup(mapi_fetch_field(hdl, 3));
- if (!atype || !adigs || !ascal) {
+ if (atype == NULL || adigs == NULL || ascal ==
NULL) {
free(atype);
free(adigs);
free(ascal);
@@ -2091,6 +2092,8 @@ dump_function(Mapi mid, stream *toConsol
free(adigs);
free(ascal);
} while (mapi_fetch_row(hdl) != 0);
+ if (ftype == 5)
+ mnstr_printf(toConsole, ")");
}
if (flkey) {
mnstr_printf(toConsole, " LANGUAGE %s", flkey);
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -804,9 +804,8 @@ SQLhelp sqlhelp2[] = {
NULL},
{"procedure_statement",
NULL,
- "{ transaction_statement | update_statement | grant | revoke |\n"
- " declare | set_statement | control_statement | select_single_row }
';'",
-
"transaction_statement,update_statement,grant,revoke,declare,set_statement,control_statement,select_single_row",
+ "{ update_statement | declare_statement | set_statement |
control_statement | select_single_row } ';'",
+
"update_statement,declare_statement,set_statement,control_statement,select_single_row",
NULL},
{"select_single_row",
NULL,
@@ -946,9 +945,8 @@ SQLhelp sqlhelp2[] = {
NULL},
{"trigger_statement",
NULL,
- "transaction_statement | update_statement | grant | revoke |
declare_statement |\n"
- " set_statement | control_statement | select_single_row",
-
"transaction_statement,update_statement,grant,revoke,declare_statement,set_statement,control_statement,select_single_row",
+ "update_statement | declare_statement | set_statement |
control_statement | select_single_row",
+
"update_statement,declare_statement,set_statement,control_statement,select_single_row",
NULL},
{"when_statement",
NULL,
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -750,11 +750,6 @@ COLcopy(BAT *b, int tt, bool writable, r
/* make sure we use the correct capacity */
bn->batCapacity = (BUN) (bn->ttype ? bn->theap.size >>
bn->tshift : 0);
-
-
- /* first/inserted must point equally far into
- * the heap as in the source */
- bn->batInserted = b->batInserted;
} else if (BATatoms[tt].atomFix || tt != TYPE_void ||
ATOMextern(tt)) {
/* case (4): one-by-one BUN insert (really slow) */
BUN p, q, r = 0;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -53,7 +53,7 @@ unshare_string_heap(BAT *b)
#endif
static gdk_return
-insert_string_bat(BAT *b, BAT *n, BAT *s, bool force)
+insert_string_bat(BAT *b, BAT *n, struct canditer *ci, bool force)
{
BATiter ni; /* iterator */
size_t toff = ~(size_t) 0; /* tail offset */
@@ -66,20 +66,16 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
#endif
var_t v; /* value */
size_t off; /* offset within n's string heap */
- struct canditer ci;
- BUN cnt;
+ BUN cnt = ci->ncand;
BUN oldcnt = BATcount(b);
assert(b->ttype == TYPE_str);
/* only transient bats can use some other bat's string heap */
assert(b->batRole == TRANSIENT || b->tvheap->parentid == b->batCacheid);
- if (n->batCount == 0 || (s && s->batCount == 0))
+ if (cnt == 0)
return GDK_SUCCEED;
ni = bat_iterator(n);
tp = NULL;
- cnt = canditer_init(&ci, n, s);
- if (cnt == 0)
- return GDK_SUCCEED;
if ((!GDK_ELIMDOUBLES(b->tvheap) || oldcnt == 0) &&
!GDK_ELIMDOUBLES(n->tvheap) &&
b->tvheap->hashash == n->tvheap->hashash) {
@@ -106,7 +102,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
* heap */
if (oldcnt == 0 &&
b->tvheap != n->tvheap &&
- ci.tpe == cand_dense) {
+ ci->tpe == cand_dense) {
if (b->tvheap->parentid != bid) {
BBPunshare(b->tvheap->parentid);
} else {
@@ -118,7 +114,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
b->batDirtydesc = true;
toff = 0;
} else if (b->tvheap->parentid == n->tvheap->parentid &&
- ci.tpe == cand_dense) {
+ ci->tpe == cand_dense) {
toff = 0;
} else if (b->tvheap->parentid != bid &&
unshare_string_heap(b) != GDK_SUCCEED) {
@@ -148,7 +144,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
size_t len = b->tvheap->hashash ? 1024 * EXTRALEN : 0;
for (i = 0; i < 1024; i++) {
p = (BUN) (((double) rand() / RAND_MAX) * (cnt
- 1));
- p = canditer_idx(&ci, p) - n->hseqbase;
+ p = canditer_idx(ci, p) - n->hseqbase;
off = BUNtvaroff(ni, p);
if (off < b->tvheap->free &&
strcmp(b->tvheap->base + off,
n->tvheap->base + off) == 0 &&
@@ -198,10 +194,10 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
}
} else if (unshare_string_heap(b) != GDK_SUCCEED)
return GDK_FAIL;
- if (toff == 0 && n->twidth == b->twidth && ci.tpe == cand_dense) {
+ if (toff == 0 && n->twidth == b->twidth && ci->tpe == cand_dense) {
/* we don't need to do any translation of offset
* values, so we can use fast memcpy */
- memcpy(Tloc(b, BUNlast(b)), Tloc(n, ci.seq - n->hseqbase), cnt
<< n->tshift);
+ memcpy(Tloc(b, BUNlast(b)), Tloc(n, ci->seq - n->hseqbase), cnt
<< n->tshift);
BATsetcount(b, oldcnt + cnt);
} else if (toff != ~(size_t) 0) {
/* we don't need to insert any actual strings since we
@@ -251,7 +247,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
b->tvarsized = false;
while (cnt > 0) {
cnt--;
- p = canditer_next(&ci) - n->hseqbase;
+ p = canditer_next(ci) - n->hseqbase;
switch (n->twidth) {
case 1:
v = (var_t) tbp[p] + GDK_VAROFFSET;
@@ -316,7 +312,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
oid hseq = n->hseqbase;
while (cnt > 0) {
cnt--;
- p = canditer_next(&ci) - hseq;
+ p = canditer_next(ci) - hseq;
tp = BUNtvar(ni, p);
if (bunfastappVAR(b, tp) != GDK_SUCCEED)
goto bunins_failed;
@@ -332,7 +328,7 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
r = BUNlast(b);
while (cnt > 0) {
cnt--;
- p = canditer_next(&ci) - n->hseqbase;
+ p = canditer_next(ci) - n->hseqbase;
off = BUNtvaroff(ni, p); /* the offset */
tp = n->tvheap->base + off; /* the string */
if (off < b->tvheap->free &&
@@ -397,11 +393,10 @@ insert_string_bat(BAT *b, BAT *n, BAT *s
}
static gdk_return
-append_varsized_bat(BAT *b, BAT *n, BAT *s)
+append_varsized_bat(BAT *b, BAT *n, struct canditer *ci)
{
BATiter ni;
- struct canditer ci;
- BUN cnt, r;
+ BUN cnt = ci->ncand, r;
oid hseq = n->hseqbase;
/* only transient bats can use some other bat's vheap */
@@ -409,9 +404,6 @@ append_varsized_bat(BAT *b, BAT *n, BAT
/* make sure the bats use var_t */
assert(b->twidth == n->twidth);
assert(b->twidth == SIZEOF_VAR_T);
- if (n->batCount == 0 || (s && s->batCount == 0))
- return GDK_SUCCEED;
- cnt = canditer_init(&ci, n, s);
if (cnt == 0)
return GDK_SUCCEED;
if (BATcount(b) == 0 &&
@@ -434,24 +426,24 @@ append_varsized_bat(BAT *b, BAT *n, BAT
if (b->tvheap == n->tvheap) {
/* if b and n use the same vheap, we only need to copy
* the offsets from n to b */
- if (ci.tpe == cand_dense) {
+ if (ci->tpe == cand_dense) {
/* fast memcpy since we copy a consecutive
* chunk of memory */
memcpy(Tloc(b, BUNlast(b)),
- Tloc(n, ci.seq - hseq),
+ Tloc(n, ci->seq - hseq),
cnt << b->tshift);
} else {
var_t *restrict dst = (var_t *) Tloc(b, BUNlast(b));
const var_t *restrict src = (const var_t *) Tloc(n, 0);
while (cnt > 0) {
cnt--;
- *dst++ = src[canditer_next(&ci) - hseq];
+ *dst++ = src[canditer_next(ci) - hseq];
}
}
b->theap.dirty = true;
- BATsetcount(b, BATcount(b) + ci.ncand);
+ BATsetcount(b, BATcount(b) + ci->ncand);
/* maintain hash table */
- for (BUN i = BATcount(b) - ci.ncand;
+ for (BUN i = BATcount(b) - ci->ncand;
b->thash && i < BATcount(b);
i++) {
HASHins(b, i, b->tvheap->base + ((var_t *)
b->theap.base)[i]);
@@ -481,7 +473,7 @@ append_varsized_bat(BAT *b, BAT *n, BAT
r = BUNlast(b);
while (cnt > 0) {
cnt--;
- BUN p = canditer_next(&ci) - hseq;
+ BUN p = canditer_next(ci) - hseq;
const void *t = BUNtvar(ni, p);
if (bunfastapp_nocheckVAR(b, r, t, Tsize(b)) != GDK_SUCCEED)
return GDK_FAIL;
@@ -676,11 +668,11 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f
b->tnil |= n->tnil && cnt == BATcount(n);
}
if (b->ttype == TYPE_str) {
- if (insert_string_bat(b, n, s, force) != GDK_SUCCEED) {
+ if (insert_string_bat(b, n, &ci, force) != GDK_SUCCEED) {
return GDK_FAIL;
}
} else if (ATOMvarsized(b->ttype)) {
- if (append_varsized_bat(b, n, s) != GDK_SUCCEED) {
+ if (append_varsized_bat(b, n, &ci) != GDK_SUCCEED) {
return GDK_FAIL;
}
} else {
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -677,7 +677,7 @@ fixdatebats(void)
#endif
static int
-heapinit(BAT *b, const char *buf, int *hashash, unsigned bbpversion, bat bid,
const char *filename)
+heapinit(BAT *b, const char *buf, int *hashash, unsigned bbpversion, bat bid,
const char *filename, int lineno)
{
int t;
char type[33];
@@ -706,12 +706,12 @@ heapinit(BAT *b, const char *buf, int *h
&nokey1, &nosorted, &norevsorted, &base,
&free, &size, &storage,
&n) < 12) {
- TRC_CRITICAL(GDK, "invalid format for BBP.dir\n%s", buf);
+ TRC_CRITICAL(GDK, "invalid format for BBP.dir on line %d",
lineno);
return -1;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list