package defs import ( "time" "github.com/featurebasedb/featurebase/v3/pql" ) func expectedCastTime() time.Time { return time.Unix(1000, 0).UTC() } var castIntLiteral = TableTest{ Table: tbl( "", nil, nil, ), SQLTests: []SQLTest{ { SQLs: sqls( "select cast(1 as int)", ), ExpHdrs: hdrs( hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(1 as bool)", ), ExpHdrs: hdrs( hdr("", fldTypeBool), ), ExpRows: rows( row(bool(true)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(0 as bool)", ), ExpHdrs: hdrs( hdr("", fldTypeBool), ), ExpRows: rows( row(bool(false)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(1 as decimal(2))", ), ExpHdrs: hdrs( hdr("", fldTypeDecimal2), ), ExpRows: rows( row(pql.NewDecimal(100, 2)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(1 as id)", ), ExpHdrs: hdrs( hdr("", fldTypeID), ), ExpRows: rows( row(int64(1)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(1 as idset)", ), ExpErr: "'int' cannot be cast to 'idset'", }, { SQLs: sqls( "select cast(1 as string)", ), ExpHdrs: hdrs( hdr("", fldTypeString), ), ExpRows: rows( row(string("1")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select cast(1 as stringset)", ), ExpErr: "'int' cannot be cast to 'stringset'", }, { SQLs: sqls( "select cast(1000 as timestamp)", ), ExpHdrs: hdrs( hdr("", fldTypeTimestamp), ), ExpRows: rows( row(time.Time(expectedCastTime())), ), Compare: CompareExactUnordered, }, }, } var castInt = TableTest{ Table: tbl( "cast_int", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(i1 as int) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1), int64(1000)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(i1 as bool) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeBool), ), ExpRows: rows( row(int64(1), bool(true)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(i1 as decimal(2)) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeDecimal2), ), ExpRows: rows( row(int64(1), pql.NewDecimal(100000, 2)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(i1 as id) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeID), ), ExpRows: rows( row(int64(1), int64(1000)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(i1 as idset) from cast_int", ), ExpErr: "'int' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(i1 as string) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("1000")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(i1 as stringset) from cast_int", ), ExpErr: "'int' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(i1 as timestamp) from cast_int", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeTimestamp), ), ExpRows: rows( row(int64(1), time.Time(expectedCastTime())), ), Compare: CompareExactUnordered, }, }, } var castBool = TableTest{ Table: tbl( "cast_bool", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(b1 as int) from cast_bool", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1), int64(1)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(b1 as bool) from cast_bool", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeBool), ), ExpRows: rows( row(int64(1), bool(true)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(b1 as decimal(2)) from cast_bool", ), ExpErr: "'bool' cannot be cast to 'decimal(2)'", }, { SQLs: sqls( "select _id, cast(b1 as id) from cast_bool", ), ExpErr: "'bool' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast(b1 as idset) from cast_bool", ), ExpErr: "'bool' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(b1 as string) from cast_bool", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("true")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(b1 as stringset) from cast_bool", ), ExpErr: "'bool' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(b1 as timestamp) from cast_bool", ), ExpErr: "'bool' cannot be cast to 'timestamp'", }, }, } var castDecimal = TableTest{ Table: tbl( "cast_dec", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(d1 as int) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'int'", }, { SQLs: sqls( "select _id, cast(d1 as bool) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'bool'", }, { SQLs: sqls( "select _id, cast(d1 as decimal(2)) from cast_dec", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeDecimal2), ), ExpRows: rows( row(int64(1), pql.NewDecimal(1234, 2)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(d1 as id) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast(d1 as idset) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(d1 as string) from cast_dec", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("12.34")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(d1 as stringset) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(d1 as timestamp) from cast_dec", ), ExpErr: "'decimal(2)' cannot be cast to 'timestamp'", }, }, } var castID = TableTest{ Table: tbl( "cast_id", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(id1 as int) from cast_id", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1), int64(20)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(id1 as bool) from cast_id", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeBool), ), ExpRows: rows( row(int64(1), bool(true)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(id1 as decimal(2)) from cast_id", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeDecimal2), ), ExpRows: rows( row(int64(1), pql.NewDecimal(2000, 2)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(id1 as id) from cast_id", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeID), ), ExpRows: rows( row(int64(1), int64(20)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(id1 as idset) from cast_id", ), ExpErr: "'id' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(id1 as string) from cast_id", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("20")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(id1 as stringset) from cast_id", ), ExpErr: "'id' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(id1 as timestamp) from cast_id", ), ExpErr: "'id' cannot be cast to 'timestamp'", }, }, } var castIDSet = TableTest{ Table: tbl( "cast_ids", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(ids1 as int) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'int'", }, { SQLs: sqls( "select _id, cast(ids1 as bool) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'bool'", }, { SQLs: sqls( "select _id, cast(ids1 as decimal(2)) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'decimal(2)'", }, { SQLs: sqls( "select _id, cast(ids1 as id) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast(ids1 as idset) from cast_ids", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeIDSet), ), ExpRows: rows( row(int64(1), []int64{101, 102}), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(ids1 as string) from cast_ids", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("[101 102]")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(ids1 as stringset) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(ids1 as timestamp) from cast_ids", ), ExpErr: "'idset' cannot be cast to 'timestamp'", }, }, } var castString = TableTest{ Table: tbl( "cast_string", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(s1 as int) from cast_string", ), ExpErr: "'foo' cannot be cast to 'int'", }, { SQLs: sqls( "select _id, cast('11' as int) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1), int64(11)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(s1 as bool) from cast_string", ), ExpErr: "'foo' cannot be cast to 'bool'", }, { SQLs: sqls( "select _id, cast('true' as bool) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeBool), ), ExpRows: rows( row(int64(1), bool(true)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(s1 as decimal(2)) from cast_string", ), ExpErr: "'foo' cannot be cast to 'decimal(2)'", }, { SQLs: sqls( "select _id, cast('12.34' as decimal(2)) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeDecimal2), ), ExpRows: rows( row(int64(1), pql.NewDecimal(1234, 2)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(s1 as id) from cast_string", ), ExpErr: "'foo' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast('11' as id) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeID), ), ExpRows: rows( row(int64(1), int64(11)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(s1 as idset) from cast_string", ), ExpErr: "'string' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(s1 as string) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("foo")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(s1 as stringset) from cast_string", ), ExpErr: "'string' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(s1 as timestamp) from cast_string", ), ExpErr: "'foo' cannot be cast to 'timestamp'", }, { SQLs: sqls( "select _id, cast('1970-01-01T00:16:40Z' as timestamp) from cast_string", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeTimestamp), ), ExpRows: rows( row(int64(1), time.Time(expectedCastTime())), ), Compare: CompareExactUnordered, }, }, } var castStringSet = TableTest{ Table: tbl( "cast_ss", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(ss1 as int) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'int'", }, { SQLs: sqls( "select _id, cast(ss1 as bool) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'bool'", }, { SQLs: sqls( "select _id, cast(ss1 as decimal(2)) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'decimal(2)'", }, { SQLs: sqls( "select _id, cast(ss1 as id) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast(ss1 as idset) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(ss1 as string) from cast_ss", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string(`["101","102"]`)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(ss1 as stringset) from cast_ss", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeStringSet), ), ExpRows: rows( row(int64(1), []string{"101", "102"}), ), Compare: CompareExactUnordered, SortStringKeys: true, }, { SQLs: sqls( "select _id, cast(ss1 as timestamp) from cast_ss", ), ExpErr: "'stringset' cannot be cast to 'timestamp'", }, }, } var castTimestamp = TableTest{ Table: tbl( "cast_ts", srcHdrs( srcHdr("_id", fldTypeID), srcHdr("i1", fldTypeInt, "min 0", "max 1000"), srcHdr("b1", fldTypeBool), srcHdr("d1", fldTypeDecimal2), srcHdr("id1", fldTypeID), srcHdr("ids1", fldTypeIDSet), srcHdr("s1", fldTypeString), srcHdr("ss1", fldTypeStringSet), srcHdr("t1", fldTypeTimestamp), ), srcRows( srcRow(int64(1), int64(1000), bool(true), float64(12.34), int64(20), []int64{101, 102}, string("foo"), []string{"101", "102"}, knownTimestamp()), ), ), SQLTests: []SQLTest{ { SQLs: sqls( "select _id, cast(t1 as int) from cast_ts", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeInt), ), ExpRows: rows( row(int64(1), int64(1351807721)), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(t1 as bool) from cast_ts", ), ExpErr: "'timestamp' cannot be cast to 'bool'", }, { SQLs: sqls( "select _id, cast(t1 as decimal(2)) from cast_ts", ), ExpErr: "'timestamp' cannot be cast to 'decimal(2)'", }, { SQLs: sqls( "select _id, cast(t1 as id) from cast_ts", ), ExpErr: "'timestamp' cannot be cast to 'id'", }, { SQLs: sqls( "select _id, cast(t1 as idset) from cast_ts", ), ExpErr: "'timestamp' cannot be cast to 'idset'", }, { SQLs: sqls( "select _id, cast(t1 as string) from cast_ts", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeString), ), ExpRows: rows( row(int64(1), string("2012-11-01T22:08:41Z")), ), Compare: CompareExactUnordered, }, { SQLs: sqls( "select _id, cast(t1 as stringset) from cast_ts", ), ExpErr: "'timestamp' cannot be cast to 'stringset'", }, { SQLs: sqls( "select _id, cast(t1 as timestamp) from cast_ts", ), ExpHdrs: hdrs( hdr("_id", fldTypeID), hdr("", fldTypeTimestamp), ), ExpRows: rows( row(int64(1), knownTimestamp()), ), Compare: CompareExactUnordered, }, }, }