SQLiteでTransaction behaviorを使う

Transaction behavior | The Bakery, Everything CakePHP : Articles http://bakery.cakephp.org/articles/view/transaction-behavior

を便利に使っていたのですがSQLiteだとこんな↓エラーが出ました

Warning (2): sqlite_query() [function.sqlite-query]: near "SET": syntax error [CORE\cake\libs\model\datasources\dbo\dbo_sqlite.php, line 115]

Query: SET autocommit=0

Warning (512): SQL Error: 1: SQL logic error or missing database [CORE\cake\libs\model\datasources\dbo_source.php, line 439]

transaction behavior がおかしいのれす。あらためてtransaction behavior をザーッと見てみたところ、これMySQLで決めうちなのね…

とりあえずautocommit関連設定を全部falseにする。 さらにメンバメソッドのbeginの中を

before:
$model->query(‘SET autocommit=0’);
after:
if(strpos(ConnectionManager::getDataSource($model->useDbConfig)->description, ‘SQLite’) === false){$model->query(‘SET autocommit=0’);}

に変更。SQLiteはBEGINされると勝手にautocommitがOFFになるっぽいのでこれでよさそう。 自分のつないでいるDBがどの種類かってなんかもっと分かりやすいのがありそうな気がするけど見つけられず。暫定的にこれで。

beginとcallbackとcommitだけでいいからCakePHP用各DBのbehavior誰か書いてください。誰も書かなかったらそのうち調べて書こう。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中