Подготовленный отчет с коллекцией в предложении IN в драйвере Datastax Cassandra CQL

Я пытаюсь выполнить следующий запрос

SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?

Я привязываю список Java Long в качестве параметра и получаю исключение

SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242)

Если я попытаюсь использовать (?), он ожидает, что один длинный элемент будет привязан, но мне нужна коллекция

Есть ли ошибка в моем синтаксисе?


person i.petruk    schedule 04.06.2013    source источник


Ответы (3)


Протестировано в Cassandra 2.1.3, работает следующий фрагмент кода:

PreparedStatement prepared = session.prepare("SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?;");
List<Long> edgeIds = Arrays.asList(1L, 2L, 3L);
session.execute(prepared.bind(edgeIds));
person gcvt    schedule 25.03.2015

Получил ответ на ошибку Datastax, в настоящее время она не поддерживается, но планируется

https://issues.apache.org/jira/browse/CASSANDRA-4210

Обновление: поддерживается в Cassandra 2.0.1

person i.petruk    schedule 04.06.2013
comment
Не могли бы вы сказать мне, решена ли она сейчас? Я не совсем понял по ссылкам. - person pinkpanther; 25.02.2015

Его немного сложно найти в документации, но он описан в кортежи раздела руководства.

Если вы хотите использовать именованные параметры, вы должны использовать метод setList().

BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));
person Jens Møller    schedule 17.10.2017