Changeset: c56cca352541 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c56cca352541
Added Files:
        sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.sql
        sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.err
        sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
        sql/test/BugTracker-2017/Tests/with-alias-bug.6246.sql
        sql/test/BugTracker-2017/Tests/with-alias-bug.6246.stable.err
        sql/test/BugTracker-2017/Tests/with-alias-bug.6246.stable.out
Modified Files:
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/server/sql_atom.c
        sql/server/sql_atom.h
        sql/test/BugTracker-2012/Tests/with_in_derived_table.Bug-3043.stable.out
        sql/test/BugTracker-2017/Tests/All
        sql/test/remote/Tests/ssbm.stable.out.int128
Branch: default
Log Message:

Merge with Dec2016 branch.


diffs (truncated from 871 to 300 lines):

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
@@ -175,7 +175,10 @@ static int
                        const char *nme = 
(op->op3)?op->op3->op4.aval->data.val.sval:op->cname;
                        char buf[64];
 
-                       snprintf(buf,64,"A%s",nme);
+                       if (nme[0] != 'A')
+                               snprintf(buf,64,"A%s",nme);
+                       else
+                               snprintf(buf,64,"%s",nme);
                        varid = newVariable(curBlk, buf, strlen(buf), type);
                        curInstr = pushArgument(curBlk, curInstr, varid);
                        setVarType(curBlk, varid, type);
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -1479,7 +1479,7 @@ SQLupgrades(Client c, mvc *m)
                }
        }
 
-       if ((sql_update_dec2016_sp2(c, m)) != NULL) {
+       if ((err = sql_update_dec2016_sp2(c, m)) != NULL) {
                fprintf(stderr, "!%s\n", err);
                GDKfree(err);
        }
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
@@ -592,6 +592,18 @@ skipIdent( char *r, int *pos)
                (*pos)++;
 }
 
+static void
+skipIdentOrSymbol( char *r, int *pos)
+{
+       while(r[*pos] && (isalnum(r[*pos]) || 
+                         r[*pos] == '_' || r[*pos] == '%' ||
+                         r[*pos] == '<' || r[*pos] == '>' || 
+                         r[*pos] == '/' || r[*pos] == '*' || 
+                         r[*pos] == '-' || r[*pos] == '+' || 
+                         r[*pos] == '~' || r[*pos] == '^' ))
+               (*pos)++;
+}
+
 static int
 readInt( char *r, int *pos)
 {
@@ -724,7 +736,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
                (*pos)++;
                tname = b;
                cname = r + *pos;
-               skipIdent(r, pos);
+               skipIdentOrSymbol(r, pos);
                e = r+*pos;
                skipWS(r, pos);
                old = *e;
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -85,12 +85,14 @@ name_find_column( sql_rel *rel, char *rn
                }
                if (t->idxs.set)
                for (cn = t->idxs.set->h; cn; cn = cn->next) {
-                       sql_idx *c = cn->data;
-                       if (strcmp(c->base.name, name+1 /* skip % */) == 0) {
+                       sql_idx *i = cn->data;
+                       if (strcmp(i->base.name, name+1 /* skip % */) == 0) {
                                *bt = rel;
-                               if (pnr < 0 || (c->t->p &&
-                                   list_position(c->t->p->tables.set, c->t) == 
pnr))
-                                       return c;
+                               if (pnr < 0 || (i->t->p &&
+                                   list_position(i->t->p->tables.set, i->t) == 
pnr)) {
+                                       sql_kc *c = i->columns->h->data;
+                                       return c->c;
+                               }
                        }
                }
                break;
@@ -2720,7 +2722,7 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                atom *ra = exp_flatten(sql, re);
 
                                if (la && ra) {
-                                       atom *a = atom_mul(sql->sa, la, ra);
+                                       atom *a = atom_mul(la, ra);
 
                                        if (a) {
                                                sql_exp *ne = exp_atom(sql->sa, 
a);
@@ -2766,10 +2768,11 @@ exp_simplify_math( mvc *sql, sql_exp *e,
                                        sql_exp *lle = l->h->data;
                                        sql_exp *lre = l->h->next->data;
                                        if (exp_equal(re, lle)==0) {
-                                               atom_inc(exp_value(sql, lre, 
sql->args, sql->argc));
-                                               (*changes)++;
-                                               exp_setname(sql->sa, le, 
exp_relname(e), exp_name(e));
-                                               return le;
+                                               if (atom_inc(exp_value(sql, 
lre, sql->args, sql->argc))) {
+                                                       (*changes)++;
+                                                       exp_setname(sql->sa, 
le, exp_relname(e), exp_name(e));
+                                                       return le;
+                                               }
                                        }
                                }
                                if (!f->func->s && !strcmp(f->func->base.name, 
"sql_mul") && list_length(l) == 2) {
@@ -8355,7 +8358,7 @@ rel_apply_rewrite(int *changes, mvc *sql
                        return l;
                }
        }
-       if (rel->flag == APPLY_LOJ && r->op == op_select) {
+       if (rel->flag == APPLY_LOJ && (r->op == op_select || is_join(r->op))) {
                sql_rel *nr, *ns;
 
                nr = rel_project(sql->sa, rel_dup(r), 
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
@@ -306,7 +306,15 @@ query_exp_optname(mvc *sql, sql_rel *r, 
 {
        switch (q->token) {
        case SQL_WITH:
-               return rel_with_query(sql, q);
+       {
+               sql_rel *tq = rel_with_query(sql, q);
+
+               if (!tq)
+                       return NULL;
+               if (q->data.lval->t->type == type_symbol)
+                       return rel_table_optname(sql, tq, 
q->data.lval->t->data.sym);
+               return tq;
+       }
        case SQL_UNION:
        case SQL_EXCEPT:
        case SQL_INTERSECT:
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -1148,37 +1148,16 @@ atom_cast(sql_allocator *sa, atom *a, sq
 int 
 atom_neg( atom *a )
 {
-       switch( a->tpe.type->localtype) {
-       case TYPE_bte:
-               a->data.val.btval = -a->data.val.btval;
-               break;
-       case TYPE_sht:
-               a->data.val.shval = -a->data.val.shval;
-               break;
-       case TYPE_int:
-               a->data.val.ival = -a->data.val.ival;
-               break;
-       case TYPE_lng:
-               a->data.val.lval = -a->data.val.lval;
-               break;
-#ifdef HAVE_HGE
-       case TYPE_hge:
-               a->data.val.hval = -a->data.val.hval;
-               break;
-#endif
-       case TYPE_flt:
-               a->data.val.fval = -a->data.val.fval;
-               break;
-       case TYPE_dbl:
-               a->data.val.dval = -a->data.val.dval;
-               if (a->data.val.dval == dbl_nil)
-                       return -1;
-               break;
-       default:
+       ValRecord dst;
+       dst.vtype = a->data.vtype;
+       if (VARcalcnegate(&dst, &a->data) != GDK_SUCCEED)
                return -1;
-       }
-       if (a->d != dbl_nil && a->tpe.type->localtype != TYPE_dbl)
-               a->d = -a->d;
+       a->data = dst;
+       dst.vtype = TYPE_dbl;
+       dst.val.dval = a->d;
+       if (VARcalcnegate(&dst, &dst) != GDK_SUCCEED)
+               return -1;
+       a->d = dst.val.dval;
        return 0;
 }
 
@@ -1197,183 +1176,80 @@ atom_cmp(atom *a1, atom *a2)
 atom * 
 atom_add(atom *a1, atom *a2)
 {
+       ValRecord dst;
        if ((!EC_COMPUTE(a1->tpe.type->eclass) && (a1->tpe.type->eclass != 
EC_DEC || a1->tpe.digits != a2->tpe.digits || a1->tpe.scale != a2->tpe.scale)) 
|| a1->tpe.digits < a2->tpe.digits || a1->tpe.type->localtype != 
a2->tpe.type->localtype) {
                return NULL;
        }
-       switch(a1->tpe.type->localtype) {
-       case TYPE_bte:
-                       a1->data.val.btval += a2->data.val.btval;
-                       a1->d = (dbl) a1->data.val.btval;
-                       break;
-       case TYPE_sht:
-                       a1->data.val.shval += a2->data.val.shval;
-                       a1->d = (dbl) a1->data.val.shval;
-                       break;
-       case TYPE_int:
-                       a1->data.val.ival += a2->data.val.ival;
-                       a1->d = (dbl) a1->data.val.ival;
-                       break;
-       case TYPE_lng:
-                       a1->data.val.lval += a2->data.val.lval;
-                       a1->d = (dbl) a1->data.val.lval;
-                       break;
-#ifdef HAVE_HGE
-       case TYPE_hge:
-                       a1->data.val.hval += a2->data.val.hval;
-                       a1->d = (dbl) a1->data.val.hval;
-                       break;
-#endif
-       case TYPE_flt:
-                       a1->data.val.fval += a2->data.val.fval;
-                       a1->d = (dbl) a1->data.val.fval;
-                       break;
-       case TYPE_dbl:
-                       a1->data.val.dval += a2->data.val.dval;
-                       a1->d = (dbl) a1->data.val.dval;
-       default:
-                       break;
-       }
+       dst.vtype = a1->tpe.type->localtype;
+       if (VARcalcadd(&dst, &a1->data, &a2->data, 1) != GDK_SUCCEED)
+               return NULL;
+       a1->data = dst;
+       dst.vtype = TYPE_dbl;
+       if (VARconvert(&dst, &a1->data, 1) == GDK_SUCCEED)
+               a1->d = dst.val.dval;
        return a1;
 }
 
 atom * 
 atom_sub(atom *a1, atom *a2)
 {
+       ValRecord dst;
        if ((!EC_COMPUTE(a1->tpe.type->eclass) && (a1->tpe.type->eclass != 
EC_DEC || a1->tpe.digits != a2->tpe.digits || a1->tpe.scale != a2->tpe.scale)) 
|| a1->tpe.digits < a2->tpe.digits || a1->tpe.type->localtype != 
a2->tpe.type->localtype) {
                return NULL;
        }
-       switch(a1->tpe.type->localtype) {
-       case TYPE_bte:
-                       a1->data.val.btval -= a2->data.val.btval;
-                       a1->d = (dbl) a1->data.val.btval;
-                       break;
-       case TYPE_sht:
-                       a1->data.val.shval -= a2->data.val.shval;
-                       a1->d = (dbl) a1->data.val.shval;
-                       break;
-       case TYPE_int:
-                       a1->data.val.ival -= a2->data.val.ival;
-                       a1->d = (dbl) a1->data.val.ival;
-                       break;
-       case TYPE_lng:
-                       a1->data.val.lval -= a2->data.val.lval;
-                       a1->d = (dbl) a1->data.val.lval;
-                       break;
-#ifdef HAVE_HGE
-       case TYPE_hge:
-                       a1->data.val.hval -= a2->data.val.hval;
-                       a1->d = (dbl) a1->data.val.hval;
-                       break;
-#endif
-       case TYPE_flt:
-                       a1->data.val.fval -= a2->data.val.fval;
-                       a1->d = (dbl) a1->data.val.fval;
-                       break;
-       case TYPE_dbl:
-                       a1->data.val.dval -= a2->data.val.dval;
-                       a1->d = (dbl) a1->data.val.dval;
-       default:
-                       break;
-       }
+       dst.vtype = a1->tpe.type->localtype;
+       if (VARcalcsub(&dst, &a1->data, &a2->data, 1) != GDK_SUCCEED)
+               return NULL;
+       a1->data = dst;
+       dst.vtype = TYPE_dbl;
+       if (VARconvert(&dst, &a1->data, 1) == GDK_SUCCEED)
+               a1->d = dst.val.dval;
        return a1;
 }
 
 atom * 
-atom_mul(sql_allocator *sa, atom *a1, atom *a2)
+atom_mul(atom *a1, atom *a2)
 {
+       ValRecord dst;
        if (!EC_COMPUTE(a1->tpe.type->eclass))
                return NULL;
-       if (a1->tpe.type->localtype != a2->tpe.type->localtype) {
-               if (a1->tpe.type->localtype == TYPE_dbl) {
-                       a1->data.val.dval *= a2->d;
-                       a1->d = (dbl) a1->data.val.dval;
-                       return a1;
-               }
-               if (a2->tpe.type->localtype == TYPE_dbl) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to