Как создать SQL-запрос динамических полей, используя последнюю строку в VoltDB? - PullRequest
1 голос
/ 08 декабря 2011

Я хочу создать sql-запрос динамических полей, которые определяются во время выполнения, например:

SELECT some, random, field FROM table WHERE id = ?

Поскольку существует ограничение, вы должны объявить переменную экземпляра SQLStmt:

public final SQLStmt sql = new SQLStmt("SELECT field0, field1 FROM table WHERE id = ?");

Поскольку все поля жестко запрограммированы, иначе VoltDB не будет компилироваться, я не могу установить поля, которые хочу прочитать.

Итак, как создать SQL-запрос динамических полей, используя последнюю строку в VoltDB?

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Поскольку вопрос написан, нет способа создать SQL-запрос динамических полей с использованием финальной строки в VoltDB, потому что нет способа изменить финальную строку во время выполнения. Причина, по которой класс SQLStmt является окончательным, заключается в том, что операторы компилируются, когда компилятор volt создает каталог. Вы можете использовать параметры или «связать переменные», но вы не можете сделать столбцы, на которые ссылаетесь в запросе, динамическими.

Однако вы можете использовать системную процедуру @AdHoc для запуска динамически генерируемого оператора SQL. Вот пример .

1 голос
/ 08 декабря 2011

Оказывается, VoltDB не поддерживает динамические поля.Вот точный ответ от разработчиков VoltDB:

VoltDB doesn't support the random row query you want here. You have to declare your SQL in advance. We only support parameterization of predicate expressions. If there is limited (say < 50MB) of data associated to id, you can use SELECT * FROM table WHERE id = ?; and filter in your stored procedure logic. Not ideal - but not particularly difficult, either. If ID is the partition attribute for this table, filtering in Java should be fast.

Ryan.
...