Changeset: 1a00270326de for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1a00270326de
Modified Files:
        monetdb5/modules/mal/wlc.c
        sql/backends/monet5/wlr.c
        sql/server/rel_exp.c
        sql/server/sql_atom.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: default
Log Message:

Merge with Apr2019.


diffs (144 lines):

diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c
--- a/monetdb5/modules/mal/wlc.c
+++ b/monetdb5/modules/mal/wlc.c
@@ -471,8 +471,12 @@ WLCsettime(Client cntxt, InstrPtr pci, I
        if(gettimeofday(&clock,NULL) == -1)
                throw(MAL,call,"Unable to retrieve current time");
        clk = clock.tv_sec;
+#ifdef HAVE_LOCALTIME_R
+       (void) localtime_r(&clk, &ctm);
+#else
        ctm = *localtime(&clk);
-       strftime(wlc_time, 26, "%Y-%m-%dT%H:%M:%S",&ctm);
+#endif
+       strftime(wlc_time, sizeof(wlc_time), "%Y-%m-%dT%H:%M:%S.000",&ctm);
        if (pushStr(cntxt->wlc, p, wlc_time) == NULL)
                throw(MAL, call, MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -398,7 +398,11 @@ WLRprocessScheduler(void *arg)
                if( wlr_timelimit[0]){
                        gettimeofday(&clock, NULL);
                        clk = clock.tv_sec;
+#ifdef HAVE_LOCALTIME_R
+                       (void) localtime_r(&clk, &ctm);
+#else
                        ctm = *localtime(&clk);
+#endif
                        strftime(clktxt, sizeof(clktxt), 
"%Y-%m-%dT%H:%M:%S.000",&ctm);
                        mnstr_printf(cntxt->fdout,"#now %s tlimit %s\n",clktxt, 
wlr_timelimit);
                        // actually never wait longer then the timelimit 
requires
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
@@ -2223,9 +2223,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/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -346,17 +346,14 @@ atom2string(sql_allocator *sa, atom *a)
                sprintf(buf, "%f", a->data.val.dval);
                break;
        case TYPE_str:
-               if (a->data.val.sval)
-                       return sa_strdup(sa, a->data.val.sval);
-               else
-                       sprintf(buf, "NULL");
-               break;
-        default:  
+               assert(a->data.val.sval);
+               return sa_strdup(sa, a->data.val.sval);
+       default:
                v = &a->data.val.ival;
                if (ATOMvarsized(a->data.vtype))
                        v = a->data.val.pval;
                if ((p = ATOMformat(a->data.vtype, v)) == NULL) {
-                       snprintf(buf, BUFSIZ, "atom2string(TYPE_%d) not 
implemented", a->data.vtype);
+                       snprintf(buf, BUFSIZ, "atom2string(TYPE_%d) not 
implemented", a->data.vtype);
                } else {
                         char *r = sa_strdup(sa, p);
                         _DELETE(p);
@@ -373,8 +370,7 @@ atom2sql(atom *a)
        char buf[BUFSIZ];
 
        if (a->data.vtype == TYPE_str && EC_INTERVAL(ec))
-               ec = EC_STRING; 
-       /* todo handle NULL's early */
+               ec = EC_STRING;
        if (a->isnull)
                return _STRDUP("NULL");
        switch (ec) {
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
@@ -80,6 +80,26 @@ stdout of test 'prepared-merge-statement
 [ 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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to