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

Reply via email to