Changeset: 2900249a184b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2900249a184b
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_result.c
        sql/include/sql_relation.h
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_propagate.c
        sql/server/rel_rel.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.h
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
        
sql/test/BugTracker-2012/Tests/order_by_on_column_exp.Bug-3193.stable.out
        
sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.stable.out
        sql/test/BugTracker-2014/Tests/groupby_distict.Bug-3423.stable.out
        sql/test/BugTracker-2014/Tests/type_resolution.Bug-3622.stable.out
        sql/test/BugTracker-2014/Tests/typecast_error.Bug-3622.stable.out
        
sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out
        
sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out.int128
        
sql/test/BugTracker/Tests/groupby_with_alias.SF-1520575.stable.out.int128
        sql/test/pg_regress/Tests/numerology.stable.out
Branch: default
Log Message:

split some of the sql_exp flags into seperate bit fields


diffs (truncated from 1919 to 300 lines):

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
@@ -466,12 +466,12 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        stmt *r = exp_bin(be, e->l, left, right, grp, ext, cnt, 
sel);
                        if(!r)
                                return NULL;
-                       return stmt_assign(be, e->name, r, 
GET_PSM_LEVEL(e->flag));
+                       return stmt_assign(be, exp_name(e), r, 
GET_PSM_LEVEL(e->flag));
                } else if (e->flag & PSM_VAR) {
                        if (e->f)
-                               return stmt_vars(be, e->name, e->f, 1, 
GET_PSM_LEVEL(e->flag));
+                               return stmt_vars(be, exp_name(e), e->f, 1, 
GET_PSM_LEVEL(e->flag));
                        else
-                               return stmt_var(be, e->name, &e->tpe, 1, 
GET_PSM_LEVEL(e->flag));
+                               return stmt_var(be, exp_name(e), &e->tpe, 1, 
GET_PSM_LEVEL(e->flag));
                } else if (e->flag & PSM_RETURN) {
                        sql_exp *l = e->l;
                        stmt *r = exp_bin(be, l, left, right, grp, ext, cnt, 
sel);
@@ -1305,8 +1305,8 @@ rel_parse_value(backend *be, char *query
 static stmt *
 stmt_rename(backend *be, sql_rel *rel, sql_exp *exp, stmt *s )
 {
-       const char *name = exp->name;
-       const char *rname = exp->rname;
+       const char *name = exp_name(exp);
+       const char *rname = exp_relname(exp);
        stmt *o = s;
 
        (void)rel;
@@ -1379,7 +1379,7 @@ rel2bin_basetable(backend *be, sql_rel *
        assert(rel->exps);
        for( en = rel->exps->h; en; en = en->next ) {
                sql_exp *exp = en->data;
-               const char *rname = exp->rname?exp->rname:exp->l;
+               const char *rname = exp_relname(exp)?exp_relname(exp):exp->l;
                const char *oname = exp->r;
                stmt *s = NULL;
 
@@ -1420,7 +1420,7 @@ rel2bin_basetable(backend *be, sql_rel *
                        s = stmt_col(be, c, dels);
                }
                s->tname = rname;
-               s->cname = exp->name;
+               s->cname = exp_name(exp);
                list_append(l, s);
        }
        return stmt_list(be, l);
@@ -1636,10 +1636,10 @@ rel2bin_table(backend *be, sql_rel *rel,
                                        for(i=0, en = rel->exps->h, n = 
f->res->h; en; en = en->next, n = n->next, i++ ) {
                                                sql_exp *exp = en->data;
                                                sql_subtype *st = n->data;
-                                               const char *rnme = 
exp->rname?exp->rname:exp->l;
+                                               const char *rnme = 
exp_relname(exp)?exp_relname(exp):exp->l;
                                                stmt *s = stmt_rs_column(be, 
psub, i, st); 
                                
-                                               s = stmt_alias(be, s, rnme, 
exp->name);
+                                               s = stmt_alias(be, s, rnme, 
exp_name(exp));
                                                list_append(l, s);
                                        }
                                } else {
@@ -1702,7 +1702,7 @@ rel2bin_table(backend *be, sql_rel *rel,
        l = sa_list(sql->sa);
        for( en = rel->exps->h; en; en = en->next ) {
                sql_exp *exp = en->data;
-               const char *rnme = exp->rname?exp->rname:exp->l;
+               const char *rnme = exp_relname(exp)?exp_relname(exp):exp->l;
                stmt *s;
 
                /* no relation names */
@@ -1716,7 +1716,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                }
                if (sub && sub->nrcols >= 1 && s->nrcols == 0)
                        s = stmt_const(be, bin_first_column(be, sub), s);
-               s = stmt_alias(be, s, rnme, exp->name);
+               s = stmt_alias(be, s, rnme, exp_name(exp));
                list_append(l, s);
        }
        if (osub && osub->nrcols) 
@@ -4681,7 +4681,7 @@ rel2bin_update(backend *be, sql_rel *rel
        /* lookup the updates */
        for (m = rel->exps->h; m; m = m->next) {
                sql_exp *ce = m->data;
-               sql_column *c = find_sql_column(t, ce->name);
+               sql_column *c = find_sql_column(t, exp_name(ce));
 
                if (c) 
                        updates[c->colnr] = bin_find_column(be, update, ce->l, 
ce->r);
@@ -4693,7 +4693,7 @@ rel2bin_update(backend *be, sql_rel *rel
        updcol = first_updated_col(updates, list_length(t->columns.set));
        for (m = rel->exps->h; m; m = m->next) {
                sql_exp *ce = m->data;
-               sql_idx *i = find_sql_idx(t, ce->name+1);
+               sql_idx *i = find_sql_idx(t, exp_name(ce)+1);
 
                if (i) {
                        stmt *update_idx = bin_find_column(be, update, ce->l, 
ce->r), *is = NULL;
@@ -4724,7 +4724,7 @@ rel2bin_update(backend *be, sql_rel *rel
 /* apply the update */
        for (m = rel->exps->h; m; m = m->next) {
                sql_exp *ce = m->data;
-               sql_column *c = find_sql_column(t, ce->name);
+               sql_column *c = find_sql_column(t, exp_name(ce));
 
                if (c) 
                        append(l, stmt_update_col(be,  c, tids, 
updates[c->colnr]));
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -190,7 +190,7 @@ static int
                        if (e->type == e_atom)
                                snprintf(buf,64,"A%d",e->flag);
                        else
-                               snprintf(buf,64,"A%s",e->name);
+                               snprintf(buf,64,"A%s",exp_name(e));
                        varid = newVariable(curBlk, (char *)buf, strlen(buf), 
type);
                        curInstr = pushArgument(curBlk, curInstr, varid);
                        setVarType(curBlk, varid, type);
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -1089,13 +1089,13 @@ mvc_export_prepare(mvc *c, stream *out, 
                                len3++;
                                max3 *= 10;
                        }
-                       name = e->rname;
+                       name = exp_relname(e);
                        if (!name && e->type == e_column && e->l)
                                name = e->l;
                        slen = name ? strlen(name) : 0;
                        if (slen > len5)
                                len5 = slen;
-                       name = e->name;
+                       name = exp_name(e);
                        if (!name && e->type == e_column && e->r)
                                name = e->r;
                        slen = name ? strlen(name) : 0;
@@ -1140,10 +1140,10 @@ mvc_export_prepare(mvc *c, stream *out, 
                        sql_exp *e = n->data;
 
                        t = exp_subtype(e);
-                       name = e->name;
+                       name = exp_name(e);
                        if (!name && e->type == e_column && e->r)
                                name = e->r;
-                       rname = e->rname;
+                       rname = exp_relname(e);
                        if (!rname && e->type == e_column && e->l)
                                rname = e->l;
 
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
@@ -25,24 +25,26 @@ typedef enum expression_type {
 #define CARD_AGGR 2
 #define CARD_MULTI 3
 
+typedef struct sql_exp_name {
+       unsigned int label;
+       const char *name;
+       const char *rname;
+} sql_exp_name;
+
 typedef struct expression {
        expression_type type;   /* atom, cmp, func/aggr */
-       const char *name;
-       const char *rname;
+       sql_exp_name alias;
        void *l;
        void *r;
-       void *f;        /* func's and aggr's */
-                       /* e_cmp may have have 2 arguments */
-       int flag;       /* EXP_DISTINCT, NO_NIL, ASCENDING, NULLS_LAST, cmp 
types */
-       int freevar;    /* free variable, ie binds to the upper dependent join 
*/
-       unsigned char card;     /* card
-                                  (0 truth value!)
-                                  (1 atoms)
-                                  (2 aggr)
-                                  (3 multi value)
-                       */
+       void *f;        /* func's and aggr's, also e_cmp may have have 2 
arguments */
+       unsigned int
+        flag:18,       /* EXP_DISTINCT, NO_NIL, ASCENDING, NULLS_LAST, cmp 
types */
+        card:2,        /* card (0 truth value!) (1 atoms) (2 aggr) (3 multi 
value) */
+        freevar:1,     /* free variable, ie binds to the upper dependent join 
*/
+        intern:1,
+        anti:1,
+        used:1;        /* used for quick dead code removal */
        sql_subtype     tpe;
-       int used;       /* used for quick dead code removal */
        void *p;        /* properties for the optimizer */
 } sql_exp;
 
@@ -57,10 +59,8 @@ typedef struct expression {
 #define ASCENDING      16
 #define CMPMASK                (ASCENDING-1)
 #define get_cmp(e)     (e->flag&CMPMASK)
-#define ANTISEL        32
-#define HAS_NO_NIL     64
-#define EXP_INTERN     128
-#define NULLS_LAST     256
+#define HAS_NO_NIL     32
+#define NULLS_LAST     64
 
 #define UPD_COMP               1
 #define UPD_LOCKED             2
@@ -253,9 +253,16 @@ typedef enum operator_type {
        e->flag |= ((dir&1)?ASCENDING:0) | ((dir&2)?NULLS_LAST:0)
 
 #define is_anti(e) \
-       ((e->flag&ANTISEL)==ANTISEL)
+       ((e)->anti)
 #define set_anti(e) \
-       e->flag |= ANTISEL
+       (e)->anti = 1
+#define is_intern(e) \
+       ((e)->intern)
+#define set_intern(e) \
+       (e)->intern = 1
+
+#define has_label(e) \
+       ((e)->alias.label > 0)
 
 /* used for expressions and relations */
 #define need_distinct(e) \
@@ -265,12 +272,6 @@ typedef enum operator_type {
 #define set_nodistinct(e) \
        e->flag &= (~EXP_DISTINCT)
 
-/* used for expressions and relations */
-#define is_intern(e) \
-       (e->type != e_atom && (e->flag&EXP_INTERN)==EXP_INTERN)
-#define set_intern(e) \
-       e->flag |= EXP_INTERN
-
 #define is_processed(rel) \
        ((rel)->processed)
 #define set_processed(rel) \
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -80,7 +80,7 @@ rewrite_replica( mvc *sql, sql_rel *rel,
                sql_exp *e = n->data;
                sql_exp *ne = m->data;
 
-               exp_setname(sql->sa, ne, e->rname, e->name);
+               exp_prop_alias(ne, e);
        }
        rel_destroy(rel);
 
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
@@ -188,20 +188,24 @@ exp_print(mvc *sql, stream *fout, sql_ex
                if (e->l)
                        mnstr_printf(fout, "\"%s\".", (char*)e->l);
                mnstr_printf(fout, "\"%s\"", (char*)e->r);
-               if (e->rname && e->name && e->l && e->r &&
-                       strcmp(e->rname, e->l) == 0 &&
-                       strcmp(e->name, e->r) == 0) 
+               if (exp_relname(e) && exp_name(e) && e->l && e->r &&
+                       strcmp(exp_relname(e), e->l) == 0 &&
+                       strcmp(exp_name(e), e->r) == 0) 
                        alias = 0;
-               if (!e->rname && e->name && strcmp(e->name, e->r)==0)
+               if (!exp_relname(e) && exp_name(e) && strcmp(exp_name(e), 
e->r)==0)
                        alias = 0;
                break;
        case e_cmp: 
                if (e->flag == cmp_in || e->flag == cmp_notin) {
                        exp_print(sql, fout, e->l, depth, refs, 0, alias);
+                       if (is_anti(e))
+                               mnstr_printf(fout, " !");
                        cmp_print(sql, fout, get_cmp(e));
                        exps_print(sql, fout, e->r, depth, refs, alias, 1);
                } else if (get_cmp(e) == cmp_or) {
                        exps_print(sql, fout, e->l, depth, refs, alias, 1);
+                       if (is_anti(e))
+                               mnstr_printf(fout, " !");
                        cmp_print(sql, fout, get_cmp(e));
                        exps_print(sql, fout, e->r, depth, refs, alias, 1);
                } else if (get_cmp(e) == cmp_filter) {
@@ -215,11 +219,11 @@ exp_print(mvc *sql, stream *fout, sql_ex
                } else if (e->f) {
                        exp_print(sql, fout, e->r, depth+1, refs, 0, 0);
                        if (is_anti(e))
-                               mnstr_printf(fout, " ! ");
+                               mnstr_printf(fout, " !");
                        cmp_print(sql, fout, 
swap_compare(range2lcompare(e->flag)) );
                        exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
                        if (is_anti(e))
-                               mnstr_printf(fout, " ! ");
+                               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_SYMMETRIC)
@@ -227,7 +231,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
                } else {
                        exp_print(sql, fout, e->l, depth+1, refs, 0, 0);
                        if (is_anti(e))
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to