Changeset: 69cfe8a9891c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69cfe8a9891c
Modified Files:
        sql/server/rel_select.c
        sql/server/rel_updates.c
        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: default
Log Message:

Merge with Jun2020 branch.


diffs (truncated from 566 to 300 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1714,7 +1714,8 @@ rel_compare_exp_(sql_query *query, sql_r
                                return NULL;
                        e = exp_compare_func(sql, ls, rs, rs2, 
compare_func((comp_type)type, quantifier?0:anti), quantifier);
                        if (anti && quantifier)
-                               e = rel_unop_(sql, NULL, e, NULL, "not", 
card_value);
+                               if (!(e = rel_unop_(sql, NULL, e, NULL, "not", 
card_value)))
+                                       return NULL;
                }
                return rel_select(sql->sa, rel, e);
        } else if (!rs2) {
@@ -2178,11 +2179,11 @@ rel_logical_value_exp(sql_query *query, 
        {
                symbol *lo = sc->data.lval->h->data.sym;
                symbol *ro = sc->data.lval->h->next->data.sym;
-
-               sql_exp *ls = rel_logical_value_exp(query, rel, lo, f, ek);
-               sql_exp *rs = rel_logical_value_exp(query, rel, ro, f, ek);
-
-               if (!ls || !rs)
+               sql_exp *ls, *rs;
+
+               if (!(ls = rel_logical_value_exp(query, rel, lo, f, ek)))
+                       return NULL;
+               if (!(rs = rel_logical_value_exp(query, rel, ro, f, ek)))
                        return NULL;
                if (sc->token == SQL_OR)
                        return rel_binop_(sql, rel ? *rel : NULL, ls, rs, NULL, 
"or", card_value);
@@ -2303,8 +2304,7 @@ rel_logical_value_exp(sql_query *query, 
                int insensitive = sc->data.lval->h->next->next->data.i_val;
                int anti = (sc->token == SQL_NOT_LIKE) != 
(sc->data.lval->h->next->next->next->data.i_val != 0);
                sql_subtype *st = sql_bind_localtype("str");
-               sql_exp *le = rel_value_exp(query, rel, lo, f, ek);
-               sql_exp *re, *ee = NULL;
+               sql_exp *le = rel_value_exp(query, rel, lo, f, ek), *re, *ee = 
NULL;
                char *like = insensitive ? (anti ? "not_ilike" : "ilike") : 
(anti ? "not_like" : "like");
                sql_schema *sys = mvc_bind_schema(sql, "sys");
 
@@ -2339,14 +2339,15 @@ rel_logical_value_exp(sql_query *query, 
                int symmetric = sc->data.lval->h->next->data.i_val;
                symbol *ro1 = sc->data.lval->h->next->next->data.sym;
                symbol *ro2 = sc->data.lval->h->next->next->next->data.sym;
-               sql_exp *le = rel_value_exp(query, rel, lo, f, ek);
-               sql_exp *re1 = rel_value_exp(query, rel, ro1, f, ek);
-               sql_exp *re2 = rel_value_exp(query, rel, ro2, f, ek);
                sql_subtype *t1, *t2, *t3;
-               sql_exp *e1 = NULL, *e2 = NULL;
-
+               sql_exp *le, *re1, *re2, *e1 = NULL, *e2 = NULL;
                assert(sc->data.lval->h->next->type == type_int);
-               if (!le || !re1 || !re2) 
+
+               if (!(le = rel_value_exp(query, rel, lo, f, ek)))
+                       return NULL;
+               if (!(re1 = rel_value_exp(query, rel, ro1, f, ek)))
+                       return NULL;
+               if (!(re2 = rel_value_exp(query, rel, ro2, f, ek)))
                        return NULL;
 
                t1 = exp_subtype(le);
@@ -2380,14 +2381,17 @@ rel_logical_value_exp(sql_query *query, 
                }
 
                if (sc->token == SQL_NOT_BETWEEN) {
-                       e1 = rel_binop_(sql, rel ? *rel : NULL, le, re1, NULL, 
"<", card_value);
-                       e2 = rel_binop_(sql, rel ? *rel : NULL, le, re2, NULL, 
">", card_value);
+                       if (!(e1 = rel_binop_(sql, rel ? *rel : NULL, le, re1, 
NULL, "<", card_value)))
+                               return NULL;
+                       if (!(e2 = rel_binop_(sql, rel ? *rel : NULL, le, re2, 
NULL, ">", card_value)))
+                               return NULL;
                } else {
-                       e1 = rel_binop_(sql, rel ? *rel : NULL, le, re1, NULL, 
">=", card_value);
-                       e2 = rel_binop_(sql, rel ? *rel : NULL, le, re2, NULL, 
"<=", card_value);
+                       if (!(e1 = rel_binop_(sql, rel ? *rel : NULL, le, re1, 
NULL, ">=", card_value)))
+                               return NULL;
+                       if (!(e2 = rel_binop_(sql, rel ? *rel : NULL, le, re2, 
NULL, "<=", card_value)))
+                               return NULL;
                }
-               if (!e1 || !e2)
-                       return NULL;
+               assert(e1 && e2);
                if (sc->token == SQL_NOT_BETWEEN) {
                        return rel_binop_(sql, rel ? *rel : NULL, e1, e2, NULL, 
"or", card_value);
                } else {
@@ -2403,9 +2407,13 @@ rel_logical_value_exp(sql_query *query, 
                if (!le)
                        return NULL;
                le = rel_unop_(sql, rel ? *rel : NULL, le, NULL, "isnull", 
card_value);
+               if (!le)
+                       return NULL;
                set_has_no_nil(le);
                if (sc->token != SQL_IS_NULL)
                        le = rel_unop_(sql, rel ? *rel : NULL, le, NULL, "not", 
card_value);
+               if (!le)
+                       return NULL;
                set_has_no_nil(le);
                return le;
        }
@@ -2413,7 +2421,7 @@ rel_logical_value_exp(sql_query *query, 
                sql_exp *le = rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
 
                if (!le)
-                       return le;
+                       return NULL;
                return rel_unop_(sql, rel ? *rel : NULL, le, NULL, "not", 
card_value);
        }
        case SQL_ATOM: {
@@ -2589,8 +2597,7 @@ rel_logical_exp(sql_query *query, sql_re
                int insensitive = sc->data.lval->h->next->next->data.i_val;
                int anti = (sc->token == SQL_NOT_LIKE) != 
(sc->data.lval->h->next->next->next->data.i_val != 0);
                sql_subtype *st = sql_bind_localtype("str");
-               sql_exp *le = rel_value_exp(query, &rel, lo, f, ek);
-               sql_exp *re, *ee = NULL;
+               sql_exp *le = rel_value_exp(query, &rel, lo, f, ek), *re, *ee = 
NULL;
 
                if (!le)
                        return NULL;
@@ -2623,14 +2630,17 @@ rel_logical_exp(sql_query *query, sql_re
                int symmetric = sc->data.lval->h->next->data.i_val;
                symbol *ro1 = sc->data.lval->h->next->next->data.sym;
                symbol *ro2 = sc->data.lval->h->next->next->next->data.sym;
-               sql_exp *le = rel_value_exp(query, &rel, lo, f, ek);
-               sql_exp *re1 = rel_value_exp(query, &rel, ro1, f, ek);
-               sql_exp *re2 = rel_value_exp(query, &rel, ro2, f, ek);
+               sql_exp *le, *re1, *re2;
                sql_subtype *t1, *t2, *t3;
                int flag = 0;
 
                assert(sc->data.lval->h->next->type == type_int);
-               if (!le || !re1 || !re2) 
+
+               if (!(le = rel_value_exp(query, &rel, lo, f, ek)))
+                       return NULL;
+               if (!(re1 = rel_value_exp(query, &rel, ro1, f, ek)))
+                       return NULL;
+               if (!(re2 = rel_value_exp(query, &rel, ro2, f, ek)))
                        return NULL;
 
                t1 = exp_subtype(le);
@@ -2672,19 +2682,24 @@ rel_logical_exp(sql_query *query, sql_re
                if (le->card == CARD_ATOM) {
                        sql_exp *e1, *e2;
                        if (sc->token == SQL_NOT_BETWEEN) {
-                               e1 = rel_binop_(sql, rel, le, re1, NULL, "<", 
card_value);
-                               e2 = rel_binop_(sql, rel, le, re2, NULL, ">", 
card_value);
+                               if (!(e1 = rel_binop_(sql, rel, le, re1, NULL, 
"<", card_value)))
+                                       return NULL;
+                               if (!(e2 = rel_binop_(sql, rel, le, re2, NULL, 
">", card_value)))
+                                       return NULL;
                        } else {
-                               e1 = rel_binop_(sql, rel, le, re1, NULL, ">=", 
card_value);
-                               e2 = rel_binop_(sql, rel, le, re2, NULL, "<=", 
card_value);
+                               if (!(e1 = rel_binop_(sql, rel, le, re1, NULL, 
">=", card_value)))
+                                       return NULL;
+                               if (!(e2 = rel_binop_(sql, rel, le, re2, NULL, 
"<=", card_value)))
+                                       return NULL;
                        }
-                       if (!e1 || !e2)
-                               return NULL;
+                       assert(e1 && e2);
                        if (sc->token == SQL_NOT_BETWEEN) {
                                e1 = rel_binop_(sql, rel, e1, e2, NULL, "or", 
card_value);
                        } else {
                                e1 = rel_binop_(sql, rel, e1, e2, NULL, "and", 
card_value);
                        }
+                       if (!e1)
+                               return NULL;
                        e2 = exp_atom_bool(sql->sa, 1);
                        rel = rel_select(sql->sa, rel, exp_compare(sql->sa,  
e1, e2, cmp_equal));
                } else if (sc->token == SQL_NOT_BETWEEN) {
@@ -2702,7 +2717,8 @@ rel_logical_exp(sql_query *query, sql_re
 
                if (!le)
                        return NULL;
-               le = rel_unop_(sql, rel, le, NULL, "isnull", card_value);
+               if (!(le = rel_unop_(sql, rel, le, NULL, "isnull", card_value)))
+                       return NULL;
                set_has_no_nil(le);
                if (sc->token == SQL_IS_NULL)
                        re = exp_atom_bool(sql->sa, 1);
@@ -2727,8 +2743,7 @@ rel_logical_exp(sql_query *query, sql_re
 
                if (!le)
                        return NULL;
-               le = rel_unop_(sql, rel, le, NULL, "not", card_value);
-               if (le == NULL)
+               if (!(le = rel_unop_(sql, rel, le, NULL, "not", card_value)))
                        return NULL;
                le = exp_compare(sql->sa, le, exp_atom_bool(sql->sa, 1), 
cmp_equal);
                return rel_select(sql->sa, rel, le);
@@ -3195,9 +3210,9 @@ rel_binop(sql_query *query, sql_rel **re
        if (sf)
                return rel_aggr(query, rel, se, f);
 
-       l = rel_value_exp(query, rel, dl->next->next->data.sym, f|sql_farg, 
iek);
-       r = rel_value_exp(query, rel, dl->next->next->next->data.sym, 
f|sql_farg, iek);
-       if (!l || !r)
+       if (!(l = rel_value_exp(query, rel, dl->next->next->data.sym, 
f|sql_farg, iek)))
+               return NULL;
+       if (!(r = rel_value_exp(query, rel, dl->next->next->next->data.sym, 
f|sql_farg, iek)))
                return NULL;
        return rel_binop_(sql, rel ? *rel : NULL, l, r, s, fname, ek.card);
 }
@@ -3242,7 +3257,6 @@ rel_nop(sql_query *query, sql_rel **rel,
        char *sname = qname_schema(l->data.lval);
        sql_schema *s = cur_schema(sql);
        exp_kind iek = {type_value, card_column, FALSE};
-       int err = 0;
 
        if (sname && !(s = mvc_bind_schema(sql, sname)))
                return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
@@ -3256,7 +3270,7 @@ rel_nop(sql_query *query, sql_rel **rel,
                sql_subtype *tpe;
 
                if (!e) 
-                       err = 1;
+                       return NULL;
                append(exps, e);
                if (e) {
                        tpe = exp_subtype(e);
@@ -3265,8 +3279,6 @@ rel_nop(sql_query *query, sql_rel **rel,
                        append(tl, tpe);
                }
        }
-       if (err)
-               return NULL;
        return _rel_nop(sql, s, fname, tl, rel ? *rel : NULL, exps, obj_type, 
nr_args, ek);
 }
 
@@ -3363,6 +3375,8 @@ static sql_exp *
                        sql_exp *e = rel_value_exp(query, &gl, args->data.sym, 
(f | sql_aggr)& ~sql_farg, ek);
                        bool found_one_freevar = false;
 
+                       if (!e)
+                               return NULL;
                        has_args = true;
                        if (gl && gl != ogl) {
                                if (gl->grouped) {
@@ -3378,8 +3392,6 @@ static sql_exp *
                                else
                                        groupby = subquery = gl;
                        }
-                       if (!e)
-                               return NULL;
                        if (!exp_subtype(e)) { /* we also do not expect 
parameters here */
                                char *uaname = GDKmalloc(strlen(aname) + 1);
                                sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) 
"%s: parameters not allowed as arguments to aggregate functions",
@@ -3805,13 +3817,14 @@ rel_case(sql_query *query, sql_rel **rel
                if (token == SQL_NULLIF) {
                        sql_exp *e1, *e2;
 
-                       e1 = rel_value_exp(query, rel, dn->data.sym, f, ek);
-                       e2 = rel_value_exp(query, rel, dn->next->data.sym, f, 
ek);
-                       if (e1 && e2) {
-                               cond = rel_binop_(sql, rel ? *rel : NULL, e1, 
e2, NULL, "=", card_value);
-                               result = exp_null(sql->sa, exp_subtype(e1));
-                               else_exp = exp_ref_save(sql, e1);       /* ELSE 
case */
-                       }
+                       if (!(e1 = rel_value_exp(query, rel, dn->data.sym, f, 
ek)))
+                               return NULL;
+                       if (!(e2 = rel_value_exp(query, rel, 
dn->next->data.sym, f, ek)))
+                               return NULL;
+
+                       cond = rel_binop_(sql, rel ? *rel : NULL, e1, e2, NULL, 
"=", card_value);
+                       result = exp_null(sql->sa, exp_subtype(e1));
+                       else_exp = exp_ref_save(sql, e1);       /* ELSE case */
                        /* COALESCE(e1,e2) == CASE WHEN e1
                           IS NOT NULL THEN e1 ELSE e2 END */
                } else if (token == SQL_COALESCE) {
@@ -3821,23 +3834,31 @@ rel_case(sql_query *query, sql_rel **rel
                                sql_exp *le;
 
                                result = exp_ref_save(sql, cond);
-                               le = rel_unop_(sql, rel ? *rel : NULL, cond, 
NULL, "isnull", card_value);
+                               if (!(le = rel_unop_(sql, rel ? *rel : NULL, 
cond, NULL, "isnull", card_value)))
+                                       return NULL;
                                set_has_no_nil(le);
-                               cond = rel_unop_(sql, rel ? *rel : NULL, le, 
NULL, "not", card_value);
+                               if (!(cond = rel_unop_(sql, rel ? *rel : NULL, 
le, NULL, "not", card_value)))
+                                       return NULL;
                                set_has_no_nil(cond);
                        }
                } else {
                        dlist *when = dn->data.sym->data.lval;
 
                        if (opt_cond) {
-                               sql_exp *l = rel_value_exp(query, rel, 
opt_cond, f, ek);
-                               sql_exp *r = rel_value_exp(query, rel, 
when->h->data.sym, f, ek);
-                               if (!l || !r || rel_convert_types(sql, rel ? 
*rel : NULL, rel ? *rel : NULL, &l, &r, 1, type_equal) < 0)
+                               sql_exp *l, *r;
+
+                               if (!(l = rel_value_exp(query, rel, opt_cond, 
f, ek)))
+                                       return NULL;
+                               if (!(r = rel_value_exp(query, rel, 
when->h->data.sym, f, ek)))
+                                       return NULL;
+                               if (rel_convert_types(sql, rel ? *rel : NULL, 
rel ? *rel : NULL, &l, &r, 1, type_equal) < 0)
                                        return NULL;
                                cond = rel_binop_(sql, rel ? *rel : NULL, l, r, 
NULL, "=", card_value);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to