Changeset: c2e8e80037e7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c2e8e80037e7
Added Files:
        sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.sql
        sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.err
        sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct.Bug-6411.sql
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.sql
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-in.Bug-6410.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.sql
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-having-with-not-in.Bug-6409.stable.out
Modified Files:
        monetdb5/modules/atoms/json.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/server/rel_select.c
        sql/storage/store.c
        sql/test/BugTracker-2017/Tests/All
Branch: default
Log Message:

Merge with Jul2017


diffs (truncated from 550 to 300 lines):

diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -43,6 +43,7 @@
                char *msg;                                                      
                                                        \
                if (jt) {                                                       
                                                        \
                        msg = jt->error;                                        
                                                \
+                       jt->error = NULL;                                       
                                                \
                        JSONfree(jt);                                           
                                                \
                } else {                                                        
                                                        \
                        msg = createException(MAL, "json.new",                  
                        \
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
@@ -561,6 +561,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        fprintf(stderr, "could not find %s.%s\n", (char*)e->l, 
(char*)e->r);
                        print_stmtlist(sql->sa, left);
                        print_stmtlist(sql->sa, right);
+                       assert(s);
+                       return NULL;
                }
         }      break;
        case e_cmp: {
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1113,8 +1113,10 @@ mvc_grow_wrap(Client cntxt, MalBlkPtr mb
                cnt = BATcount(ins);
                BBPunfix(ins->batCacheid);
        }
-       if (BATcount(tid))
-               v = *Tloc(tid, BATcount(tid)-1)+1;
+       if (BATcount(tid)) {
+               (void)BATmax(tid, &v);
+               v++;
+       }
        for(;cnt>0; cnt--, v++) {
                if (BUNappend(tid, &v, FALSE) != GDK_SUCCEED) {
                        BBPunfix(Tid);
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
@@ -33,10 +33,6 @@ rel_setsubquery(sql_rel*r)
 {
        if (rel_is_ref(r))
                return;
-       if (r->l && !is_base(r->op))
-               rel_setsubquery(r->l);
-       if (r->r && is_join(r->op))
-               rel_setsubquery(r->r);
        set_subquery(r);
 }
 
@@ -1782,7 +1778,6 @@ rel_compare(mvc *sql, sql_rel *rel, symb
                                rel = r;
                        }
                } else if (r) {
-                       rel_setsubquery(r);
                        rs = rel_lastexp(sql, r);
                        if (r->card > CARD_ATOM) {
                                /* if single value (independed of relations), 
rewrite */
@@ -2027,7 +2022,6 @@ rel_logical_value_exp(mvc *sql, sql_rel 
                                        if (!rel_find_exp(l, ls))
                                                rel_project_add_exp(sql, l, ls);
                                }
-                               rel_setsubquery(r);
                                rs = rel_lastexp(sql, r);
                                if (r->card > CARD_ATOM) {
                                        sql_subaggr *zero_or_one = 
sql_bind_aggr(sql->sa, sql->session->schema, "zero_or_one", exp_subtype(rs));
@@ -2447,7 +2441,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                symbol *lo = NULL;
                dnode *n = dl->h->next, *dn = NULL;
                sql_rel *left = NULL, *right = NULL, *outer = rel;
-               sql_exp *l = NULL, *e, *r = NULL, *ident = NULL;
+               sql_exp *l = NULL, *e, *r = NULL, *outerident = NULL, *ident = 
NULL;
                list *vals = NULL, *ll = sa_list(sql->sa);
                int correlated = 0;
                int l_is_value = 1, r_is_rel = 0;
@@ -2561,10 +2555,14 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                                sql->errstr[0] = 0;
 
                                                if (l_is_value) {
-                                                       outer = rel = 
rel_add_identity(sql, rel_dup(outer), &ident);
-                                                       ident = 
exp_column(sql->sa, exp_relname(ident), exp_name(ident), exp_subtype(ident), 
ident->card, has_nil(ident), is_intern(ident));
-                                               } else
+                                                       if (!outerident) {
+                                                               outer = rel = 
rel_add_identity(sql, rel_dup(outer), &ident);
+                                                               ident = 
exp_column(sql->sa, exp_relname(ident), exp_name(ident), exp_subtype(ident), 
ident->card, has_nil(ident), is_intern(ident));
+                                                               outerident = 
ident;
+                                                       }
+                                               } else {
                                                        rel = left = 
rel_dup(left);
+                                               }
                                                r = rel_value_exp(sql, &rel, 
sval, f, ek);
                                                if (r && !is_project(rel->op)) {
                                                        rel = 
rel_project(sql->sa, rel, NULL);
@@ -2586,9 +2584,17 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                                rl = rel_project_exp(sql->sa, 
exp_label(sql->sa, r, ++sql->label));
                                        }
                                        if (right) {
+                                               int ident_colnr = -1;
+
+                                               if (ident) { 
+                                                       sql_exp *i = 
exps_bind_column2(right->exps, exp_relname(ident), exp_name(ident));
+                                                       ident_colnr = 
list_position(right->exps, i);
+                                               }
                                                rl = rel_setop(sql->sa, right, 
rl, op_union);
                                                rl->exps = rel_projections(sql, 
rl, NULL, 0, 1);
                                                set_processed(rl);
+                                               if (ident)
+                                                       ident = 
list_fetch(rl->exps, ident_colnr);
                                        }
                                        right = rl;
                                }
@@ -2628,7 +2634,6 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                sql_exp *le;
 
                                le = exps_bind_column2(right->exps, 
exp_relname(ident), exp_name(ident));
-                               exp_label(sql->sa, le, ++sql->label);
                                le = exp_column(sql->sa, exp_relname(le), 
exp_name(le), exp_subtype(le), le->card, has_nil(le), is_intern(le));
 
                                right = rel_select(sql->sa, right, NULL);
@@ -2636,7 +2641,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
 
                                rel = rel_crossproduct(sql->sa, outer, right, 
op_join);
                                rel->exps = sa_list(sql->sa);
-                               le = exp_compare(sql->sa, ident, le, cmp_equal);
+                               le = exp_compare(sql->sa, outerident, le, 
cmp_equal);
                                append(rel->exps, le);
                        } else {
                                rel = rel_crossproduct(sql->sa, left, right, 
op_join);
@@ -3444,22 +3449,55 @@ static sql_exp *
 
        a = sql_bind_aggr_(sql->sa, s, aname, exp_types(sql->sa, exps));
        if (!a && list_length(exps) > 1) { 
+               sql_subtype *t1 = exp_subtype(exps->h->data);
                a = sql_bind_member_aggr(sql->sa, s, aname, 
exp_subtype(exps->h->data), list_length(exps));
-               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 (list_length(exps) != 2 || (!EC_NUMBER(t1->type->eclass) || 
!a || subtype_cmp( 
+                                               
&((sql_arg*)a->aggr->ops->h->data)->type,
+                                               
&((sql_arg*)a->aggr->ops->h->next->data)->type) != 0) )  {
+                       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;
+                               }
+               } else {
+                       sql_exp *l = exps->h->data, *ol = l;
+                       sql_exp *r = exps->h->next->data, *or = r;
+                       sql_subtype *t2 = exp_subtype(r);
+
+                       if (rel_convert_types(sql, &l, &r, 1/*fix scale*/, 
type_equal) >= 0){
+                               list *tps = sa_list(sql->sa);
+
+                               t1 = exp_subtype(l);
+                               list_append(tps, t1);
+                               t2 = exp_subtype(r);
+                               list_append(tps, t2);
+                               a = sql_bind_aggr_(sql->sa, s, aname, tps);
                        }
-                       if (a && list_length(nexps))  /* count(col) has |exps| 
!= |nexps| */
+                       if (!a) {
+                               sql->session->status = 0;
+                               sql->errstr[0] = '\0';
+
+                               l = ol;
+                               r = or;
+                       } else {
+                               list *nexps = sa_list(sql->sa);
+
+                               append(nexps,l);
+                               append(nexps,r);
                                exps = nexps;
+                       }
                }
        }
        if (!a) { /* find aggr + convert */
@@ -4432,7 +4470,6 @@ rel_value_exp2(mvc *sql, sql_rel **rel, 
                        if (*rel) {
                                sql_rel *p = *rel;
 
-                               rel_setsubquery(r);
                                /* in the selection phase we should have 
project/groupbys, unless 
                                 * this is the value (column) for the 
aggregation then the 
                                 * crossproduct is pushed under the 
project/groupby.  */ 
@@ -5036,7 +5073,8 @@ rel_query(mvc *sql, sql_rel *rel, symbol
                        /* remove the outer (running) project */
                        if (!is_processed(o) && is_project(o->op))
                                o = rel->l;
-                       rel_setsubquery(res);
+                       if (res)
+                               rel_setsubquery(res);
                        outer = rel;
                        /* create dummy single row project */
                        rel = rel_project(sql->sa, NULL, applyexps = 
rel_projections(sql, o, NULL, 1, 1)); 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3320,6 +3320,7 @@ reset_column(sql_trans *tr, sql_column *
                if (pfc->def)
                        fc->def = pfc->def;
                fc->base.wtime = fc->base.rtime = 0;
+               fc->min = fc->max = NULL;
        }
        return LOG_OK;
 }
diff --git a/sql/test/BugTracker-2017/Tests/All 
b/sql/test/BugTracker-2017/Tests/All
--- a/sql/test/BugTracker-2017/Tests/All
+++ b/sql/test/BugTracker-2017/Tests/All
@@ -81,3 +81,7 @@ udf_crash_subquery_scalar_paramters.Bug-
 side-effect.Bug-6397
 copy_into_crash.Bug-6404
 null_matches_in_outer.Bug-6398
+corr_coersion.Bug-6287
+sqlitelogictest-having-with-not-in.Bug-6409
+sqlitelogictest-having-with-in.Bug-6410
+sqlitelogictest-aggregation-distinct.Bug-6411
diff --git a/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.sql 
b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.sql
@@ -0,0 +1,11 @@
+
+CREATE TABLE x ( a DOUBLE , b DOUBLE );
+INSERT INTO x VALUES (1.0,2.0);
+INSERT INTO x VALUES (2.0,3.0);
+SELECT * FROM x;
+
+SELECT CORR( a , b ) FROM x;
+SELECT CORR( a , CAST( b AS INTEGER ) ) FROM x;
+SELECT CORR( CAST( a AS INTEGER ) , b ) FROM x;
+
+drop table x;
diff --git a/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.err 
b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.err
@@ -0,0 +1,34 @@
+stderr of test 'corr_coersion.Bug-6287` in directory 
'sql/test/BugTracker-2017` itself:
+
+
+# 11:20:25 >  
+# 11:20:25 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=36186" "--set" 
"mapi_usock=/var/tmp/mtest-7703/.s.monetdb.36186" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017"
+# 11:20:25 >  
+
+# builtin opt  gdk_dbpath = 
/home/niels/scratch/rc-monetdb/Linux-x86_64/var/monetdb5/dbfarm/demo
+# builtin opt  gdk_debug = 0
+# builtin opt  gdk_vmtrim = no
+# builtin opt  monet_prompt = >
+# builtin opt  monet_daemon = no
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 36186
+# cmdline opt  mapi_usock = /var/tmp/mtest-7703/.s.monetdb.36186
+# cmdline opt  monet_prompt = 
+# cmdline opt  gdk_dbpath = 
/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017
+# cmdline opt  gdk_debug = 536870922
+
+# 11:20:26 >  
+# 11:20:26 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-7703" "--port=36186"
+# 11:20:26 >  
+
+
+# 11:20:26 >  
+# 11:20:26 >  "Done."
+# 11:20:26 >  
+
diff --git a/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.out 
b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/corr_coersion.Bug-6287.stable.out
@@ -0,0 +1,62 @@
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to