2010-03-08 13 views
0

Je travaille sur le portage d'une application Rails vers JRuby et HSQLDB. Mon objectif est d'intégrer une base de données et le site dans un seul fichier JAR pour le déploiement sur les sites des clients. J'ai le site fonctionne assez bien du JAR, avec quelques problèmes notables.SQL invalide lors de l'intégration de HSQLDB dans une application Rails

Quand je fais ce qui suit avec un modèle ActiveRecord assez banal:

@total = SessionLog.count(:id) 

je reçois l'exception suivante:

ActiveRecord::StatementInvalid (ActiveRecord::ActiveRecordError: Not in aggregate function or group by clause: [email protected] in statement [SELECT count(session_logs.id) AS count_id FROM session_logs WHERE (created_at >= '2010-02-06' AND created_at <= '2010-03-09' AND session_type = 'tunnel_client') ORDER BY id DESC ]:

SELECT count(session_logs.id) AS count_id FROM session_logs WHERE (created_at >= '2010-02-06' AND created_at <= '2010-03-09' AND session_type = 'tunnel_client') ORDER BY id DESC)

Il me semble clair que la déclaration COUNT est la cause du problème dans HSQLDB, mais je ne suis pas sûr de la solution pour résoudre ce problème. SQLite3 et MySQL traitent cette instruction SQL sans problème.

Je suis ouvert à l'utilisation d'une base de données différente de HSQLDB, mais elle doit pouvoir être intégrée dans notre application sur la machine virtuelle Java. C'est l'appel de HSQLDB.

Répondre

1

Vous avez probablement trouvé un bug dans l'adaptateur ActiveRecord - activerecord-jdbchsqldb-adapter je suppose.

Pouvez-vous essayer d'exécuter le SQL directement dans une session SQL non ruby? Alors peut-être vous pouvez voir où cela va mal et soumettre un bug ou (mieux), soumettre un correctif.

1

Vous pouvez essayer H2 Database, câbler likeso. De wikipedia:

The database engine is written by Thomas Mueller. He also developed the Java database engine Hypersonic SQL [1]. In 2001, the Hypersonic SQL was stopped, and the HSQLDB Group was formed to continue work on the Hypersonic SQL code. The name H2 stands for Hypersonic 2, however H2 does not share any code with Hypersonic SQL or HSQLDB. H2 is built from scratch.