mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 02:44:59 +00:00
507 lines
14 KiB
Go
507 lines
14 KiB
Go
package defs
|
|
|
|
// set literal tests
|
|
var setLiteralTests = TableTest{
|
|
name: "selectwithsetliterals",
|
|
Table: tbl(
|
|
"selectwithsetliterals",
|
|
srcHdrs(
|
|
srcHdr("_id", fldTypeID),
|
|
srcHdr("a", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("b", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("event", fldTypeStringSet),
|
|
srcHdr("ievent", fldTypeIDSet),
|
|
),
|
|
srcRows(
|
|
srcRow(int64(1), int64(10), int64(100), []string{"POST"}, nil),
|
|
srcRow(int64(2), int64(20), int64(200), []string{"GET"}, nil),
|
|
srcRow(int64(3), int64(30), int64(300), []string{"GET", "POST"}, []int64{101}),
|
|
),
|
|
),
|
|
SQLTests: []SQLTest{
|
|
{
|
|
// SetContainsSelectList
|
|
name: "set-contains-select-list",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(event, 'POST') from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), false),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsAllSelectList
|
|
name: "set-contains-all-select-list",
|
|
SQLs: sqls(
|
|
"select _id, setcontainsall(event, ['POST']) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), false),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsAnySelectList
|
|
name: "set-contains-any-select-list",
|
|
SQLs: sqls(
|
|
"select _id, setcontainsany(event, ['POST', 'DELETE']) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), false),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsSelectListInt
|
|
name: "set-contains-select-list-int",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(ievent, 101) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), nil),
|
|
row(int64(2), nil),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsSelectAllListInt
|
|
name: "set-contains-select-all-list-int",
|
|
SQLs: sqls(
|
|
"select _id, setcontainsall(ievent, [101]) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), nil),
|
|
row(int64(2), nil),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsSelectAnyListInt
|
|
name: "set-contains-select-any-list-int",
|
|
SQLs: sqls(
|
|
"select _id, setcontainsany(ievent, [100, 101, 102]) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), nil),
|
|
row(int64(2), nil),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsWithLiteral
|
|
// SetContainsWithLiteralInt
|
|
// SetContainsWithLiteralAny
|
|
// SetContainsWithLiteralAnyInt
|
|
// SetContainsWithLiteralAll
|
|
// SetContainsWithLiteralAllInt
|
|
name: "set-contains-with-literal",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(['POST'], 'POST') from selectwithsetliterals",
|
|
"select _id, setcontains([101], 101) from selectwithsetliterals",
|
|
"select _id, setcontainsany(['POST'], ['POST']) from selectwithsetliterals",
|
|
"select _id, setcontainsany([101], [101]) from selectwithsetliterals",
|
|
"select _id, setcontainsall(['POST'], ['POST']) from selectwithsetliterals",
|
|
"select _id, setcontainsall([101], [101]) from selectwithsetliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), true),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
},
|
|
}
|
|
|
|
// set function tests
|
|
var setFunctionTests = TableTest{
|
|
name: "selectwithset",
|
|
Table: tbl(
|
|
"selectwithset",
|
|
srcHdrs(
|
|
srcHdr("_id", fldTypeID),
|
|
srcHdr("a", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("b", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("event", fldTypeStringSet),
|
|
srcHdr("ievent", fldTypeIDSet),
|
|
),
|
|
srcRows(
|
|
srcRow(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
srcRow(int64(2), int64(20), int64(200), []string{"GET"}, []int64(nil)),
|
|
srcRow(int64(3), int64(30), int64(300), []string{"GET", "POST"}, []int64(nil)),
|
|
),
|
|
),
|
|
SQLTests: []SQLTest{
|
|
{
|
|
name: "set-contains",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, 'POST')",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("a", fldTypeInt),
|
|
hdr("b", fldTypeInt),
|
|
hdr("event", fldTypeStringSet),
|
|
hdr("ievent", fldTypeIDSet),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
row(int64(3), int64(30), int64(300), []string{"GET", "POST"}, nil),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
SortStringKeys: true,
|
|
},
|
|
{
|
|
// SetContains
|
|
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, 'POST')",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("a", fldTypeInt),
|
|
hdr("b", fldTypeInt),
|
|
hdr("event", fldTypeStringSet),
|
|
hdr("ievent", fldTypeIDSet),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
row(int64(3), int64(30), int64(300), []string{"GET", "POST"}, nil),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
SortStringKeys: true,
|
|
},
|
|
{
|
|
// SetContainsInt
|
|
name: "set-contains-int",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(ievent, 101)",
|
|
"select * from selectwithset where setcontainsany(ievent, [101])",
|
|
"select * from selectwithset where setcontainsall(ievent, [101])",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("a", fldTypeInt),
|
|
hdr("b", fldTypeInt),
|
|
hdr("event", fldTypeStringSet),
|
|
hdr("ievent", fldTypeIDSet),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsInt
|
|
name: "set-contains-int-using-value",
|
|
SQLs: sqls(
|
|
"select _id, setcontainsany(ievent, [101]) from selectwithset",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), nil),
|
|
row(int64(3), nil),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsOrSetContains
|
|
// SetContainsAny
|
|
name: "set-contains-or-set-contains",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, 'POST') or setcontains(event, 'GET')",
|
|
"select * from selectwithset where setcontainsany(event, ['POST', 'GET'])",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("a", fldTypeInt),
|
|
hdr("b", fldTypeInt),
|
|
hdr("event", fldTypeStringSet),
|
|
hdr("ievent", fldTypeIDSet),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
row(int64(2), int64(20), int64(200), []string{"GET"}, nil),
|
|
row(int64(3), int64(30), int64(300), []string{"GET", "POST"}, nil),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
SortStringKeys: true,
|
|
},
|
|
{
|
|
// SetContainsAndSetContains
|
|
// SetContainsAll
|
|
name: "set-contains-and-set-contains",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, 'POST') and setcontains(event, 'GET')",
|
|
"select * from selectwithset where setcontainsall(event, ['POST', 'GET'])",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("a", fldTypeInt),
|
|
hdr("b", fldTypeInt),
|
|
hdr("event", fldTypeStringSet),
|
|
hdr("ievent", fldTypeIDSet),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(3), int64(30), int64(300), []string{"GET", "POST"}, nil),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
SortStringKeys: true,
|
|
},
|
|
{
|
|
// SetContainsWrongType
|
|
name: "set-contains-wrong-type",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, 1)",
|
|
),
|
|
ExpErr: "types 'stringset' and 'int' are not equatable",
|
|
},
|
|
{
|
|
// SetContainsWrongTypeInt
|
|
name: "set-contains-wrong-type-int",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(ievent, 'foo')",
|
|
),
|
|
ExpErr: "types 'idset' and 'string' are not equatable",
|
|
},
|
|
{
|
|
// SetContainsWrongTypeSet
|
|
name: "set-contains-wrong-type-set",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, ['foo'])",
|
|
),
|
|
ExpErr: "types 'stringset' and 'stringset' are not equatable",
|
|
},
|
|
{
|
|
// SetContainsWrongTypeSet
|
|
name: "set-contains-null-in-values",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, [null])",
|
|
),
|
|
ExpErr: "set literal must contain ints or strings",
|
|
},
|
|
{
|
|
// SetContainsWrongTypeSet
|
|
name: "set-contains-null-value",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(event, null)",
|
|
),
|
|
ExpErr: "types 'stringset' and 'void' are not equatable",
|
|
},
|
|
{
|
|
// SetContainsWrongTypeSet
|
|
name: "set-contains-null-set",
|
|
SQLs: sqls(
|
|
"select * from selectwithset where setcontains(null, [1])",
|
|
),
|
|
ExpErr: "set expression expected",
|
|
},
|
|
},
|
|
}
|
|
|
|
// set parameter tests
|
|
var setParameterTests = TableTest{
|
|
|
|
Table: tbl(
|
|
"selectwithsetparams",
|
|
srcHdrs(
|
|
srcHdr("_id", fldTypeID),
|
|
srcHdr("a", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("b", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("event", fldTypeStringSet),
|
|
srcHdr("ievent", fldTypeIDSet),
|
|
),
|
|
srcRows(
|
|
srcRow(int64(1), int64(10), int64(100), []string{"POST"}, []int64{101}),
|
|
srcRow(int64(2), int64(20), int64(200), []string{"GET"}, nil),
|
|
srcRow(int64(3), int64(30), int64(300), []string{"GET", "POST"}, nil),
|
|
),
|
|
),
|
|
SQLTests: []SQLTest{
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontains(['POST', 'GET'])",
|
|
),
|
|
ExpErr: "count of formal parameters (2) does not match count of actual parameters (1)",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontains(1, 2)",
|
|
),
|
|
ExpErr: "set expression expected",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontains(['POST', 'GET'], 1)",
|
|
),
|
|
ExpErr: "types 'stringset' and 'int' are not equatable",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontains([1, 2], '1')",
|
|
),
|
|
ExpErr: "types 'idset' and 'string' are not equatable",
|
|
},
|
|
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontainsall(['POST', 'GET'])",
|
|
"select setcontainsany(['POST', 'GET'])",
|
|
),
|
|
ExpErr: "count of formal parameters (2) does not match count of actual parameters (1)",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontainsall(1, 2)",
|
|
"select setcontainsany(1, 2)",
|
|
),
|
|
ExpErr: "set expression expected",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontainsall(['POST', 'GET'], [1, 2])",
|
|
"select setcontainsany(['POST', 'GET'], [1, 2])",
|
|
),
|
|
ExpErr: "types 'string' and 'id' are not equatable",
|
|
},
|
|
{
|
|
SQLs: sqls(
|
|
"select setcontainsall([1, 2], ['1', '2'])",
|
|
"select setcontainsany([1, 2], ['1', '2'])",
|
|
),
|
|
ExpErr: "types 'id' and 'string' are not equatable",
|
|
},
|
|
},
|
|
}
|
|
|
|
// test IDSetQ and StringSetQ functions
|
|
var setTimeQuantumTests = TableTest{
|
|
name: "selectwithsetqliterals",
|
|
Table: tbl(
|
|
"selectwithsetqliterals",
|
|
srcHdrs(
|
|
srcHdr("_id", fldTypeID),
|
|
srcHdr("a", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("b", fldTypeInt, "min 0", "max 1000"),
|
|
srcHdr("ssq1", fldTypeStringSetQ, "timequantum 'YMD'"),
|
|
srcHdr("isq1", fldTypeIDSetQ, "timequantum 'YMD'"),
|
|
),
|
|
),
|
|
SQLTests: []SQLTest{
|
|
// can't find example syntax or docs for how to put time quantum fields in with srcRow()
|
|
// so i'm inserting them with SQL statements.
|
|
{
|
|
SQLs: sqls(
|
|
"insert into selectwithsetqliterals(_id, a, b, ssq1, isq1) values (1, 10, 100, {'2022-01-03T00:00:00Z', ['foo']}, {'2022-01-01T00:00:00Z', [99, 101]})",
|
|
"insert into selectwithsetqliterals(_id, a, b, ssq1, isq1) values (2, 20, 200, {'2022-01-03T00:00:00Z', ['bar']}, {'2022-01-01T00:00:00Z', [100]})",
|
|
"insert into selectwithsetqliterals(_id, a, b, ssq1, isq1) values (3, 30, 300, {'2022-01-03T00:00:00Z', ['foo', 'bar']}, {'2022-01-01T00:00:00Z', [101]})",
|
|
),
|
|
ExpHdrs: hdrs(),
|
|
ExpRows: rows(),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsSelectList
|
|
name: "set-contains-select-list",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(ssq1, 'bar') from selectwithsetqliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), false),
|
|
row(int64(2), true),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsSelectListInt
|
|
name: "set-contains-select-list-int",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(isq1, 101) from selectwithsetqliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), false),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
{
|
|
// SetContainsWithLiteral
|
|
// SetContainsWithLiteralInt
|
|
// SetContainsWithLiteralAny
|
|
// SetContainsWithLiteralAnyInt
|
|
// SetContainsWithLiteralAll
|
|
// SetContainsWithLiteralAllInt
|
|
name: "set-contains-with-literal",
|
|
SQLs: sqls(
|
|
"select _id, setcontains(['foo'], 'foo') from selectwithsetqliterals",
|
|
"select _id, setcontains([101], 101) from selectwithsetqliterals",
|
|
"select _id, setcontainsany(['foo'], ['foo']) from selectwithsetqliterals",
|
|
"select _id, setcontainsany([101], [101]) from selectwithsetqliterals",
|
|
"select _id, setcontainsall(['foo'], ['foo']) from selectwithsetqliterals",
|
|
"select _id, setcontainsall([101], [101]) from selectwithsetqliterals",
|
|
),
|
|
ExpHdrs: hdrs(
|
|
hdr("_id", fldTypeID),
|
|
hdr("", fldTypeBool),
|
|
),
|
|
ExpRows: rows(
|
|
row(int64(1), true),
|
|
row(int64(2), true),
|
|
row(int64(3), true),
|
|
),
|
|
Compare: CompareExactUnordered,
|
|
},
|
|
},
|
|
}
|