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