Changeset: 0487ed622863 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0487ed622863 Modified Files: sql/server/rel_basetable.c sql/server/rel_updates.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 Branch: Jul2021 Log Message:
Defensive lines. Add TID column if no other column is used, when inserting into a join idx and if the user is not allowed to use any other columns diffs (68 lines): diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c --- a/sql/server/rel_basetable.c +++ b/sql/server/rel_basetable.c @@ -88,6 +88,8 @@ rel_base_use_all( mvc *sql, sql_rel *rel continue; rel_base_set_used(ba, i); } + if (with_tid) + rel_base_set_used(ba, ol_length(t->columns)); } else { int len = USED_LEN(ol_length(t->columns) + 1 + ol_length(t->idxs)); for (int i = 0; i < len; i++) @@ -223,8 +225,9 @@ rel_base_projection( mvc *sql, sql_rel * if (rel_base_is_used(ba, i)) append(exps, bind_col_exp(sql, name, cn->data)); } - if (intern && rel_base_is_used(ba, i)) + if ((intern && rel_base_is_used(ba, i)) || list_empty(exps)) /* Add TID column if no column is used */ append(exps, exp_column(sql->sa, name, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1)); + i++; if (intern) { for (node *in = ol_first_node(t->idxs); in; in = in->next, i++) { if (rel_base_is_used(ba, i)) { diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -286,7 +286,7 @@ static sql_rel * rel_insert_table(sql_query *query, sql_table *t, char *name, sql_rel *inserts) { sql_rel *rel = rel_basetable(query->sql, t, name); - rel_base_use_all(query->sql, rel, 0); + rel_base_use_all(query->sql, rel, 1); rel = rewrite_basetable(query->sql, rel); return rel_insert(query->sql, rel, inserts); } 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 @@ -3,7 +3,7 @@ % clob # type % 193 # length insert( -| table("sys"."cm_tmp") [ "cm_tmp"."i" ] COUNT +| table("sys"."cm_tmp") [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT | union ( | | project ( | | | table ("sys"."copyfrom"(table("cm_tmp"), varchar "|", varchar "\n", varchar "NULL", varchar "null", varchar "/file1", bigint "-1", bigint "0", int "0", varchar "NULL", int "0", int "1"), 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 @@ -5,7 +5,7 @@ % clob # type % 194 # length insert( -| table("sys"."cm_tmp") [ "cm_tmp"."i" ] COUNT +| table("sys"."cm_tmp") [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT | union ( | | project ( | | | table ("sys"."copyfrom"(table("cm_tmp"), varchar "|", varchar "\n", varchar "NULL", varchar "null", varchar "\\file1", bigint "-1", bigint "0", int "0", varchar "NULL", int "0", int "1"), @@ -23,7 +23,7 @@ insert( % clob # type % 196 # length insert( -| table("sys"."cm_tmp") [ "cm_tmp"."i" ] COUNT +| table("sys"."cm_tmp") [ "cm_tmp"."i", "cm_tmp"."%TID%" NOT NULL ] COUNT | union ( | | project ( | | | table ("sys"."copyfrom"(table("cm_tmp"), varchar "|", varchar "\n", varchar "NULL", varchar "null", varchar "a:\\file1", bigint "-1", bigint "0", int "0", varchar "NULL", int "0", int "1"), _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list