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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list