我一直在阅读http://godoc.org/github.com/gocql/gocql
但我不明白如何插入——如果 gocql 不存在。
它表示
func (*Query) ScanCAS
func (q *Query) ScanCAS(dest ...interface{}) (应用 bool, err 错误)
ScanCAS 执行轻量级事务(即包含 IF 子句的 UPDATE 或 INSERT 语句)。如果由于现有值不匹配而导致事务失败,则先前的值将存储在 dest 中。
当我跑
cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "example"
cluster.Consistency = gocql.Quorum
session, _ := cluster.CreateSession()
defer session.Close()
var mapQ map[string]interface{}
var inserted bool
var id gocql.UUID
var timeline, text string
// insert a tweet
isTrue, err := session.Query(`INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST`,
"hermano", gocql.TimeUUID(), "good night").
ScanCAS(); if err != nil {
log.Println(err)
}
fmt.Println(timeline, id, text)
fmt.Printf("%+v\n", isTrue)
fmt.Printf("%+v\n", inserted)
fmt.Printf("%+v\n", mapQ)
我得到:
Failed parsing statement: [INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST] reason: ArrayIndexOutOfBoundsException -1
所以我的问题是:
1. 如果在 gocql 中不存在,如何实际执行 INSERT?你们能给我举个例子吗?
2.如何正确进行ScanCAS?
3. MapScanCAS 和 ScanCAS 有何不同?我不明白作者在说什么列不匹配
4. 除了 godoc 页面之外,还有什么好的页面可以解释 gocql 吗?