karupanerura / Aniki

The ORM as our great brother.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Postgresqlで使う時SQL文がMySQLのになって使えないみたいです。

ybrliiu opened this issue · comments

英語あまり出来ないので日本語で報告させていただきます、すいません;

環境:
Ubuntu 14.04
Perl 5.22.1
Postgresql 9.3

コード:
$ install-aniki --lib=./lib Sample::DB で雛形を作った後、
スキーマを以下のように

package Sample::DB::Schema {

  use 5.014002;
  use DBIx::Schema::DSL;
  use Aniki::Schema::Relationship::Declare;

  create_table 'CHAT_RECORD' => columns {
    integer 'Id', primary_key;
    varchar 'Name';
    varchar 'Message';
  };

}
1;

DBを操作するスクリプトを以下のように書いて

use v5.22;
use warnings;
use utf8;
use Sample::DB;
my $db = Sample::DB->new(connect_info => ['dbi:Pg:dbname=chat', 'hoge', 'localhost']);
say $_->Name for $db->select('CHAT_RECORD')->all;

実行するとこんな感じにSQL文のエラーがでます。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@ Aniki 's Exception @@@@@
Reason  : DBD::Pg::st execute failed: ERROR:  syntax error at or near "`"
LINE 2: FROM `CHAT_RECORD`
             ^ at /home/****/perl5/lib/perl5/Aniki.pm line 549.

SQL     : SELECT `Id`, `Name`, `Message`
          FROM `CHAT_RECORD`
BIND    : $VAR1 = [];

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 at /home/****/perl5/lib/perl5/Aniki.pm line 552.
    Aniki::execute(Sample::DB=HASH(0x1c36d08), "SELECT `Id`, `Name`, `Message`\x{a}FROM `CHAT_RECORD`") called at /home/****/perl5/lib/perl5/Aniki.pm line 501
    Aniki::select_by_sql(Sample::DB=HASH(0x1c36d08), "SELECT `Id`, `Name`, `Message`\x{a}FROM `CHAT_RECORD`", ARRAY(0x26ec890), HASH(0x3294940)) called at /home/****/perl5/lib/perl5/Aniki.pm line 436
    Aniki::select(Sample::DB=HASH(0x1c36d08), "CHAT_RECORD") called at script/example.pl line 9

DBIx::Schema::DSLのデフォルトがMySQLなので、 database 'PostgreSQL' としてデータベースを指定する必要があります。(undocumentedですみません。。
http://search.cpan.org/~songmu/DBIx-Schema-DSL-0.07/lib/DBIx/Schema/DSL.pm#database($str_:Str)

なるほど。
DBIx::Schema::DSL のドキュメント読んでませんでした...。
お騒がせしました、ありがとうございます!