Неверный SQL при встраивании HSQLDB в приложение Rails - PullRequest
0 голосов
/ 08 марта 2010

Я работаю над портированием приложения Rails на JRuby и HSQLDB. Моя цель - встроить базу данных и сайт в один файл JAR для развертывания на сайтах клиентов. У меня довольно хорошо работает сайт из JAR, с несколькими заметными проблемами.

Когда я делаю следующее с довольно обыденной моделью ActiveRecord:

@total = SessionLog.count(:id)

Я получаю следующее исключение:

ActiveRecord :: StatementInvalid (ActiveRecord :: ActiveRecordError: Нет в агрегатной функции или группе по предложению: org.hsqldb.Expression@7be117eb в операторе [SELECT count (session_logs.id) AS count_id FROM session_logs WHERE (creation_at> = '2010-02-06' И созданный_at <= '2010-03-09' AND session_type = 'tunnel_client') ORDER BY id IDC]: </p>

SELECT count (session_logs.id) AS count_id FROM session_logs WHERE (созданный_ат> = '2010-02-06' И созданный_ат <= '2010-03-09' И session_type = 'tunnel_client') ORDER BY id IDC) </p>

Мне кажется ясным, что оператор COUNT вызывает проблему в HSQLDB, но я не уверен, что решение - это исправить. SQLite3 и MySQL обрабатывают этот оператор SQL без проблем.

Я открыт для использования другой базы данных, отличной от HSQLDB, но ее необходимо встраивать в наше приложение на JVM. Это обращение HSQLDB.

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Вы, вероятно, обнаружили ошибку в адаптере ActiveRecord - activerecord-jdbchsqldb-adapter Полагаю.

Можете ли вы попробовать запустить SQL напрямую в каком-нибудь нерубиновом сеансе SQL? Тогда, возможно, вы сможете увидеть, в чем дело, и отправить ошибку или (что лучше), отправить патч.

1 голос
/ 09 марта 2010

Вы можете попробовать База данных H2 , подключить его , как , поэтому . Из Википедии :

Движок базы данных написан Томасом Мюллером. Он также разработал ядро ​​базы данных Java Hypersonic SQL [1]. В 2001 году Hypersonic SQL был остановлен, и была сформирована группа HSQLDB для продолжения работы над кодом Hypersonic SQL. Название H2 означает Hypersonic 2, однако H2 не разделяет код с Hypersonic SQL или HSQLDB. H2 построен с нуля.

...