Files
gocqlx/qb/cmp_test.go

255 lines
4.1 KiB
Go
Raw Normal View History

2017-09-21 21:43:27 +02:00
// Copyright (C) 2017 ScyllaDB
// Use of this source code is governed by a ALv2-style
// license that can be found in the LICENSE file.
2017-07-27 13:39:27 +02:00
package qb
import (
"bytes"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestCmp(t *testing.T) {
table := []struct {
C Cmp
S string
2017-08-30 10:04:33 +02:00
N []string
2017-07-27 13:39:27 +02:00
}{
2017-08-30 10:04:33 +02:00
// Basic comparators
2017-07-27 13:39:27 +02:00
{
C: Eq("eq"),
S: "eq=?",
2017-08-30 10:04:33 +02:00
N: []string{"eq"},
2017-07-27 13:39:27 +02:00
},
{
C: Lt("lt"),
S: "lt<?",
2017-08-30 10:04:33 +02:00
N: []string{"lt"},
2017-07-27 13:39:27 +02:00
},
2019-05-13 11:30:19 +02:00
{
C: LtTuple("lt", 2),
S: "lt<(?,?)",
N: []string{"lt_0", "lt_1"},
2019-05-13 11:30:19 +02:00
},
2017-07-27 13:39:27 +02:00
{
C: LtOrEq("lt"),
S: "lt<=?",
2017-08-30 10:04:33 +02:00
N: []string{"lt"},
2017-07-27 13:39:27 +02:00
},
2019-05-13 11:30:19 +02:00
{
C: LtOrEqTuple("lt", 2),
S: "lt<=(?,?)",
N: []string{"lt_0", "lt_1"},
2019-05-13 11:30:19 +02:00
},
2017-07-27 13:39:27 +02:00
{
C: Gt("gt"),
S: "gt>?",
2017-08-30 10:04:33 +02:00
N: []string{"gt"},
2017-07-27 13:39:27 +02:00
},
2019-05-13 11:30:19 +02:00
{
C: GtTuple("gt", 2),
S: "gt>(?,?)",
N: []string{"gt_0", "gt_1"},
2019-05-13 11:30:19 +02:00
},
2017-07-27 13:39:27 +02:00
{
C: GtOrEq("gt"),
S: "gt>=?",
2017-08-30 10:04:33 +02:00
N: []string{"gt"},
2017-07-27 13:39:27 +02:00
},
2019-05-13 11:30:19 +02:00
{
C: GtOrEqTuple("gt", 2),
S: "gt>=(?,?)",
N: []string{"gt_0", "gt_1"},
2019-05-13 11:30:19 +02:00
},
2017-07-27 13:39:27 +02:00
{
C: In("in"),
S: "in IN ?",
2017-08-30 10:04:33 +02:00
N: []string{"in"},
},
2019-05-13 11:30:19 +02:00
{
C: InTuple("in", 2),
S: "in IN (?,?)",
N: []string{"in_0", "in_1"},
2019-05-13 11:30:19 +02:00
},
2017-08-30 10:04:33 +02:00
{
C: Contains("cnt"),
S: "cnt CONTAINS ?",
N: []string{"cnt"},
},
2019-05-13 11:30:19 +02:00
{
C: ContainsTuple("cnt", 2),
S: "cnt CONTAINS (?,?)",
N: []string{"cnt_0", "cnt_1"},
2019-05-13 11:30:19 +02:00
},
{
C: ContainsKey("cntKey"),
S: "cntKey CONTAINS KEY ?",
N: []string{"cntKey"},
},
2019-05-13 11:30:19 +02:00
{
C: ContainsKeyTuple("cntKey", 2),
S: "cntKey CONTAINS KEY (?,?)",
N: []string{"cntKey_0", "cntKey_1"},
2019-05-13 11:30:19 +02:00
},
2019-01-08 04:19:57 +04:00
{
C: Like("like"),
S: "like LIKE ?",
N: []string{"like"},
},
2019-05-13 11:30:19 +02:00
{
C: LikeTuple("like", 2),
S: "like LIKE (?,?)",
N: []string{"like_0", "like_1"},
2019-05-13 11:30:19 +02:00
},
{
C: Ne("ne"),
S: "ne!=?",
N: []string{"ne"},
},
{
C: NeTuple("ne", 3),
S: "ne!=(?,?,?)",
N: []string{"ne_0", "ne_1", "ne_2"},
},
2017-08-30 10:04:33 +02:00
// Custom bind names
{
C: EqNamed("eq", "name"),
S: "eq=?",
N: []string{"name"},
},
{
C: LtNamed("lt", "name"),
S: "lt<?",
N: []string{"name"},
},
{
C: LtOrEqNamed("lt", "name"),
S: "lt<=?",
N: []string{"name"},
},
{
C: GtNamed("gt", "name"),
S: "gt>?",
N: []string{"name"},
},
{
C: GtOrEqNamed("gt", "name"),
S: "gt>=?",
N: []string{"name"},
2017-07-27 13:39:27 +02:00
},
{
C: InNamed("in", "name"),
S: "in IN ?",
2017-08-30 10:04:33 +02:00
N: []string{"name"},
2017-07-27 13:39:27 +02:00
},
{
2017-08-30 10:04:33 +02:00
C: ContainsNamed("cnt", "name"),
2017-07-27 13:39:27 +02:00
S: "cnt CONTAINS ?",
2017-08-30 10:04:33 +02:00
N: []string{"name"},
2017-07-27 13:39:27 +02:00
},
{
C: ContainsKeyNamed("cntKey", "name"),
S: "cntKey CONTAINS KEY ?",
N: []string{"name"},
},
{
C: NeNamed("ne", "name"),
S: "ne!=?",
N: []string{"name"},
},
2017-08-30 10:04:33 +02:00
// Literals
{
C: EqLit("eq", "litval"),
S: "eq=litval",
},
{
C: LtLit("lt", "litval"),
S: "lt<litval",
},
{
C: LtOrEqLit("lt", "litval"),
S: "lt<=litval",
},
{
C: GtLit("gt", "litval"),
S: "gt>litval",
},
{
C: GtOrEqLit("gt", "litval"),
S: "gt>=litval",
},
{
C: InLit("in", "litval"),
S: "in IN litval",
},
{
C: ContainsLit("cnt", "litval"),
S: "cnt CONTAINS litval",
},
{
C: NeLit("ne", "litval"),
S: "ne!=litval",
},
2017-08-30 10:04:33 +02:00
// Functions
2017-07-27 13:39:27 +02:00
{
2017-09-22 00:07:53 +02:00
C: EqFunc("eq", Fn("fn", "arg0", "arg1")),
2017-08-30 10:04:33 +02:00
S: "eq=fn(?,?)",
N: []string{"arg0", "arg1"},
},
{
2017-09-22 00:07:53 +02:00
C: EqFunc("eq", MaxTimeuuid("arg0")),
2017-08-30 10:04:33 +02:00
S: "eq=maxTimeuuid(?)",
N: []string{"arg0"},
},
{
2017-09-22 00:07:53 +02:00
C: EqFunc("eq", MinTimeuuid("arg0")),
2017-08-30 10:04:33 +02:00
S: "eq=minTimeuuid(?)",
N: []string{"arg0"},
},
{
2017-09-22 00:07:53 +02:00
C: EqFunc("eq", Now()),
2017-08-30 10:04:33 +02:00
S: "eq=now()",
},
{
C: LtFunc("eq", Now()),
S: "eq<now()",
},
{
C: LtOrEqFunc("eq", MaxTimeuuid("arg0")),
S: "eq<=maxTimeuuid(?)",
N: []string{"arg0"},
},
{
C: GtFunc("eq", Now()),
S: "eq>now()",
},
{
C: GtOrEqFunc("eq", MaxTimeuuid("arg0")),
S: "eq>=maxTimeuuid(?)",
N: []string{"arg0"},
},
{
C: NeFunc("ne", Fn("fn", "arg0", "arg1", "arg2")),
S: "ne!=fn(?,?,?)",
N: []string{"arg0", "arg1", "arg2"},
},
2017-07-27 13:39:27 +02:00
}
buf := bytes.Buffer{}
for _, test := range table {
buf.Reset()
name := test.C.writeCql(&buf)
if diff := cmp.Diff(test.S, buf.String()); diff != "" {
t.Error(diff)
}
if diff := cmp.Diff(test.N, name); diff != "" {
t.Error(diff)
}
}
}