in frame.go [1479:1582]
func (f *framer) writeQueryParams(opts *queryParams) {
f.writeConsistency(opts.consistency)
if f.proto == protoVersion1 {
return
}
var flags uint32
names := false
if len(opts.values) > 0 {
flags |= flagValues
}
if opts.skipMeta {
flags |= flagSkipMetaData
}
if opts.pageSize > 0 {
flags |= flagPageSize
}
if len(opts.pagingState) > 0 {
flags |= flagWithPagingState
}
if opts.serialConsistency > 0 {
flags |= flagWithSerialConsistency
}
// protoV3 specific things
if f.proto > protoVersion2 {
if opts.defaultTimestamp {
flags |= flagDefaultTimestamp
}
if len(opts.values) > 0 && opts.values[0].name != "" {
flags |= flagWithNameValues
names = true
}
}
if opts.keyspace != "" {
if f.proto < protoVersion5 {
panic(fmt.Errorf("the keyspace can only be set with protocol 5 or higher"))
}
flags |= flagWithKeyspace
}
if opts.nowInSeconds != nil {
if f.proto < protoVersion5 {
panic(fmt.Errorf("now_in_seconds can only be set with protocol 5 or higher"))
}
flags |= flagWithNowInSeconds
}
if f.proto > protoVersion4 {
f.writeUint(flags)
} else {
f.writeByte(byte(flags))
}
if n := len(opts.values); n > 0 {
f.writeShort(uint16(n))
for i := 0; i < n; i++ {
if names {
f.writeString(opts.values[i].name)
}
if opts.values[i].isUnset {
f.writeUnset()
} else {
f.writeBytes(opts.values[i].value)
}
}
}
if opts.pageSize > 0 {
f.writeInt(int32(opts.pageSize))
}
if len(opts.pagingState) > 0 {
f.writeBytes(opts.pagingState)
}
if opts.serialConsistency > 0 {
f.writeConsistency(opts.serialConsistency)
}
if f.proto > protoVersion2 && opts.defaultTimestamp {
// timestamp in microseconds
var ts int64
if opts.defaultTimestampValue != 0 {
ts = opts.defaultTimestampValue
} else {
ts = time.Now().UnixNano() / 1000
}
f.writeLong(ts)
}
if opts.keyspace != "" {
f.writeString(opts.keyspace)
}
if opts.nowInSeconds != nil {
f.writeInt(int32(*opts.nowInSeconds))
}
}