66 lines
1017 B
Go
66 lines
1017 B
Go
package qb
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type columns []string
|
|
|
|
func (cols columns) writeCql(cql *bytes.Buffer) {
|
|
for i, c := range cols {
|
|
cql.WriteString(c)
|
|
if i < len(cols)-1 {
|
|
cql.WriteByte(',')
|
|
}
|
|
}
|
|
}
|
|
|
|
type using struct {
|
|
timestamp time.Time
|
|
ttl time.Duration
|
|
}
|
|
|
|
func (u using) writeCql(cql *bytes.Buffer) {
|
|
ts := !u.timestamp.IsZero()
|
|
|
|
if ts {
|
|
cql.WriteString("USING TIMESTAMP ")
|
|
cql.WriteString(fmt.Sprint(u.timestamp.UnixNano() / 1000))
|
|
cql.WriteByte(' ')
|
|
}
|
|
|
|
if u.ttl != 0 {
|
|
if ts {
|
|
cql.WriteString("AND TTL ")
|
|
} else {
|
|
cql.WriteString("USING TTL ")
|
|
}
|
|
cql.WriteString(fmt.Sprint(int(u.ttl.Seconds())))
|
|
cql.WriteByte(' ')
|
|
}
|
|
}
|
|
|
|
type where cmps
|
|
|
|
func (w where) writeCql(cql *bytes.Buffer) (names []string) {
|
|
if len(w) == 0 {
|
|
return
|
|
}
|
|
|
|
cql.WriteString("WHERE ")
|
|
return cmps(w).writeCql(cql)
|
|
}
|
|
|
|
type _if cmps
|
|
|
|
func (w _if) writeCql(cql *bytes.Buffer) (names []string) {
|
|
if len(w) == 0 {
|
|
return
|
|
}
|
|
|
|
cql.WriteString("IF ")
|
|
return cmps(w).writeCql(cql)
|
|
}
|