あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

さくらスタンダードプラン上にTengをいれるほうほう

Amon2ついでにTengいれようとしたら、sqlがどうもsyntax error起こしているようで入らない。sqlite3がそもそもさくらに入っていなかったので、それが原因かと思っていれてはみた。

wget http://www.sqlite.org/sqlite-amalgamation-3.7.2.tar.gz
tar xvfz sqlite-amalgamation-3.7.2.tar.gz
cd sqlite-amalgamation-3.7.2
./configure --prefix=$HOME/local
make
make install

が、それでも無理だった。念押しで初期状態で入ってるDBD::SQLiteをcpanmで入れてみたけどそれでもダメ。SQL::Makerのバージョンも最新で特に問題はなさげ。こうなるとローカルではすんなり入ったTengをいじらねばなるまいかと、仕方なく、

cpanm --look Teng

で、あっさりと問題は解決。

  • lib/Teng.pm
sub _insert {
     my ($self, $table_name, $args, $prefix) = @_;

-   $prefix ||= 'INSERT';
+   $prefix ||= 'INSERT INTO';
     my $table = $self->schema->get_table($table_name);
  • lib/Teng/Plugin/Replace.pm
sub replace {
      my ($self, $table_name, $args) = @_;

      my $table = $self->schema->get_table($table_name);

      for my $col (keys %{$args}) {
           $args->{$col} = $table->call_deflate($col, $args->{$col});
      }
-     my ($sql, @binds) = $self->sql_builder->insert( $table_name, $args, { prefix => 'REPLACE' } );
+     my ($sql, @binds) = $self->sql_builder->insert( $table_name, $args, { prefix => 'REPLACE INTO' } );
      $self->_execute($sql, \@binds, $table_name);$

insertのほうはprefix渡さなければ大丈夫なんだけど、replaceはそうもいかない。にしてもなぜコケるのかがわからない。やはりsqliteのバージョン問題なのかな。