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