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
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
C: LtOrEq("lt"),
|
|
|
|
|
S: "lt<=?",
|
2017-08-30 10:04:33 +02:00
|
|
|
N: []string{"lt"},
|
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
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
C: GtOrEq("gt"),
|
|
|
|
|
S: "gt>=?",
|
2017-08-30 10:04:33 +02:00
|
|
|
N: []string{"gt"},
|
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"},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
C: Contains("cnt"),
|
|
|
|
|
S: "cnt CONTAINS ?",
|
|
|
|
|
N: []string{"cnt"},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 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
|
|
|
},
|
2017-08-30 10:04:33 +02:00
|
|
|
|
2017-10-29 13:18:49 -04: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",
|
|
|
|
|
},
|
|
|
|
|
|
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()",
|
|
|
|
|
},
|
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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BenchmarkCmp(b *testing.B) {
|
|
|
|
|
buf := bytes.Buffer{}
|
|
|
|
|
b.ResetTimer()
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
buf.Reset()
|
|
|
|
|
c := cmps{
|
|
|
|
|
Eq("id"),
|
|
|
|
|
Lt("user_uuid"),
|
|
|
|
|
LtOrEq("firstname"),
|
|
|
|
|
Gt("stars"),
|
|
|
|
|
}
|
|
|
|
|
c.writeCql(&buf)
|
|
|
|
|
}
|
|
|
|
|
}
|