Как сделать INSERT, если не существует в gocql

Я читал http://godoc.org/github.com/gocql/gocql И все же я не понимаю, как сделать INSERT - ЕСЛИ НЕ СУЩЕСТВУЕТ с gocql.
Он заявил, что

func (* Query) ScanCAS

func (q * Query) ScanCAS (dest... interface {}) (применяется bool, ошибка err)

ScanCAS выполняет упрощенную транзакцию (т. Е. Оператор UPDATE или INSERT, содержащий предложение IF). Если транзакция завершится неудачно из-за несоответствия существующих значений, предыдущие значения будут сохранены в 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. Как сделать INSERT IF NOT EXIST в gocql? Ребята, вы можете привести какой-нибудь пример?
2. Как правильно сделать ScanCAS?
3. Что отличает MapScanCAS и ScanCAS? Я не понимаю, о каком несоответствии столбца говорит автор
4. Есть ли какая-нибудь хорошая страница, которая объясняет gocql, кроме его страницы godoc?

2 ответа

Мое понимание:

Как на самом деле сделать INSERT, если не существует в gocql? Ребята, вы можете привести какой-нибудь пример?

Поскольку LWT, который вы выполняете, должен сначала прочитать данные из Cassandra и решить, нужно ли вставить / обновить значение, ScanCAS вернет 1) применено ли изменение этого LWT, 2) если не применено, ScanCAS вернет существующее значение в Кассандре Поэтому в ScanCAS вы должны пытаться читать тот же тип данных, который вы вставляете.

Как правильно сделать ScanCAS?

Аналогично вопросу 1

Что отличает MapScanCAS и ScanCAS? Я не понимаю, о каком несоответствии столбца говорит автор

Я думаю, что автор подразумевает, что легко испортить порядок сканирования возвращаемых значений / столбцов, поэтому вы можете использовать MapScanCAS, чтобы избежать этой проблемы.

Выглядит как опечатка, вы должны использовать "ЕСЛИ НЕ СУЩЕСТВУЕТ"

Другие вопросы по тегам