qb: cmp
This commit is contained in:
171
qb/cmp.go
Normal file
171
qb/cmp.go
Normal file
@@ -0,0 +1,171 @@
|
||||
package qb
|
||||
|
||||
import "bytes"
|
||||
|
||||
type op byte
|
||||
|
||||
const (
|
||||
eq op = iota
|
||||
lt
|
||||
leq
|
||||
gt
|
||||
geq
|
||||
in
|
||||
cnt
|
||||
)
|
||||
|
||||
type Cmp struct {
|
||||
op op
|
||||
column string
|
||||
name string
|
||||
}
|
||||
|
||||
func (cmp Cmp) writeCql(cql *bytes.Buffer) string {
|
||||
cql.WriteString(cmp.column)
|
||||
switch cmp.op {
|
||||
case eq:
|
||||
cql.WriteByte('=')
|
||||
case lt:
|
||||
cql.WriteByte('<')
|
||||
case leq:
|
||||
cql.WriteByte('<')
|
||||
cql.WriteByte('=')
|
||||
case gt:
|
||||
cql.WriteByte('>')
|
||||
case geq:
|
||||
cql.WriteByte('>')
|
||||
cql.WriteByte('=')
|
||||
case in:
|
||||
cql.WriteString(" IN ")
|
||||
case cnt:
|
||||
cql.WriteString(" CONTAINS ")
|
||||
}
|
||||
cql.WriteByte('?')
|
||||
|
||||
return cmp.name
|
||||
}
|
||||
|
||||
func Eq(column string) Cmp {
|
||||
return Cmp{
|
||||
op: eq,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func EqNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: eq,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func Lt(column string) Cmp {
|
||||
return Cmp{
|
||||
op: lt,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func LtNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: lt,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func LtOrEq(column string) Cmp {
|
||||
return Cmp{
|
||||
op: leq,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func LtOrEqNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: leq,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func Gt(column string) Cmp {
|
||||
return Cmp{
|
||||
op: gt,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func GtNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: gt,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func GtOrEq(column string) Cmp {
|
||||
return Cmp{
|
||||
op: geq,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func GtOrEqNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: geq,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func In(column string) Cmp {
|
||||
return Cmp{
|
||||
op: in,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func InNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: in,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func Contains(column string) Cmp {
|
||||
return Cmp{
|
||||
op: cnt,
|
||||
column: column,
|
||||
name: column,
|
||||
}
|
||||
}
|
||||
|
||||
func ContainsNamed(column, name string) Cmp {
|
||||
return Cmp{
|
||||
op: cnt,
|
||||
column: column,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
type cmps []Cmp
|
||||
|
||||
func (cs cmps) writeCql(cql *bytes.Buffer) (names []string) {
|
||||
for i, c := range cs {
|
||||
names = append(names, c.writeCql(cql))
|
||||
if i < len(cs)-1 {
|
||||
cql.WriteString(" AND ")
|
||||
}
|
||||
}
|
||||
cql.WriteByte(' ')
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user