featurebase/sql3/test/defs/defs_date_functions.go
Vengata Krishnan 6777e3dc07
FB-1968 timestamp data type related fixes and enhancements (#2256)
* Removed support for EPOCH column constraint from TIMESTAMP SQL data type.
* Implicit conversion of integers to timestamp will treat the integer value as seconds since unix epoch.
* Add new ToTimeStamp(num, timeunit) SQL scalar function to help convert integer values to timestamp.
2023-02-24 14:57:17 -05:00

245 lines
5.3 KiB
Go

package defs
import "time"
// datepart tests
var datePartTests = TableTest{
Table: tbl(
"dateparttests",
srcHdrs(
srcHdr("_id", fldTypeID),
srcHdr("a", fldTypeInt, "min 0", "max 1000"),
srcHdr("b", fldTypeInt, "min 0", "max 1000"),
srcHdr("ts", fldTypeTimestamp),
),
srcRows(
srcRow(int64(1), int64(10), int64(100), knownTimestamp()),
),
),
SQLTests: []SQLTest{
{
SQLs: sqls(
"select datepart()",
),
ExpErr: "count of formal parameters (2) does not match count of actual parameters (0)",
},
{
SQLs: sqls(
"select datepart(1, 2)",
),
ExpErr: "an expression of type 'int' cannot be passed to a parameter of type 'string'",
},
{
SQLs: sqls(
"select datepart('1', current_timestamp)",
),
ExpErr: "invalid value '1' for parameter 'interval'",
},
{
SQLs: sqls(
"select totimestamp()",
),
ExpErr: "count of formal parameters (2) does not match count of actual parameters (0)",
},
{
SQLs: sqls(
"select totimestamp('a')",
),
ExpErr: "an expression of type 'string' cannot be passed to a parameter of type 'int'",
},
{
SQLs: sqls(
"select totimestamp(1, 2)",
),
ExpErr: "an expression of type 'int' cannot be passed to a parameter of type 'string'",
},
{
SQLs: sqls(
"select totimestamp(1, 'x')",
),
ExpErr: "invalid value 'x' for parameter 'timeunit'",
},
{
SQLs: sqls(
"select _id, datepart('yy', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(2012)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('yd', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(306)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('m', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(11)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('d', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(1)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('w', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(4)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('wk', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(44)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('hh', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(22)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('mi', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(8)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('s', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(41)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('ms', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(0)),
),
Compare: CompareExactUnordered,
},
{
SQLs: sqls(
"select _id, datepart('ns', ts) from dateparttests",
),
ExpHdrs: hdrs(
hdr("_id", fldTypeID),
hdr("", fldTypeInt),
),
ExpRows: rows(
row(int64(1), int64(0)),
),
Compare: CompareExactUnordered,
},
{
//test datepart(timestamp, part) for implicit conversion of integer value passed as argument to timestamp param
SQLs: sqls(
"select datepart('yy', 0) as \"yy\", datepart('m', 0) as \"m\", datepart('d', 0) as \"d\"",
),
ExpHdrs: hdrs(
hdr("yy", fldTypeInt),
hdr("m", fldTypeInt),
hdr("d", fldTypeInt),
),
ExpRows: rows(
row(int64(1970), int64(1), int64(1)),
),
Compare: CompareExactUnordered,
},
{
//test ToTimestamp(num, timeunit) for all possible time unit values
SQLs: sqls(
"select totimestamp(1000) as \"default\", totimestamp(1000, 's') as \"s\", totimestamp(1000000, 'ms') as \"ms\", totimestamp(1000000000, 'us') as \"us\", totimestamp(1000000000, 'µs') as \"µs\", totimestamp(1000000000000, 'ns') as \"ns\"",
),
ExpHdrs: hdrs(
hdr("default", fldTypeTimestamp),
hdr("s", fldTypeTimestamp),
hdr("ms", fldTypeTimestamp),
hdr("us", fldTypeTimestamp),
hdr("µs", fldTypeTimestamp),
hdr("ns", fldTypeTimestamp),
),
ExpRows: rows(
row(time.Unix(1000, 0).UTC(),
time.Unix(1000, 0).UTC(),
time.UnixMilli(1000000).UTC(),
time.UnixMicro(1000000000).UTC(),
time.UnixMicro(1000000000).UTC(),
time.Unix(0, 1000000000000).UTC()),
),
Compare: CompareExactUnordered,
},
},
}