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

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

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)

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

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

Ответ 1

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

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

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

Ответ 2

Протестировано в 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));

Ответ 3

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

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

BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));