Files
gocqlx/qb/expr.go

66 lines
1017 B
Go
Raw Normal View History

2017-07-26 13:57:10 +02:00
package qb
import (
"bytes"
"fmt"
"time"
)
type columns []string
2017-07-27 12:28:01 +02:00
func (cols columns) writeCql(cql *bytes.Buffer) {
for i, c := range cols {
cql.WriteString(c)
if i < len(cols)-1 {
cql.WriteByte(',')
}
}
}
2017-07-26 13:57:10 +02:00
type using struct {
timestamp time.Time
ttl time.Duration
}
2017-07-27 12:28:01 +02:00
func (u using) writeCql(cql *bytes.Buffer) {
2017-07-27 13:39:27 +02:00
ts := !u.timestamp.IsZero()
if ts {
cql.WriteString("USING TIMESTAMP ")
cql.WriteString(fmt.Sprint(u.timestamp.UnixNano() / 1000))
cql.WriteByte(' ')
2017-07-26 13:57:10 +02:00
}
2017-07-27 13:39:27 +02:00
2017-07-26 13:57:10 +02:00
if u.ttl != 0 {
2017-07-27 13:39:27 +02:00
if ts {
cql.WriteString("AND TTL ")
} else {
cql.WriteString("USING TTL ")
}
cql.WriteString(fmt.Sprint(int(u.ttl.Seconds())))
cql.WriteByte(' ')
2017-07-26 13:57:10 +02:00
}
}
2017-07-27 13:39:27 +02:00
type where cmps
func (w where) writeCql(cql *bytes.Buffer) (names []string) {
if len(w) == 0 {
return
}
cql.WriteString("WHERE ")
2017-07-27 13:39:27 +02:00
return cmps(w).writeCql(cql)
}
2017-07-27 13:39:27 +02:00
type _if cmps
func (w _if) writeCql(cql *bytes.Buffer) (names []string) {
if len(w) == 0 {
return
}
cql.WriteString("IF ")
2017-07-27 13:39:27 +02:00
return cmps(w).writeCql(cql)
}