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

Reply via email to