Changeset: be819bc99835 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=be819bc99835
Modified Files:
sql/server/rel_distribute.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_partition.c
sql/server/rel_propagate.c
sql/server/rel_rel.c
sql/server/sql_partition.c
sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
sql/test/Tests/truncate-statements-extra.stable.out
Branch: Jun2020
Log Message:
Added missing optimizations and loops for ddl_alter_table statements
diffs (truncated from 350 to 300 lines):
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -58,7 +58,7 @@ has_remote_or_replica( sql_rel *rel )
return 1;
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq /*|| rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
if (has_remote_or_replica( rel->l ))
return 1;
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -258,7 +258,7 @@ replica(mvc *sql, sql_rel *rel, char *ur
case op_ddl:
if ((rel->flag == ddl_psm || rel->flag == ddl_exception) &&
rel->exps)
rel->exps = exps_replica(sql, rel->exps, uri);
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq /*|| rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
rel->l = replica(sql, rel->l, uri);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
rel->l = replica(sql, rel->l, uri);
@@ -444,7 +444,7 @@ distribute(mvc *sql, sql_rel *rel)
case op_ddl:
if ((rel->flag == ddl_psm || rel->flag == ddl_exception) &&
rel->exps)
rel->exps = exps_distribute(sql, rel->exps);
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq /*|| rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
l = rel->l = distribute(sql, rel->l);
if (l && (p = find_prop(l->p, PROP_REMOTE)) != NULL) {
@@ -601,7 +601,7 @@ rel_remote_func(mvc *sql, sql_rel *rel)
case op_ddl:
if ((rel->flag == ddl_psm || rel->flag == ddl_exception) &&
rel->exps)
rel->exps = exps_remote_func(sql, rel->exps);
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq /*|| rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
rel->l = rel_remote_func(sql, rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
rel->l = rel_remote_func(sql, rel->l);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2759,7 +2759,7 @@ rel_set_type_recurse(mvc *sql, sql_subty
rel_set_type_recurse(sql, type, rel->r,
relname, expname);
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table ||
rel->flag == ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_set_type_recurse(sql, type, rel->l,
relname, expname);
} else if (rel->flag == ddl_list || rel->flag ==
ddl_exception) {
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
@@ -293,6 +293,10 @@ rel_properties(mvc *sql, global_props *g
case op_union:
case op_inter:
case op_except:
+
+ case op_insert:
+ case op_update:
+ case op_delete:
if (rel->l)
rel_properties(sql, gp, rel->l);
if (rel->r)
@@ -303,21 +307,14 @@ rel_properties(mvc *sql, global_props *g
case op_groupby:
case op_topn:
case op_sample:
+ case op_truncate:
if (rel->l)
rel_properties(sql, gp, rel->l);
break;
- case op_insert:
- case op_update:
- case op_delete:
- if (rel->r)
- rel_properties(sql, gp, rel->r);
- break;
- case op_truncate:
- break;
case op_ddl:
if (rel->flag == ddl_psm && rel->exps)
psm_exps_properties(sql, gp, rel->exps);
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_properties(sql, gp, rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -1196,7 +1193,7 @@ rel_join_order(mvc *sql, sql_rel *rel)
rel->l = rel_join_order(sql, rel->l);
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
rel->l = rel_join_order(sql, rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
rel->l = rel_join_order(sql, rel->l);
@@ -3102,7 +3099,7 @@ rel_case_fixup(mvc *sql, sql_rel *rel, i
}
if (is_ddl(rel->op) && rel->flag == ddl_psm)
rel->exps = rewrite_case_exps(sql, rel->exps, changes);
- if ((!is_ddl(rel->op) || (is_ddl(rel->op) && (rel->flag ==
ddl_output || rel->flag == ddl_create_seq || rel->flag == ddl_alter_seq))) &&
rel->l)
+ if ((!is_ddl(rel->op) || (is_ddl(rel->op) && (rel->flag ==
ddl_output || rel->flag == ddl_create_seq || rel->flag == ddl_alter_seq ||
rel->flag == ddl_alter_table || rel->flag == ddl_create_table || rel->flag ==
ddl_create_view))) && rel->l)
rel->l = rel_case_fixup(sql, rel->l,
is_topn(rel->op)?top:0, changes);
if (is_ddl(rel->op) && (rel->flag == ddl_list || rel->flag ==
ddl_exception) && rel->r)
rel->r = rel_case_fixup(sql, rel->r,
is_ddl(rel->op)?top:0, changes);
@@ -6653,7 +6650,7 @@ rel_used(sql_rel *rel)
rel_used(rel->l);
rel = rel->l;
} else if (is_ddl(rel->op)) {
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
rel_used(rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
rel_used(rel->l);
@@ -6726,7 +6723,7 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
case op_truncate:
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_mark_used(sql, rel->l, 0);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -6896,7 +6893,7 @@ rel_remove_unused(mvc *sql, sql_rel *rel
case op_anti:
return rel;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel->l = rel_remove_unused(sql, rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -6957,7 +6954,7 @@ rel_dce_refs(mvc *sql, sql_rel *rel, lis
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_dce_refs(sql, rel->l, refs);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -7050,7 +7047,7 @@ rel_dce_down(mvc *sql, sql_rel *rel, int
return rel;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel->l = rel_dce_down(sql, rel->l, 0);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
diff --git a/sql/server/rel_partition.c b/sql/server/rel_partition.c
--- a/sql/server/rel_partition.c
+++ b/sql/server/rel_partition.c
@@ -89,7 +89,7 @@ find_basetables(mvc *sql, sql_rel *rel,
find_basetables(sql, rel->l, tables);
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq/* || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
if (rel->l)
find_basetables(sql, rel->l, tables);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -146,7 +146,7 @@ has_groupby(sql_rel *rel)
if (is_modify(rel->op))
return has_groupby(rel->r);
if (is_ddl(rel->op)) {
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq)
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view)
return has_groupby(rel->l);
if (rel->flag == ddl_list || rel->flag == ddl_exception)
return has_groupby(rel->l) || has_groupby(rel->r);
@@ -184,7 +184,7 @@ rel_partition(mvc *sql, sql_rel *rel)
} else
_rel_partition(sql, rel);
} else if (is_ddl(rel->op)) {
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_partition(sql, rel->l);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -552,7 +552,7 @@ rel_change_base_table(mvc* sql, sql_rel*
rel->l = rel_change_base_table(sql, rel->l,
oldt, newt);
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table ||
rel->flag == ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel->l = rel_change_base_table(sql,
rel->l, oldt, newt);
} else if (rel->flag == ddl_list || rel->flag ==
ddl_exception) {
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -166,7 +166,7 @@ rel_copy(mvc *sql, sql_rel *i, int deep)
}
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (i->l)
rel->l = rel_copy(sql, i->l, deep);
} else if (rel->flag == ddl_list || rel->flag == ddl_exception)
{
@@ -1840,7 +1840,7 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
return -1;
break;
case op_ddl:
- if (r->flag == ddl_output || r->flag == ddl_create_seq ||
r->flag == ddl_alter_seq) {
+ if (r->flag == ddl_output || r->flag == ddl_create_seq ||
r->flag == ddl_alter_seq || r->flag == ddl_alter_table || r->flag ==
ddl_create_table || r->flag == ddl_create_view) {
if (rel_deps(sql, r->l, refs, l) != 0)
return -1;
} else if (r->flag == ddl_list || r->flag == ddl_exception) {
@@ -2007,7 +2007,7 @@ rel_exp_visitor(mvc *sql, sql_rel *rel,
}
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
if ((rel->l = rel_exp_visitor(sql, rel->l,
exp_rewriter, changes, topdown)) == NULL)
return NULL;
@@ -2192,7 +2192,7 @@ rel_visitor(mvc *sql, sql_rel *rel, rel_
}
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
if ((rel->l = func(sql, rel->l, rel_rewriter,
changes)) == NULL)
return NULL;
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -139,7 +139,7 @@ rel_find_table_columns(mvc* sql, sql_rel
rel_find_table_columns(sql, rel->r, t, cols);
break;
case op_ddl:
- if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq) {
+ if (rel->flag == ddl_output || rel->flag ==
ddl_create_seq || rel->flag == ddl_alter_seq || rel->flag == ddl_alter_table ||
rel->flag == ddl_create_table || rel->flag == ddl_create_view) {
if (rel->l)
rel_find_table_columns(sql, rel->l, t,
cols);
} else if (rel->flag == ddl_list || rel->flag ==
ddl_exception) {
@@ -148,7 +148,7 @@ rel_find_table_columns(mvc* sql, sql_rel
if (rel->r)
rel_find_table_columns(sql, rel->r, t,
cols);
}
- break;
+ break;
}
}
diff --git
a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
--- a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
+++ b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
@@ -25,7 +25,7 @@ stdout of test 'copy_multiple_files.SF-2
% clob # type
% 185 # length
insert(
-| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ]
+| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT
| union (
| | table (sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar
"NULL", varchar "null", varchar "/file1", bigint "-1", bigint "0", int "0", int
"0", varchar "NULL", int "0"),
| | ) [ "cm_tmp"."i" ] COUNT ,
diff --git
a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
---
a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
+++
b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
@@ -27,7 +27,7 @@ stdout of test 'copy_multiple_files.SF-2
% clob # type
% 186 # length
insert(
-| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ]
+| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT
| union (
| | table (sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar
"NULL", varchar "null", varchar "\\file1", bigint "-1", bigint "0", int "0",
int "0", varchar "NULL", int "0"),
| | ) [ "cm_tmp"."i" ] COUNT ,
@@ -41,7 +41,7 @@ insert(
% clob # type
% 188 # length
insert(
-| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ]
+| table(sys.cm_tmp) [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT
| union (
| | table (sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar
"NULL", varchar "null", varchar "a:\\file1", bigint "-1", bigint "0", int "0",
int "0", varchar "NULL", int "0"),
| | ) [ "cm_tmp"."i" ] COUNT ,
diff --git a/sql/test/Tests/truncate-statements-extra.stable.out
b/sql/test/Tests/truncate-statements-extra.stable.out
--- a/sql/test/Tests/truncate-statements-extra.stable.out
+++ b/sql/test/Tests/truncate-statements-extra.stable.out
@@ -86,9 +86,9 @@ stdout of test 'truncate-statements-extr
% .plan # table_name
% rel # name
% clob # type
-% 87 # length
+% 94 # length
truncate continue identity, restrict(
-| table(sys.testing4) [ "testing4"."a" NOT NULL HASHCOL , "testing4"."%TID%"
NOT NULL ]
+| table(sys.testing4) [ "testing4"."a" NOT NULL HASHCOL , "testing4"."%TID%"
NOT NULL ] COUNT
)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list