Changeset: 9f1b435638d6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f1b435638d6
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2013/Tests/duplicate_column_name.Bug-3349.stable.out
sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: Oct2020
Log Message:
allow select * (select 1 a, 2 a)
diffs (242 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
@@ -5116,8 +5116,24 @@ column_exp(sql_query *query, sql_rel **r
return ve;
}
+static int
+exp_is_not_intern(sql_exp *e)
+{
+ return is_intern(e)?-1:0;
+}
+
+static void
+rel_remove_internal_exp(sql_rel *rel)
+{
+ if (rel->exps) {
+ list *n_exps = list_select(rel->exps, rel,
(fcmp)&exp_is_not_intern, (fdup)NULL);
+
+ rel->exps = n_exps;
+ }
+}
+
static list *
-rel_table_exp(sql_query *query, sql_rel **rel, symbol *column_e )
+rel_table_exp(sql_query *query, sql_rel **rel, symbol *column_e, bool
single_exp )
{
mvc *sql = query->sql;
if (column_e->token == SQL_TABLE && column_e->data.lval->h->type ==
type_symbol) {
@@ -5132,7 +5148,7 @@ rel_table_exp(sql_query *query, sql_rel
return sa_list(sql->sa);
} else if (column_e->token == SQL_TABLE) {
char *tname = column_e->data.lval->h->data.sval;
- list *exps;
+ list *exps = NULL;
sql_rel *project = *rel, *groupby = NULL;
/* if there's a group by relation in the tree, skip it for the
'*' case and use the underlying projection */
@@ -5146,7 +5162,12 @@ rel_table_exp(sql_query *query, sql_rel
assert(project);
}
- if ((exps = rel_table_projections(sql, project, tname, 0)) !=
NULL && !list_empty(exps)) {
+ if (project->op == op_project && project->l && project == *rel
&& !tname && !rel_is_ref(project) && !need_distinct(project) && single_exp) {
+ rel_remove_internal_exp(*rel);
+ exps = project->exps;
+ *rel = project->l;
+ }
+ if ((exps || (exps = rel_table_projections(sql, project, tname,
0)) != NULL) && !list_empty(exps)) {
if (groupby) {
groupby->exps =
list_distinct(list_merge(groupby->exps, exps, (fdup) NULL), (fcmp) exp_equal,
(fdup) NULL);
for (node *n = groupby->exps->h ; n ; n =
n->next) {
@@ -5383,22 +5404,6 @@ join_on_column_name(sql_query *query, sq
return rel;
}
-static int
-exp_is_not_intern(sql_exp *e)
-{
- return is_intern(e)?-1:0;
-}
-
-static void
-rel_remove_internal_exp(sql_rel *rel)
-{
- if (rel->exps) {
- list *n_exps = list_select(rel->exps, rel,
(fcmp)&exp_is_not_intern, (fdup)NULL);
-
- rel->exps = n_exps;
- }
-}
-
static sql_rel *
rel_select_exp(sql_query *query, sql_rel *rel, SelectNode *sn, exp_kind ek)
{
@@ -5433,7 +5438,7 @@ rel_select_exp(sql_query *query, sql_rel
rel = inner;
continue;
} else if (!ce) {
- te = rel_table_exp(query, &rel, n->data.sym);
+ te = rel_table_exp(query, &rel, n->data.sym,
!list_length(pexps) && !n->next);
} else
ce = NULL;
if (!ce && !te) {
diff --git
a/sql/test/BugTracker-2013/Tests/duplicate_column_name.Bug-3349.stable.out
b/sql/test/BugTracker-2013/Tests/duplicate_column_name.Bug-3349.stable.out
--- a/sql/test/BugTracker-2013/Tests/duplicate_column_name.Bug-3349.stable.out
+++ b/sql/test/BugTracker-2013/Tests/duplicate_column_name.Bug-3349.stable.out
@@ -41,8 +41,8 @@ stdout of test 'duplicate_column_name.Bu
% int, int, int, int # type
% 1, 1, 1, 1 # length
[ 1, 1, 1, 1 ]
-[ 1, 1, 1, 1 ]
-[ 1, 2, 1, 2 ]
+[ 1, 1, 1, 2 ]
+[ 1, 2, 1, 1 ]
[ 1, 2, 1, 2 ]
#SELECT *
#FROM (
diff --git a/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
b/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
--- a/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
+++ b/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.stable.out
@@ -59,28 +59,26 @@ stdout of test 'merge_project.Bug-3955`
% .plan # table_name
% rel # name
% clob # type
-% 107 # length
+% 105 # length
project (
-| project (
-| | crossproduct (
-| | | table(sys.v) [ "v"."a1", "v"."a2" ] COUNT ,
-| | | project (
-| | | | crossproduct (
-| | | | | project (
-| | | | | | select (
-| | | | | | | table(sys.input_double) [ "input_double"."a1",
"input_double"."a2" ] COUNT
-| | | | | | ) [ "input_double"."a1" = clob "latitude" ]
-| | | | | ) [ "input_double"."a2" as "tmp_2"."a2" ],
-| | | | | project (
-| | | | | | select (
-| | | | | | | table(sys.input_double) [ "input_double"."a1",
"input_double"."a2" ] COUNT
-| | | | | | ) [ "input_double"."a1" = clob "longitude" ]
-| | | | | ) [ "input_double"."a2" as "tmp_3"."a2" ]
-| | | | ) [ ]
-| | | ) [ sys.st_point("tmp_2"."a2" as "tmp"."a1", "tmp_3"."a2" as "tmp"."a2")
as "p"."a1" ]
-| | ) [ ]
-| ) [ "v"."a1" as "r"."a1", sys.st_distance("v"."a2" as "tmp"."a2", "p"."a1"
as "tmp"."a3") as "r"."prob" ]
-) [ "r"."a1", "r"."prob" ]
+| crossproduct (
+| | table(sys.v) [ "v"."a1", "v"."a2" ] COUNT ,
+| | project (
+| | | crossproduct (
+| | | | project (
+| | | | | select (
+| | | | | | table(sys.input_double) [ "input_double"."a1", "input_double"."a2"
] COUNT
+| | | | | ) [ "input_double"."a1" = clob "latitude" ]
+| | | | ) [ "input_double"."a2" as "tmp_2"."a2" ],
+| | | | project (
+| | | | | select (
+| | | | | | table(sys.input_double) [ "input_double"."a1", "input_double"."a2"
] COUNT
+| | | | | ) [ "input_double"."a1" = clob "longitude" ]
+| | | | ) [ "input_double"."a2" as "tmp_3"."a2" ]
+| | | ) [ ]
+| | ) [ sys.st_point("tmp_2"."a2" as "tmp"."a1", "tmp_3"."a2" as "tmp"."a2")
as "p"."a1" ]
+| ) [ ]
+) [ "v"."a1" as "r"."a1", sys.st_distance("v"."a2" as "tmp"."a2", "p"."a1" as
"tmp"."a3") as "r"."prob" ]
# 14:00:10 >
# 14:00:10 > "Done."
diff --git
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
---
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
+++
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
@@ -37,7 +37,7 @@ function user.main():void;
X_4:int := sql.mvc();
C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "fk":str);
X_23:lng := aggr.count(C_5:bat[:oid]);
- sql.resultSet(".%4":str, "%4":str, "bigint":str, 64:int, 0:int, 7:int,
X_23:lng);
+ sql.resultSet(".%3":str, "%3":str, "bigint":str, 64:int, 0:int, 7:int,
X_23:lng);
end user.main;
#inline actions= 0 time=1 usec
#remap actions= 0 time=2 usec
diff --git
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
---
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
+++
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
@@ -37,7 +37,7 @@ function user.main():void;
X_4:int := sql.mvc();
C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "fk":str);
X_23:lng := aggr.count(C_5:bat[:oid]);
- sql.resultSet(".%6":str, "%6":str, "bigint":str, 64:int, 0:int, 7:int,
X_23:lng);
+ sql.resultSet(".%5":str, "%5":str, "bigint":str, 64:int, 0:int, 7:int,
X_23:lng);
end user.main;
#inline actions= 0 time=0 usec
#remap actions= 0 time=1 usec
diff --git
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
---
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
+++
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
@@ -35,8 +35,8 @@ stdout of test 'foreign_key_outer_join_d
project (
| group by (
| | table(sys.fk) [ "fk"."id" NOT NULL HASHCOL ] COUNT
-| ) [ ] [ sys.count() NOT NULL as "%4"."%4" ]
-) [ "%4"."%4" NOT NULL ]
+| ) [ ] [ sys.count() NOT NULL as "%3"."%3" ]
+) [ "%3"."%3" NOT NULL ]
#plan select id from v1 order by id;
% .plan # table_name
% rel # name
diff --git
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
---
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
+++
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
@@ -35,8 +35,8 @@ stdout of test 'foreign_key_outer_join_d
project (
| group by (
| | table(sys.fk) [ "fk"."id" NOT NULL HASHCOL ] COUNT
-| ) [ ] [ sys.count() NOT NULL as "%6"."%6" ]
-) [ "%6"."%6" NOT NULL ]
+| ) [ ] [ sys.count() NOT NULL as "%5"."%5" ]
+) [ "%5"."%5" NOT NULL ]
#plan select id from v2 order by id;
% .plan # table_name
% rel # name
diff --git
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
---
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
+++
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
@@ -176,8 +176,8 @@ stdout of test 'foreign_key_outer_join_d
% 1 # length
[ 6 ]
#select count(*) from v1;
-% .%4 # table_name
-% %4 # name
+% .%3 # table_name
+% %3 # name
% bigint # type
% 1 # length
[ 6 ]
@@ -188,8 +188,8 @@ stdout of test 'foreign_key_outer_join_d
% 1 # length
[ 6 ]
#select count(*) from v2;
-% .%6 # table_name
-% %6 # name
+% .%5 # table_name
+% %5 # name
% bigint # type
% 1 # length
[ 6 ]
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.out
b/sql/test/miscellaneous/Tests/simple_selects.stable.out
--- a/sql/test/miscellaneous/Tests/simple_selects.stable.out
+++ b/sql/test/miscellaneous/Tests/simple_selects.stable.out
@@ -380,6 +380,12 @@ stdout of test 'simple_selects` in direc
% int, int, varchar, varchar # type
% 1, 1, 0, 0 # length
#rollback;
+#select * from (select 1 as c0, 2 as c0) as sub;
+% .sub, .sub # table_name
+% c0, c0 # name
+% tinyint, tinyint # type
+% 1, 1 # length
+[ 1, 2 ]
# 17:31:38 >
# 17:31:38 > "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list