gocql - использование функций timeuuid Cassandra 3
В cqlsh я могу выполнить что-то вроде:
SELECT id FROM names WHERE name = 'dave' AND id > maxTimeuuid('2015-04-05 00:05') AND id < minTimeuuid('2019-01-01 00:05');
... это возвращает список, как и ожидалось.
id
--------------------------------------
632f4960-375b-11e8-90b1-02420a000203
91f03523-3761-11e8-a777-02420a000a05
32dbffc4-3762-11e8-a778-02420a000a05
9ffb1ab8-3762-11e8-a779-02420a000a05
c28a0372-3764-11e8-a77b-02420a000a05
Однако я изо всех сил пытаюсь заставить это работать в gocql:
var found bool = false
m := map[string]interface{}{}
qString := "SELECT id FROM names WHERE name=? AND id > maxTimeuuid(?) AND id < minTimeuuid(?);"
query := Cassandra.Sessionds.Query(qString, name, toFrom.From, toFrom.To).Consistency(gocql.One)
fmt.Println("sending IsRunning query: " + query.String())
iterable := query.Iter()
for iterable.MapScan(m) {
found = true
lookupTable = HostLookup {
Id: m["id"].(gocql.UUID),
}
}
Даже если строка отладки выглядит нормально,
sending IsRunning query: [query statement="SELECT id FROM names WHERE name=? AND id > maxTimeuuid(?) AND id < minTimeuuid(?);" values=[dave 2015-04-05 00:05 2019-01-01 00:05] consistency=ONE]
... Я всегда получаю пустую итерацию. Я использую очень похожий код в другом месте успешно, разница здесь в функциях timeuuid. Я пробовал различные варианты с буквальными кавычками безрезультатно, любой совет приветствуется.
1 ответ
Решение
Когда я посмотрел на повторяемость более подробно, я обнаружил:
"не может маршал строка в метку времени"
... это привело меня к ответу - GoCQL: строка маршала в метку времени