Changeset: 3f680440e949 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3f680440e949
Modified Files:
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
Branch: subquery
Log Message:
fixes for order problems
a fix for table production functions
diffs (230 lines):
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
@@ -4185,7 +4185,7 @@ static sql_exp *
}
}
if (a && execute_priv(sql,a->aggr)) {
- sql_exp *e = exp_aggr(sql->sa, exps, a, distinct, no_nil,
CARD_ATOM, have_nil(exps));
+ sql_exp *e = exp_aggr(sql->sa, exps, a, distinct, no_nil,
groupby->card, have_nil(exps));
/* if aggregate is from outer side, move it over */
if (freevar && query_has_outer(query)) {
@@ -4216,11 +4216,11 @@ static sql_exp *
groupby=groupby->l;
//e->card = groupby->card;
- if (*rel != groupby || !is_sql_sel(f)) { /* selection */
+ if (*rel != groupby || !is_sql_sel(f) ||
is_sql_orderby(f)) { /* selection */
//sql_rel *l = NULL;
e = rel_groupby_add_aggr(sql, groupby, e);
- if (p != groupby)
+ if (p != groupby || is_sql_orderby(f))
e = exp_ref(sql->sa, e);
if (!group)
return e;
@@ -4939,7 +4939,6 @@ rel_order_by(sql_query *query, sql_rel *
sql->errstr[0] = '\0';
/* check for project->select->groupby */
- #if 0
if (is_project(rel->op) && is_sql_orderby(f)) {
sql_rel *s = rel->l;
sql_rel *p = rel;
@@ -4960,7 +4959,6 @@ rel_order_by(sql_query *query, sql_rel *
}
}
}
- #endif
if (!e)
e = rel_order_by_column_exp(query,
&rel, col, f);
if (e && e->card != rel->card)
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -174,8 +174,14 @@ rel_freevar(mvc *sql, sql_rel *rel)
return exps;
case op_basetable:
- case op_table:
return NULL;
+ case op_table: {
+ sql_exp *call = rel->r;
+ if (rel->flag != 2 && rel->l)
+ lexps = rel_freevar(sql, rel->l);
+ exps = (rel->flag != 2 && call)?exps_freevar(sql, call->l):NULL;
+ return merge_freevar(exps, lexps);
+ }
case op_union:
case op_except:
case op_inter:
@@ -239,6 +245,7 @@ rel_dependent_var(mvc *sql, sql_rel *l,
return res;
}
+#if 0
static int
exps_only_simple_refs(list *exps)
{
@@ -275,6 +282,7 @@ rel_remove_project(sql_rel *rel)
}
return op;
}
+#endif
static sql_rel *
push_up_project(mvc *sql, sql_rel *rel)
@@ -543,6 +551,22 @@ push_up_set(mvc *sql, sql_rel *rel)
}
static sql_rel *
+push_up_table(mvc *sql, sql_rel *rel)
+{
+ (void)sql;
+ if (rel && (is_join(rel->op) || is_semi(rel->op)) && is_dependent(rel))
{
+ sql_rel *d = rel->l, *tf = rel->r;
+
+ /* for now just push d into function */
+ if (d && need_distinct(d) && tf && is_base(tf->op)) {
+ tf->l = rel_dup(d);
+ return rel;
+ }
+ }
+ return rel;
+}
+
+static sql_rel *
rel_general_unnest(mvc *sql, sql_rel *rel, list *ad)
{
/* current unnest only possible for equality joins, <, <> etc needs
more work */
@@ -652,7 +676,7 @@ rel_unnest_dependent(mvc *sql, sql_rel *
if (rel_has_freevar(r)){
list *ad;
- rel->r = r = rel_remove_project(r);
+ //rel->r = r = rel_remove_project(r);
if (r && is_simple_project(r->op)) {
rel = push_up_project(sql, rel);
@@ -679,8 +703,10 @@ rel_unnest_dependent(mvc *sql, sql_rel *
return rel_unnest_dependent(sql, rel);
}
- if (r && is_base(r->op)) /* table functions need
dependent implementation */
+ if (r && is_base(r->op)) { /* TODO table functions need
dependent implementation */
+ rel = push_up_table(sql, rel);
return rel;
+ }
/* fallback */
if ((ad = rel_dependent_var(sql, rel->l, rel->r)) !=
NULL)
diff --git
a/sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
b/sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
---
a/sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
+++
b/sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
@@ -43,7 +43,7 @@ Ready.
# counter.timinglinkorder < test.timinglinkorder and
# counter.userstopcodebegin = test.userstopcodebegin
# group by dataownercode, lineplanningnumber, journeypatterncode) as
-% .test, .test, .test, .test, .test, .test, .L16 # table_name
+% sys.test, sys.test, sys.test, sys.test, sys.test,
sys.test, .L13 # table_name
% dataownercode, lineplanningnumber, journeypatterncode,
timinglinkorder, userstopcodebegin, istimingstop,
passagesequencenumber # name
% varchar, varchar, varchar, decimal, varchar,
boolean, bigint # type
% 0, 0, 0, 4, 0, 5, 1 # length
@@ -56,7 +56,7 @@ Ready.
# counter.timinglinkorder < test.timinglinkorder and
# counter.userstopcodebegin = test.userstopcodebegin) as
#passagesequencenumber
-% .test, .test, .test, .test, .test, .test, .L16 # table_name
+% sys.test, sys.test, sys.test, sys.test, sys.test,
sys.test, .L13 # table_name
% dataownercode, lineplanningnumber, journeypatterncode,
timinglinkorder, userstopcodebegin, istimingstop,
passagesequencenumber # name
% varchar, varchar, varchar, decimal, varchar,
boolean, bigint # type
% 0, 0, 0, 4, 0, 5, 1 # length
@@ -78,20 +78,20 @@ Ready.
# counter.timinglinkorder < test.timinglinkorder and
# counter.userstopcodebegin = test.userstopcodebegin
# group by dataownercode, lineplanningnumber, journeypatterncode) as
-% .test, .test, .test, .test, .test, .test, .L16 # table_name
+% sys.test, sys.test, sys.test, sys.test, sys.test,
sys.test, .L13 # table_name
% dataownercode, lineplanningnumber, journeypatterncode,
timinglinkorder, userstopcodebegin, istimingstop,
passagesequencenumber # name
% varchar, varchar, varchar, decimal, varchar,
boolean, bigint # type
% 3, 4, 1, 4, 8, 5, 1 # length
-[ "CXX", "A001", "0", 0, "40000010", true, 1 ]
-[ "CXX", "A001", "0", 1, "40004015", false, 1 ]
-[ "CXX", "A001", "0", 2, "40004021", false, 1 ]
-[ "CXX", "A001", "0", 3, "40002570", false, 1 ]
-[ "CXX", "A001", "0", 4, "40002550", false, 1 ]
-[ "CXX", "A001", "0", 5, "40002590", false, 1 ]
-[ "CXX", "A001", "0", 6, "40002610", false, 1 ]
-[ "CXX", "A001", "0", 7, "40002630", false, 1 ]
-[ "CXX", "A001", "0", 8, "40002690", false, 1 ]
-[ "CXX", "A001", "0", 9, "40002770", false, 1 ]
+[ "CXX", "A001", "0", 0, "40000010", true, 0 ]
+[ "CXX", "A001", "0", 1, "40004015", false, 0 ]
+[ "CXX", "A001", "0", 2, "40004021", false, 0 ]
+[ "CXX", "A001", "0", 3, "40002570", false, 0 ]
+[ "CXX", "A001", "0", 4, "40002550", false, 0 ]
+[ "CXX", "A001", "0", 5, "40002590", false, 0 ]
+[ "CXX", "A001", "0", 6, "40002610", false, 0 ]
+[ "CXX", "A001", "0", 7, "40002630", false, 0 ]
+[ "CXX", "A001", "0", 8, "40002690", false, 0 ]
+[ "CXX", "A001", "0", 9, "40002770", false, 0 ]
#select dataownercode, lineplanningnumber, journeypatterncode, timinglinkorder,
#userstopcodebegin, istimingstop,
# (select count(*) from test as counter where
@@ -101,7 +101,7 @@ Ready.
# counter.timinglinkorder < test.timinglinkorder and
# counter.userstopcodebegin = test.userstopcodebegin) as
#passagesequencenumber
-% .test, .test, .test, .test, .test, .test, .L16 # table_name
+% sys.test, sys.test, sys.test, sys.test, sys.test,
sys.test, .L13 # table_name
% dataownercode, lineplanningnumber, journeypatterncode,
timinglinkorder, userstopcodebegin, istimingstop,
passagesequencenumber # name
% varchar, varchar, varchar, decimal, varchar,
boolean, bigint # type
% 3, 4, 1, 4, 8, 5, 1 # length
diff --git a/sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
b/sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
--- a/sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
+++ b/sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
@@ -31,8 +31,8 @@ stderr of test 'pivot.Bug-3339` in direc
MAPI = (monetdb) /var/tmp/mtest-16107/.s.monetdb.31536
QUERY = SELECT (SELECT * FROM groupElements(pivot.x))
FROM (SELECT * FROM tmp) as pivot;
-ERROR = !SELECT: no such column 'pivot.x'
-CODE = 42S22
+ERROR = !21000!zero_or_one: cardinality violation, scalar expression expected
+CODE = M0M29
# 09:16:37 >
# 09:16:37 > "Done."
diff --git a/sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
b/sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
--- a/sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
+++ b/sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
@@ -30,8 +30,8 @@ stderr of test 'syntaxerror.Bug-3399` in
MAPI = (monetdb) /var/tmp/mtest-19909/.s.monetdb.30301
QUERY = select *, (select *) from tmp;
-ERROR = !SELECT: subquery result missing
-CODE = 42000
+ERROR = !SELECT: no such table 'tmp'
+CODE = 42S02
# 11:53:57 >
# 11:53:57 > "Done."
diff --git a/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
--- a/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
+++ b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
@@ -60,12 +60,12 @@ Ready.
[ "two", NULL ]
[ "two", NULL ]
#select k,count(*),count(v) from (select k,v from a union all select k,null
from b) as t(k,v) group by k order by count(*) desc;
-% .t, .L16, .L21 # table_name
-% k, L15, L20 # name
+% .t, .L16, .L20 # table_name
+% k, L16, L20 # name
% varchar, bigint, bigint # type
% 3, 1, 1 # length
+[ "one", 2, 2 ]
[ "two", 4, 1 ]
-[ "one", 2, 2 ]
# 17:12:13 >
# 17:12:13 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list