Changeset: 61cb121841f0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/61cb121841f0
Added Files:
sql/test/datetime/Tests/All
sql/test/datetime/Tests/str_to_date.test
Modified Files:
monetdb5/modules/atoms/mtime.c
Branch: mtime-bug
Log Message:
Fixes #7599 str_to_date MAL signatures and adds corresponding tests
diffs (109 lines):
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -608,8 +608,8 @@ NAME##_bulk_p1(Client cntxt, MalBlkPtr m
bool nils = false;
\
bat *ret = getArgReference_bat(stk, pci, 0),
\
*bid2 = getArgReference_bat(stk, pci, 2),
\
- *sid2 = pci->argc == 5 ? getArgReference_bat(stk, pci, 3) :
NULL; \
- lng *extra = getArgReference_lng(stk, pci, pci->argc-1);
\
+ *sid2 = pci->argc == 5 ? getArgReference_bat(stk, pci, 4) :
NULL; \
+ lng *extra = getArgReference_lng(stk, pci, 3);
\
const INTYPE1 src1 = *(INTYPE1*)getArgReference(stk, pci, 1);
\
BATiter b2i;
\
DEC_SRC2(INTYPE2, 2);
\
@@ -686,7 +686,7 @@ NAME##_bulk_p2(Client cntxt, MalBlkPtr m
bat *ret = getArgReference_bat(stk, pci, 0),
\
*bid1 = getArgReference_bat(stk, pci, 1),
\
*sid1 = pci->argc == 5 ? getArgReference_bat(stk, pci, 4) :
NULL; \
- lng *extra = getArgReference_lng(stk, pci, pci->argc-2);
\
+ lng *extra = getArgReference_lng(stk, pci, 3);
\
BATiter b1i;
\
DEC_SRC1(INTYPE1, 1);
\
const INTYPE2 src2 = *(INTYPE2*)getArgReference(stk, pci, 2);
\
@@ -1785,7 +1785,7 @@ static mel_func mtime_init_funcs[] = {
pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk_p1, false, "",
args(1,4,
batarg("",date),arg("s",str),batarg("format",str),arg("tz_msec",lng))),
pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk_p2, false, "",
args(1,4,
batarg("",date),batarg("s",str),arg("format",str),arg("tz_msec",lng))),
pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk, false, "",
args(1,6,
batarg("",date),batarg("s",str),batarg("format",str),batarg("s1",oid),batarg("s2",oid),arg("tz_msec",lng))),
- pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk_p1, false, "",
args(1,5,
batarg("",date),arg("s",str),batarg("format",str),batarg("s",oid),arg("tz_msec",lng))),
+ pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk_p1, false, "",
args(1,5,
batarg("",date),arg("s",str),batarg("format",str),arg("tz_msec",lng),batarg("s",oid))),
pattern("batmtime", "str_to_date", MTIMEstr_to_date_bulk_p2, false, "",
args(1,5,
batarg("",date),batarg("s",str),arg("format",str),arg("tz_msec",lng),batarg("s",oid))),
command("mtime", "date_to_str", MTIMEdate_to_str, false, "create a string
from the date, using the specified format (see man strftime)", args(1,3,
arg("",str),arg("d",date),arg("format",str))),
pattern("batmtime", "date_to_str", MTIMEdate_to_str_bulk, false, "",
args(1,3, batarg("",str),batarg("d",date),batarg("format",str))),
diff --git a/sql/test/datetime/Tests/All b/sql/test/datetime/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/datetime/Tests/All
@@ -0,0 +1,1 @@
+str_to_date
diff --git a/sql/test/datetime/Tests/str_to_date.test
b/sql/test/datetime/Tests/str_to_date.test
new file mode 100644
--- /dev/null
+++ b/sql/test/datetime/Tests/str_to_date.test
@@ -0,0 +1,66 @@
+statement ok
+create table idt (n int, d varchar(10), p varchar(10));
+
+statement ok
+insert into idt values
+ (1, '2019-01-11', '%Y-%m-%d'),
+ (2, '2020-01-11', '%Y-%d-%m'),
+ (3, '2021-01-11', '%F')
+
+query IT rowsort
+select n, str_to_date(d, '%Y-%m-%d') from idt
+----
+1
+2019-01-11
+2
+2020-01-11
+3
+2021-01-11
+
+# the CASE clause assures that we use a bat version of str_to_date which
+# accept oid as arguments for the case of CASE condition (see the MAL)
+query IT rowsort
+select n,
+ case when n < 2 then
+ str_to_date(d,'%Y-%m-%d')
+ else
+ str_to_date(d,'%Y-%m-%d')
+ end
+from idt
+----
+1
+2019-01-11
+2
+2020-01-11
+3
+2021-01-11
+
+
+query IT rowsort
+select n, str_to_date('1999-01-12', p) from idt
+----
+1
+1999-01-12
+2
+1999-12-01
+3
+1999-01-12
+
+# the CASE clause assures that we use a bat version of str_to_date which
+# accept oid as arguments for the case of CASE condition (see the MAL)
+query IT rowsort
+select n,
+ case when n < 2 then
+ str_to_date('1999-01-12', p)
+ else
+ str_to_date('1999-01-12', p)
+ end
+from idt
+----
+1
+1999-01-12
+2
+1999-12-01
+3
+1999-01-12
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]