Changeset: 3e3d7d5f8dc9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3e3d7d5f8dc9
Added Files:
        sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.sql
        
sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.stable.err
        
sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.stable.out
        sql/test/LSST/Tests/cleanup.reqtests
        sql/test/LSST/Tests/dbQuery000.reqtests
        sql/test/LSST/Tests/dbQuery001.reqtests
        sql/test/LSST/Tests/dbQuery002.reqtests
        sql/test/LSST/Tests/dbQuery003.reqtests
        sql/test/LSST/Tests/dbQuery004.reqtests
        sql/test/LSST/Tests/dbQuery005.reqtests
        sql/test/LSST/Tests/dbQuery007.reqtests
        sql/test/LSST/Tests/dbQuery008.reqtests
        sql/test/LSST/Tests/dbQuery009.reqtests
        sql/test/LSST/Tests/dbQuery010.reqtests
        sql/test/LSST/Tests/dbQuery011.reqtests
        sql/test/LSST/Tests/dbQuery012.reqtests
        sql/test/LSST/Tests/dbQuery013.reqtests
        sql/test/LSST/Tests/dbQuery014.reqtests
        sql/test/LSST/Tests/dbQuery015.reqtests
        sql/test/LSST/Tests/dbQuery016.reqtests
        sql/test/LSST/Tests/dbQuery017.reqtests
        sql/test/LSST/Tests/dbQuery018.reqtests
        sql/test/LSST/Tests/dbQuery019.reqtests
        sql/test/LSST/Tests/dbQuery020.reqtests
        sql/test/LSST/Tests/dbQuery022.reqtests
        sql/test/LSST/Tests/dbQuery024.reqtests
        sql/test/LSST/Tests/dbQuery025.reqtests
        sql/test/LSST/Tests/dbQuery026.reqtests
        sql/test/LSST/Tests/dbQuery027.reqtests
        sql/test/LSST/Tests/dbQuery028.reqtests
        sql/test/LSST/Tests/dbQuery029.reqtests
        sql/test/LSST/Tests/dbQuery030.reqtests
        sql/test/LSST/Tests/dbQuery031.reqtests
        sql/test/LSST/Tests/dbQuery032.reqtests
        sql/test/LSST/Tests/dbQuery034.reqtests
        sql/test/LSST/Tests/dbQuery035.reqtests
        sql/test/LSST/Tests/dbQuery036.reqtests
        sql/test/LSST/Tests/dbQuery037.reqtests
        sql/test/LSST/Tests/dbQuery038.reqtests
        sql/test/LSST/Tests/dbQuery041.reqtests
        sql/test/LSST/Tests/dbQuery042.reqtests
        sql/test/LSST/Tests/dbQuery043.reqtests
        sql/test/LSST/Tests/dbQuery044.reqtests
        sql/test/LSST/Tests/dbQuery045.reqtests
        sql/test/LSST/Tests/dbQuery046.reqtests
        sql/test/LSST/Tests/dbQuery047.reqtests
        sql/test/LSST/Tests/dbQuery048.reqtests
        sql/test/LSST/Tests/dbQuery053.reqtests
        sql/test/LSST/Tests/dbQuery054.reqtests
        sql/test/LSST/Tests/dbQuery055.reqtests
        sql/test/LSST/Tests/dbQuery056.reqtests
        sql/test/LSST/Tests/dbQuery066.reqtests
        sql/test/Users/Tests/privs.reqtests
        sql/test/Users/Tests/privs2.reqtests
        sql/test/Users/Tests/role1.reqtests
        sql/test/Users/Tests/role2.reqtests
        sql/test/Users/Tests/table.reqtests
        sql/test/Users/Tests/test_privs2_p1.reqtests
        sql/test/Users/Tests/test_privs2_p2.reqtests
        sql/test/Users/Tests/test_privs_p1.reqtests
        sql/test/Users/Tests/test_privs_p2.reqtests
        sql/test/Users/Tests/unknown_user.reqtests
        sql/test/broken_delete/Tests/broken_delete_1.reqtests
        sql/test/broken_delete/Tests/broken_delete_2.reqtests
        sql/test/broken_delete/Tests/broken_delete_3.reqtests
        sql/test/broken_delete/Tests/broken_delete_4.reqtests
        sql/test/broken_delete/Tests/broken_delete_5.reqtests
        sql/test/rdf/Tests/drop_tables_t.reqtests
        sql/test/rdf/Tests/drop_tables_v.reqtests
        sql/test/rdf/Tests/q1_t.reqtests
        sql/test/rdf/Tests/q1_v.reqtests
        sql/test/rdf/Tests/q2_28_t.reqtests
        sql/test/rdf/Tests/q2_28_v.reqtests
        sql/test/rdf/Tests/q2_t.reqtests
        sql/test/rdf/Tests/q2_v.reqtests
        sql/test/rdf/Tests/q3_28_t.reqtests
        sql/test/rdf/Tests/q3_28_v.reqtests
        sql/test/rdf/Tests/q3_t.reqtests
        sql/test/rdf/Tests/q3_v.reqtests
        sql/test/rdf/Tests/q4_28_t.reqtests
        sql/test/rdf/Tests/q4_28_v.reqtests
        sql/test/rdf/Tests/q4_t.reqtests
        sql/test/rdf/Tests/q4_v.reqtests
        sql/test/rdf/Tests/q5_t.reqtests
        sql/test/rdf/Tests/q5_v.reqtests
        sql/test/rdf/Tests/q6_28_t.reqtests
        sql/test/rdf/Tests/q6_28_v.reqtests
        sql/test/rdf/Tests/q6_t.reqtests
        sql/test/rdf/Tests/q6_v.reqtests
        sql/test/rdf/Tests/q7_t.reqtests
        sql/test/rdf/Tests/q7_v.reqtests
        sql/test/rdf/Tests/q8_t.reqtests
        sql/test/rdf/Tests/q8_v.reqtests
        sql/test/sql_xml/Tests/xml.reqtests
        sql/test/sql_xml/Tests/xml_attribute_parsing.SF-1855673.reqtests
        sql/test/sql_xml/Tests/xmlelement_segfault.SF-2812767.reqtests
        sql/test/testdb/Tests/testdb-dump.reqtests
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out
        sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
        sql/test/BugTracker-2013/Tests/All
Branch: default
Log Message:

Merge with Feb2013 branch.


diffs (truncated from 977 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
@@ -1162,7 +1162,7 @@ static stmt *
 rel2bin_table( mvc *sql, sql_rel *rel, list *refs)
 {
        list *l; 
-       stmt *sub = NULL;
+       stmt *sub = NULL, *osub = NULL;
        node *en, *n;
        sql_exp *op = rel->r;
 
@@ -1194,11 +1194,10 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
                        assert(0);
                        return NULL;    
                }
-               sub = psub;
                l = sa_list(sql->sa);
                for(i = 0, n = t->columns.set->h; n; n = n->next, i++ ) {
                        sql_column *c = n->data;
-                       stmt *s = stmt_rs_column(sql->sa, sub, i, &c->type); 
+                       stmt *s = stmt_rs_column(sql->sa, psub, i, &c->type); 
                        char *nme = c->base.name;
                        char *rnme = exp_find_rel_name(op);
 
@@ -1206,6 +1205,10 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
                        s = stmt_alias(sql->sa, s, rnme, sa_strdup(sql->sa, 
nme));
                        list_append(l, s);
                }
+               if (sub && sub->nrcols) { /* add sub */
+                       list_merge(l, sub->op4.lval, NULL);
+                       osub = sub;
+               }
                sub = stmt_list(sql->sa, l);
        } else if (rel->l) {
                int i, argc;
@@ -1266,6 +1269,8 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
                s = stmt_alias(sql->sa, s, rnme, sa_strdup(sql->sa, exp->name));
                list_append(l, s);
        }
+       if (osub && osub->nrcols) 
+               list_merge(l, osub->op4.lval, NULL);
        sub = stmt_list(sql->sa, l);
        return sub;
 }
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
@@ -3824,6 +3824,10 @@ rel_reduce_groupby_exps(int *changes, mv
                }
                if (i) { /* forall tables find pkey and 
                                remove useless other columns */
+                       /* TODO also remove group by columns which are related 
to
+                        * the other columns using a foreign-key join (n->1), 
ie 1
+                        * on the to be removed side.
+                        */
                        for(j = 0; j < i; j++) {
                                int l, nr = 0, cnr = 0;
 
@@ -5684,6 +5688,7 @@ rel_rename(mvc *sql, sql_rel *rel, list 
                nme = number2name(name, 16, ++sql->label);
                /* label + put aliases list into aliases */
                nrel->l = rel->l;
+               nrel->r = rel->r;
                nrel->exps = new_exp_list(sql->sa);
                for (n = rel->exps->h; n; n = n->next) {
                        sql_exp *e = n->data, *ne, *a;
@@ -5756,7 +5761,10 @@ rel_apply_rename(mvc *sql, sql_rel *rel)
                return rel;
        switch(rel->op) {
        case op_basetable:
+               return rel;
        case op_table:
+               if (rel->l)
+                       rel->l = rel_apply_rename(sql, rel->l);
                return rel;
        case op_project:
        case op_select: 
@@ -5861,6 +5869,18 @@ rel_apply_rewrite(int *changes, mvc *sql
                (*changes)++;
                return nrel;
        }
+       /* table function (TODO should output any input cols) */
+       if (r->op == op_table && r->l) {
+               /*
+               int used = rel_uses_exps(r->l, rel->exps);
+
+               if (used) {
+               */
+                       /* ugh */
+                       r->l = rel->l;
+                       return r;
+               //}
+       } 
        if (r->op == op_table || r->op == op_basetable) {
                if (rel->flag == APPLY_LOJ)
                        rel->op = op_left;
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
@@ -1904,6 +1904,24 @@ exp_convert_inplace(mvc *sql, sql_subtyp
        return NULL;
 }
 
+static sql_exp *
+rel_numeric_supertype(mvc *sql, sql_exp *e )
+{
+       sql_subtype *tp = exp_subtype(e);
+
+       if (tp->type->eclass == EC_DEC) {
+               sql_subtype *dtp = sql_bind_localtype("dbl");
+
+               return rel_check_type(sql, dtp, e, type_cast);
+       }
+       if (tp->type->eclass == EC_NUM) {
+               sql_subtype *ltp = sql_bind_localtype("lng");
+
+               return rel_check_type(sql, ltp, e, type_cast);
+       }
+       return e;
+}
+
 sql_exp *
 rel_check_type(mvc *sql, sql_subtype *t, sql_exp *exp, int tpe)
 {
@@ -3219,6 +3237,11 @@ rel_unop_(mvc *sql, sql_exp *e, sql_sche
                        f->res.digits = t->digits;
                        f->res.scale = t->scale;
                }
+               if (card == card_relation && e->card > CARD_ATOM) {
+                       sql_subaggr *zero_or_one = sql_bind_aggr(sql->sa, 
sql->session->schema, "zero_or_one", exp_subtype(e));
+
+                       e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, CARD_ATOM, 
0);
+               }
                return exp_unop(sql->sa, e, f);
        } else if (e) {
                char *type = exp_subtype(e)->type->sqlname;
@@ -3336,6 +3359,16 @@ rel_binop_(mvc *sql, sql_exp *l, sql_exp
                } else if (f->func->fix_scale == DIGITS_ADD) {
                        f->res.digits = (t1->digits && t2->digits)?t1->digits + 
t2->digits:0;
                }
+               if (card == card_relation && l->card > CARD_ATOM) {
+                       sql_subaggr *zero_or_one = sql_bind_aggr(sql->sa, 
sql->session->schema, "zero_or_one", exp_subtype(l));
+
+                       l = exp_aggr1(sql->sa, l, zero_or_one, 0, 0, CARD_ATOM, 
0);
+               }
+               if (card == card_relation && r->card > CARD_ATOM) {
+                       sql_subaggr *zero_or_one = sql_bind_aggr(sql->sa, 
sql->session->schema, "zero_or_one", exp_subtype(r));
+
+                       r = exp_aggr1(sql->sa, r, zero_or_one, 0, 0, CARD_ATOM, 
0);
+               }
                return exp_binop(sql->sa, l, r, f);
        } else {
                sql_exp *ol = l;
@@ -3545,6 +3578,11 @@ rel_nop(mvc *sql, sql_rel **rel, symbol 
                                nexps = NULL;
                                break;
                        }
+                       if (table_func && e->card > CARD_ATOM) {
+                               sql_subaggr *zero_or_one = 
sql_bind_aggr(sql->sa, sql->session->schema, "zero_or_one", exp_subtype(e));
+
+                               e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, 
CARD_ATOM, 0);
+                       }
                        append(nexps, e);
                }
                if (nexps) 
@@ -3611,26 +3649,6 @@ static sql_exp *
                        return e;
                }
                a = sql_bind_aggr(sql->sa, s, aname, NULL);
-               /* add aggr expression to the groupby, and return a
-                       column expression */
-
-               /* for correlated selections, we need to count on the
-                  join expression */
-               /*
-               if (groupby->r && exps_intern(groupby->r)) {
-                       sql_rel *i = groupby->l;
-
-                       if (i->exps && f == sql_sel && is_join(i->op)) {
-                               sql_rel *j = i->r;
-
-                               sql_exp *e = j->exps->h->data;
-                               assert(0);
-                               e = exp_column(sql->sa, exp_relname(e), 
exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), 0);
-                               e = exp_aggr1(sql->sa, e, a, distinct, 1, 
groupby->card, 0);
-                               return e;
-                       }
-               }
-               */
                e = exp_aggr(sql->sa, NULL, a, distinct, 0, groupby->card, 0);
                if (*rel == groupby && f == sql_sel) /* selection */
                        return e;
@@ -3663,22 +3681,40 @@ static sql_exp *
 
        a = sql_bind_aggr_(sql->sa, s, aname, exp_types(sql->sa, exps));
        if (!a) { /* find aggr + convert */
-               a = sql_find_aggr(sql->sa, s, aname);
-               if (a) {
-                       node *n, *op = a->aggr->ops->h;
-                       list *nexps = sa_list(sql->sa);
-
-                       for (n = exps->h ; a && op && n; op = op->next, n = 
n->next ) {
-                               sql_arg *arg = op->data;
-                               sql_exp *e = n->data;
-
-                               e = rel_check_type(sql, &arg->type, e, 
type_equal);
-                               if (!e)
-                                       a = NULL;
-                               list_append(nexps, e);
+               /* First try larger numeric type */
+               node *n;
+               list *nexps = sa_list(sql->sa);
+
+               for (n = exps->h ;  n; n = n->next ) {
+                       sql_exp *e = n->data;
+
+                       /* cast up, for now just dec to double */
+                       e = rel_numeric_supertype(sql, e);
+                       if (!e)
+                               break;
+                       list_append(nexps, e);
+               }
+               a = sql_bind_aggr_(sql->sa, s, aname, exp_types(sql->sa, 
nexps));
+               if (a && list_length(nexps))  /* count(col) has |exps| != 
|nexps| */
+                       exps = nexps;
+               if (!a) {
+                       a = sql_find_aggr(sql->sa, s, aname);
+                       if (a) {
+                               node *n, *op = a->aggr->ops->h;
+                               list *nexps = sa_list(sql->sa);
+
+                               for (n = exps->h ; a && op && n; op = op->next, 
n = n->next ) {
+                                       sql_arg *arg = op->data;
+                                       sql_exp *e = n->data;
+
+                                       e = rel_check_type(sql, &arg->type, e, 
type_equal);
+                                       if (!e)
+                                               a = NULL;
+                                       list_append(nexps, e);
+                               }
+                               if (a && list_length(nexps))  /* count(col) has 
|exps| != |nexps| */
+                                       exps = nexps;
                        }
-                       if (a && list_length(nexps))  /* count(col) has |exps| 
!= |nexps| */
-                               exps = nexps;
                }
        }
        /* TODO: convert to single super type (iff |exps| > 1) */
diff --git 
a/sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out 
b/sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out
--- a/sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out
+++ b/sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out
@@ -39,8 +39,8 @@ Ready.
 % val # name
 % int # type
 % 1 # length
+2
 4
-2
 #copy select val from bug2722 where fk=2 order by time into stdout using 
delimiters ' ' , '\n';
 [ 2    ]
 #drop table bug2722;
diff --git a/sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err 
b/sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
--- a/sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
+++ b/sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
@@ -25,17 +25,16 @@ stderr of test 'create_function.Bug-3172
 # cmdline opt  gdk_dbname = mTests_test_BugTracker-2012
 # cmdline opt  mal_listing = 0
 
-# 23:33:41 >  
-# 23:33:41 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-19060" "--port=33352"
-# 23:33:41 >  
+# 16:07:20 >  
+# 16:07:20 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-27661" "--port=38365"
+# 16:07:20 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-19060/.s.monetdb.33352
+MAPI  = (monetdb) /var/tmp/mtest-27661/.s.monetdb.38365
 QUERY = select * from x((select id from _tables), (select schema_id from 
_tables));
 ERROR = !TypeException:user.s2_1[115]:'sql.x' undefined in: _216:any := 
sql.x(_212:int, _214:int)
         !TypeException:user.s2_1[117]:'bat.insert' undefined in: _219:any := 
bat.insert(_207:bat[:oid,:int], _217:oid, _216:any)
         !program contains errors
 
-# 23:33:42 >  
-# 23:33:42 >  "Done."
-# 23:33:42 >  
-
+# 16:07:20 >  
+# 16:07:20 >  "Done."
+# 16:07:20 >  
diff --git a/sql/test/BugTracker-2013/Tests/All 
b/sql/test/BugTracker-2013/Tests/All
--- a/sql/test/BugTracker-2013/Tests/All
+++ b/sql/test/BugTracker-2013/Tests/All
@@ -38,3 +38,4 @@ pivot.Bug-3339
 qualified_aggrname.Bug-3332
 cannot_use_columns_after_groupby.Bug-3340
 sort_void_crash.Bug-3341
+bogus_aggregation_casts.Bug-3342
diff --git 
a/sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.sql 
b/sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.sql
new file mode 100644
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to