さくらスタンダードプラン上に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のバージョン問題なのかな。