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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to