Changeset: 84a23e24786f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84a23e24786f
Modified Files:
        sql/server/rel_exp.c
        sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql
        
sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err
        
sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out
Branch: Apr2019
Log Message:

Further improvements for Bug 6706. When the column expression is an alias, 
search for the referencing column.


diffs (77 lines):

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
@@ -2179,9 +2179,9 @@ exp_set_type_recurse(mvc *sql, sql_subty
                        /* if the column pretended is found, set its type */
                        const char *next_rel = exp_relname(e), *next_exp = 
exp_name(e);
                        if (next_rel && !strcmp(next_rel, *relname)) {
-                               *relname = next_rel;
+                               *relname = (e->type == e_column && e->l) ? 
(const char*) e->l : next_rel;
                                if (next_exp && !strcmp(next_exp, *expname)) {
-                                       *expname = next_exp;
+                                       *expname = (e->type == e_column && 
e->r) ? (const char*) e->r : next_exp;
                                        if (e->type == e_column && 
!e->tpe.type) {
                                                if (set_type_param(sql, type, 
e->flag) == 0)
                                                        e->tpe = *type;
diff --git 
a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql 
b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql
--- a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql
+++ b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.sql
@@ -11,7 +11,8 @@ exec **();
 prepare merge into test.share_daily_history as target
 using (select * from (values('BHP',?,?,?,?,?,?)) as 
a(id,timeid,c1,c2,c3,c4,volume)) as source
 on source.id=target.id and source.timeid=target.timeid
-when not matched then insert (id,timeid,c1,c2,c3,c4,volume) 
values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume);
 --error
+when not matched then insert (id,timeid,c1,c2,c3,c4,volume) 
values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume);
+exec **(1,2,3,4,5,6);
 
 prepare select * from test.share_daily_history
 inner join (values('BHP',?,?,?,?,?,?)) as source(id,timeid,c1,c2,c3,c4,volume)
diff --git 
a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err 
b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err
--- 
a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err
+++ 
b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.err
@@ -30,14 +30,7 @@ stderr of test 'prepared-merge-statement
 # 10:09:57 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-31613" "--port=31509"
 # 10:09:57 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-31613/.s.monetdb.31509
-QUERY = prepare merge into test.share_daily_history as target
-        using (select * from (values('BHP',?,?,?,?,?,?)) as 
a(id,timeid,c1,c2,c3,c4,volume)) as source
-        on source.id=target.id and source.timeid=target.timeid
-        when not matched then insert (id,timeid,c1,c2,c3,c4,volume) 
values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume);
 --error
-ERROR = !Could not determine type for argument number 2
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-31613/.s.monetdb.31509
+MAPI  = (monetdb) /var/tmp/mtest-16265/.s.monetdb.32049
 QUERY = prepare select * from test.share_daily_history
         inner join (values('BHP',?,?,?,?,?,?)) as 
source(id,timeid,c1,c2,c3,c4,volume)
         on source.id=share_daily_history.id and 
source.timeid=share_daily_history.timeid; --error
diff --git 
a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out 
b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out
--- 
a/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out
+++ 
b/sql/test/BugTracker-2019/Tests/prepared-merge-statement.Bug-6706.stable.out
@@ -82,6 +82,26 @@ Ready.
 [ 1    ]
 #exec  7();
 [ 0    ]
+#prepare merge into test.share_daily_history as target
+#using (select * from (values('BHP',?,?,?,?,?,?)) as 
a(id,timeid,c1,c2,c3,c4,volume)) as source
+#on source.id=target.id and source.timeid=target.timeid
+#when not matched then insert (id,timeid,c1,c2,c3,c4,volume) 
values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume);
+#prepare merge into test.share_daily_history as target
+#using (select * from (values('BHP',?,?,?,?,?,?)) as 
a(id,timeid,c1,c2,c3,c4,volume)) as source
+#on source.id=target.id and source.timeid=target.timeid
+#when not matched then insert (id,timeid,c1,c2,c3,c4,volume) 
values(source.id,source.timeid,source.c1,source.c2,source.c3,source.c4,source.volume);
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    str,    str,    str # type
+% 3,   2,      1,      0,      0,      0 # length
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+[ "int",       32,     0,      NULL,   NULL,   NULL    ]
+#exec  9(1,2,3,4,5,6);
+[ 0    ]
 #prepare select * from test.share_daily_history inner join (values('BHP',?)) 
as source(id,timeid)
 #on source.id=share_daily_history.id and 
source.timeid=share_daily_history.timeid;
 #prepare select * from test.share_daily_history inner join (values('BHP',?)) 
as source(id,timeid)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to