我一直在阅读http://godoc.org/github.com/gocql/gocql 但我不明白如何插入 - 如果 gocql 不存在。
它指出
func (*Query) ScanCAS
func (q *Query) ScanCAS(dest ...interface{}) (applied 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 IF NOT EXIST?大家能给我举个例子吗?
2. 如何做正确的ScanCAS?
3. MapScanCAS 和 ScanCAS 有什么不同?我不明白作者在谈论什么列不匹配
4. 在 godoc 页面旁边有解释 gocql 的好页面吗?
倚天杖
相关分类