Changeset: 511d9879f8ff for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/511d9879f8ff
Modified Files:
monetdb5/mal/mal_interpreter.c
testing/sqllogictest.py
Branch: default
Log Message:
Merged with Jul2021
diffs (truncated from 1368 to 300 lines):
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -505,6 +505,7 @@ str runMALsequence(Client cntxt, MalBlkP
runtimeProfileBegin(cntxt, mb, stk, getInstrPtr(mb,0),
&runtimeProfileFunction);
mb->starttime = GDKusec();
if (cntxt->sessiontimeout && mb->starttime - cntxt->session >
cntxt->sessiontimeout) {
+ runtimeProfileFinish(cntxt, mb, stk);
if ( backup != backups) GDKfree(backup);
if ( garbage != garbages) GDKfree(garbage);
throw(MAL, "mal.interpreter", SQLSTATE(HYT00)
RUNTIME_SESSION_TIMEOUT);
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -161,25 +161,28 @@ clearQRYqueue(size_t idx)
static void
advanceQRYqueue(void)
{
- qhead++;
- if( qhead == qsize)
- qhead = 0;
- if( qtail == qhead)
- qtail++;
- if( qtail == qsize)
- qtail = 0;
- /* clean out the element */
- str s = QRYqueue[qhead].query;
- if( s){
- /* don;t wipe them when they are still running, prepared, or
paused */
- /* The upper layer has assured there is at least one slot
available */
- if(QRYqueue[qhead].status != 0 && (QRYqueue[qhead].status[0] ==
'r' || QRYqueue[qhead].status[0] == 'p')){
- advanceQRYqueue();
- return;
+ bool found_empty_slot = false;
+
+ while (!found_empty_slot) {
+ qhead++;
+ if( qhead == qsize)
+ qhead = 0;
+ if( qtail == qhead)
+ qtail++;
+ if( qtail == qsize)
+ qtail = 0;
+ /* clean out the element */
+ str s = QRYqueue[qhead].query;
+ if (!s || QRYqueue[qhead].status == 0 ||
(QRYqueue[qhead].status[0] != 'r' && QRYqueue[qhead].status[0] != 'p')) {
+ /* don't wipe them when they are still running,
prepared, or paused */
+ /* The upper layer has assured there is at least one
slot available */
+ if (s) {
+ GDKfree(s);
+ GDKfree(QRYqueue[qhead].username);
+ clearQRYqueue(qhead);
+ }
+ found_empty_slot = true;
}
- GDKfree(s);
- GDKfree(QRYqueue[qhead].username);
- clearQRYqueue(qhead);
}
}
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -191,7 +191,7 @@ STRbatAscii(Client cntxt, MalBlkPtr mb,
if ((msg = str_wchr_at(&next, x, 0)) != MAL_SUCCEED)
goto bailout;
- vals[p1] = next;
+ vals[i] = next;
nils |= is_int_nil(next);
}
} else {
@@ -201,7 +201,7 @@ STRbatAscii(Client cntxt, MalBlkPtr mb,
if ((msg = str_wchr_at(&next, x, 0)) != MAL_SUCCEED)
goto bailout;
- vals[p1] = next;
+ vals[i] = next;
nils |= is_int_nil(next);
}
}
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
@@ -56,9 +56,7 @@ static stmt *
stmt_selectnil( backend *be, stmt *col)
{
sql_subtype *t = tail_type(col);
- stmt *n = stmt_atom(be, atom_general(be->mvc->sa, t, NULL));
- stmt *nn = stmt_uselect2(be, col, n, n, 3, NULL, 0, 1);
- return nn;
+ return stmt_uselect(be, col, stmt_atom(be, atom_general(be->mvc->sa, t,
NULL)), cmp_equal, NULL, 0, 1);
}
static stmt *
@@ -378,9 +376,7 @@ static stmt *
stmt_selectnonil( backend *be, stmt *col, stmt *s )
{
sql_subtype *t = tail_type(col);
- stmt *n = stmt_atom(be, atom_general(be->mvc->sa, t, NULL));
- stmt *nn = stmt_uselect2(be, col, n, n, 3, s, 1, 1);
- return nn;
+ return stmt_uselect(be, col, stmt_atom(be, atom_general(be->mvc->sa, t,
NULL)), cmp_equal, s, 1, 1);
}
static int
@@ -1510,7 +1506,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
if (r2 && r2->nrcols == 0)
r2 = stmt_const(be,
bin_find_smallest_column(be, swapped?left:right), r2);
if (r2) {
- s = stmt_join2(be, l, r, r2,
(comp_type)e->flag, is_anti(e), swapped);
+ s = stmt_join2(be, l, r, r2,
(comp_type)e->flag, is_anti(e), is_symmetric(e), swapped);
} else if (swapped) {
s = stmt_join(be, r, l, is_anti(e),
swap_compare((comp_type)e->flag), 0, is_semantics(e), false);
} else {
@@ -1520,7 +1516,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
if (r2) { /* handle all cases in stmt_uselect,
reducing, non reducing, scalar etc */
if (l->nrcols == 0 && ((sel && sel->nrcols > 0)
|| r->nrcols > 0 || r2->nrcols > 0 || reduce))
l = left ? stmt_const(be,
bin_find_smallest_column(be, left), l) : column(be, l);
- s = stmt_uselect2(be, l, r, r2,
(comp_type)e->flag, sel, is_anti(e), reduce);
+ s = stmt_uselect2(be, l, r, r2,
(comp_type)e->flag, sel, is_anti(e), is_symmetric(e), reduce);
} else {
/* value compare or select */
if ((!reduce || (l->nrcols == 0 && r->nrcols ==
0)) && (e->flag == mark_in || e->flag == mark_notin)) {
@@ -2414,7 +2410,7 @@ split_join_exps(sql_rel *rel, list *join
/* we can handle thetajoins, rangejoins and filter
joins (like) */
/* ToDo how about atom expressions? */
if (e->type == e_cmp) {
- int flag = e->flag & ~CMP_BETWEEN;
+ int flag = e->flag;
/* check if its a select or join expression, ie
use only expressions of one relation left and of the other right (than join) */
if (flag < cmp_filter || flag == mark_in ||
flag == mark_notin) { /* theta and range joins */
/* join or select ? */
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
@@ -1618,8 +1618,7 @@ argumentZero(MalBlkPtr mb, int tpe)
*/
static InstrPtr
-select2_join2(backend *be, stmt *op1, stmt *op2, stmt *op3, int cmp, stmt
**Sub, int anti, int swapped, int type, int
- reduce)
+select2_join2(backend *be, stmt *op1, stmt *op2, stmt *op3, int cmp, stmt
**Sub, int anti, int symmetric, int swapped, int type, int reduce)
{
MalBlkPtr mb = be->mb;
InstrPtr p, q;
@@ -1630,7 +1629,7 @@ select2_join2(backend *be, stmt *op1, st
if (op1->nr < 0 || (sub && sub->nr < 0))
return NULL;
l = op1->nr;
- if (((cmp & CMP_BETWEEN && cmp & CMP_SYMMETRIC) || op2->nrcols > 0 ||
op3->nrcols > 0 || !reduce) && (type == st_uselect2)) {
+ if ((symmetric || op2->nrcols > 0 || op3->nrcols > 0 || !reduce) &&
(type == st_uselect2)) {
int k;
int nrcols = (op1->nrcols || op2->nrcols || op3->nrcols);
@@ -1666,7 +1665,7 @@ select2_join2(backend *be, stmt *op1, st
sub = NULL;
}
- p = pushBit(mb, p, (cmp & CMP_SYMMETRIC) != 0); /* symmetric */
+ p = pushBit(mb, p, (symmetric)?TRUE:FALSE); /* symmetric */
p = pushBit(mb, p, (cmp & 1) != 0); /* lo inclusive */
p = pushBit(mb, p, (cmp & 2) != 0); /* hi inclusive */
p = pushBit(mb, p, FALSE); /* nils_false */
@@ -1767,10 +1766,9 @@ select2_join2(backend *be, stmt *op1, st
}
q = pushBit(mb, q, anti);
if (type == st_uselect2) {
- if (cmp & CMP_BETWEEN)
- q = pushBit(mb, q, TRUE); /* all nil's are != */
+ q = pushBit(mb, q, TRUE); /* all nil's are != */
} else {
- q = pushBit(mb, q, (cmp & CMP_SYMMETRIC)?TRUE:FALSE);
+ q = pushBit(mb, q, (symmetric)?TRUE:FALSE);
}
if (type == st_join2)
q = pushNil(mb, q, TYPE_lng); /* estimate */
@@ -1794,10 +1792,10 @@ select2_join2(backend *be, stmt *op1, st
}
stmt *
-stmt_uselect2(backend *be, stmt *op1, stmt *op2, stmt *op3, int cmp, stmt
*sub, int anti, int reduce)
+stmt_uselect2(backend *be, stmt *op1, stmt *op2, stmt *op3, int cmp, stmt
*sub, int anti, int symmetric, int reduce)
{
stmt *sel = sub;
- InstrPtr q = select2_join2(be, op1, op2, op3, cmp, &sub, anti, 0,
st_uselect2, reduce);
+ InstrPtr q = select2_join2(be, op1, op2, op3, cmp, &sub, anti,
symmetric, 0, st_uselect2, reduce);
if (q) {
stmt *s = stmt_create(be->mvc->sa, st_uselect2);
@@ -2253,9 +2251,9 @@ stmt_left_project(backend *be, stmt *op1
}
stmt *
-stmt_join2(backend *be, stmt *l, stmt *ra, stmt *rb, int cmp, int anti, int
swapped)
+stmt_join2(backend *be, stmt *l, stmt *ra, stmt *rb, int cmp, int anti, int
symmetric, int swapped)
{
- InstrPtr q = select2_join2(be, l, ra, rb, cmp, NULL, anti, swapped,
st_join2, 1/*reduce semantics*/);
+ InstrPtr q = select2_join2(be, l, ra, rb, cmp, NULL, anti, symmetric,
swapped, st_join2, 1/*reduce semantics*/);
if (q) {
stmt *s = stmt_create(be->mvc->sa, st_join2);
if (s == NULL) {
diff --git a/sql/backends/monet5/sql_statement.h
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -187,7 +187,7 @@ extern stmt *stmt_uselect(backend *be, s
2 == l <= x < h
3 == l <= x <= h
*/
-extern stmt *stmt_uselect2(backend *be, stmt *op1, stmt *op2, stmt *op3, int
cmp, stmt *sub, int anti, int reduce);
+extern stmt *stmt_uselect2(backend *be, stmt *op1, stmt *op2, stmt *op3, int
cmp, stmt *sub, int anti, int symmetric, int reduce);
extern stmt *stmt_genselect(backend *be, stmt *lops, stmt *rops, sql_subfunc
*f, stmt *sub, int anti);
extern stmt *stmt_tunion(backend *be, stmt *op1, stmt *op2);
@@ -196,7 +196,7 @@ extern stmt *stmt_tdiff2(backend *be, st
extern stmt *stmt_tinter(backend *be, stmt *op1, stmt *op2, bool single);
extern stmt *stmt_join(backend *be, stmt *op1, stmt *op2, int anti, comp_type
cmptype, int need_left, int is_semantics, bool single);
-extern stmt *stmt_join2(backend *be, stmt *l, stmt *ra, stmt *rb, int cmp, int
anti, int swapped);
+extern stmt *stmt_join2(backend *be, stmt *l, stmt *ra, stmt *rb, int cmp, int
anti, int symmetric, int swapped);
/* generic join operator, with a left and right statement list */
extern stmt *stmt_genjoin(backend *be, stmt *l, stmt *r, sql_subfunc *op, int
anti, int swapped);
extern stmt *stmt_semijoin(backend *be, stmt *l, stmt *r, stmt *lcand, stmt
*rcand, int is_semantics, bool single);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -176,10 +176,6 @@ typedef enum comp_type {
cmp_left_project = 15 /* last step of outer join */
} comp_type;
-/* for ranges we keep the requirment for symmetric */
-#define CMP_SYMMETRIC 8
-#define CMP_BETWEEN 16
-
#define is_theta_exp(e) ((e) == cmp_gt || (e) == cmp_gte || (e) == cmp_lte ||\
(e) == cmp_lt || (e) ==
cmp_equal || (e) == cmp_notequal)
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -59,7 +59,8 @@ typedef struct expression {
base:1,
ref:1, /* used to indicate an other expression may reference
this one */
- used:1; /* used for quick dead code removal */
+ used:1, /* used for quick dead code removal */
+ symmetric:1; /* compare between symmetric */
sql_subtype tpe;
void *p; /* properties for the optimizer */
} sql_exp;
@@ -232,6 +233,8 @@ typedef enum operator_type {
#define set_anti(e) (e)->anti = 1
#define is_semantics(e) ((e)->semantics)
#define set_semantics(e) (e)->semantics = 1
+#define is_symmetric(e) ((e)->symmetric)
+#define set_symmetric(e) (e)->symmetric = 1
#define is_intern(e) ((e)->intern)
#define set_intern(e) (e)->intern = 1
#define is_basecol(e) ((e)->base)
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -267,9 +267,8 @@ exp_print(mvc *sql, stream *fout, sql_ex
mnstr_printf(fout, " !");
cmp_print(sql, fout, range2rcompare(e->flag) );
exp_print(sql, fout, e->f, depth+1, refs, 0, 0);
- if (e->flag & CMP_BETWEEN)
- mnstr_printf(fout, " BETWEEN ");
- if (e->flag & CMP_SYMMETRIC)
+ mnstr_printf(fout, " BETWEEN ");
+ if (e->symmetric)
mnstr_printf(fout, " SYM ");
} else {
exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
@@ -1420,7 +1419,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
return NULL;
return exp_in(sql->sa, exp, exps, f);
} else {
- int sym = 0, between = 0;
+ int sym = 0;
sql_exp *e = exp_read(sql, lrel, rrel, top_exps, r,
pos, 0);
if (!e)
@@ -1428,7 +1427,6 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if (strncmp(r+*pos, "BETWEEN", strlen("BETWEEN")) ==
0) {
(*pos)+= (int) strlen("BETWEEN");
skipWS(r,pos);
- between = 1;
}
if (strncmp(r+*pos, "SYM", strlen("SYM")) == 0) {
(*pos)+= (int) strlen("SYM");
@@ -1436,20 +1434,12 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
sym = 1;
}
if (e->type == e_cmp) {
- sql_exp *ne = exp_compare2(sql->sa, e->l, exp,
e->r, compare2range(swap_compare((comp_type)f), e->flag &
~(CMP_SYMMETRIC|CMP_BETWEEN)));
- if (sym)
- ne->flag |= CMP_SYMMETRIC;
- if (between)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list