Bug(バグ) #1984
テストケースをSQLite等のDBMS上で動作させることができない
100%
説明
現象¶
php5 test/unit/model/doctrine/MemberTest.php などのようにテストケースを実行すると、下記のようなエラーが出力されて中断する。
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 19 activity_data.body may not be NULL' in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082 Stack trace: #0 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement)) #1 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array) #2 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO act...', Array) #3 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctr in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082 Fatal error: Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 19 activity_data.body may not be NULL' in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082 Stack trace: #0 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement)) #1 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array) #2 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO act...', Array) #3 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctr in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
原因¶
test/fixtures/test_data.yml の中にActivityDataのbodyの値が設定されていないレコードが含まれている。
修正内容¶
dummy_activity7 と dummy_activity8 に不足している値を追加する。
#1527 に対する修正によって再度発生した問題¶
現象¶
php5 test/unit/model/doctrine/MemberTest.php
などのようにテストケースを実行すると、下記のようなエラーが出力されて中断する。
PHP Fatal error: Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[HY000]: General error: 1 near "SET": syntax error. Failing Query: "SET FOREIGN_KEY_CHECKS = 0"' in /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082 Stack trace: #0 /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1061): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Sqlite_ExtraFunctions), 'SET FOREIGN_KEY...') #1 /home/upsilon/git/openpne3/houou/test/bootstrap/database.php(15): Doctrine_Connection->exec('SET FOREIGN_KEY...') #2 /home/upsilon/git/openpne3/houou/test/unit/model/doctrine/MemberTest.php(4): include_once('/home/upsilon/g...') #3 {main} thrown in /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082
原因¶
6e7de531 によって test/bootstrap/database.php に追加された、
$conn = opDoctrineQuery::getMasterConnectionDirect();
$conn->exec('SET FOREIGN_KEY_CHECKS = 0');
のコードからエラーが発生している。ここで実行されている
SET FOREIGN_KEY_CHECKS = 0
はMySQLに依存するクエリであるため、MySQL以外のDBMS上では実行に失敗しエラーが発生する。
修正内容¶
上記のコードを、DBMSがMySQLである場合のみ実行するように修正する。
関連するチケット
関係しているリビジョン
activity_data.body must not contain the null value (fixes #1984)
avoid incompatible query when not using MySQL (fixes #1984)
履歴
#1 Youichi Kimura がほぼ13年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 019a6ce780fb636795dab151fc4ef679f4aca244 で適用されました。
#2 Kousuke Ebihara が12年以上前に更新
- 担当者 を Youichi Kimura にセット
- 対象バージョン を OpenPNE 3.7.0 にセット
#3 Kousuke Ebihara が12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
#5 Youichi Kimura がほぼ12年前に更新
- 説明 を更新 (diff)
- ステータス を Fixed(完了) から New(新規) に変更
- 進捗率 を 100 から 0 に変更
- 3.6 で発生するか を Unknown (未調査) にセット
- 3.4 で発生するか を Unknown (未調査) にセット
当チケットの修正後にコミットされた 6e7de531 から再度SQLite環境下でテストケースが実行できなくなったため、ステータスを戻します。
#6 Youichi Kimura がほぼ12年前に更新
- 対象バージョン を OpenPNE 3.7.0 から 261 に変更
#7 Shouta Kashiwagi がほぼ12年前に更新
- 対象バージョン を 261 から OpenPNE 3.8.x に変更
#8 Youichi Kimura がほぼ12年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 4515796062a08d52b7a4409aa659c3aa268ae592 で適用されました。
#9 Shinichi Urabe が9年以上前に更新
- 対象バージョン を OpenPNE 3.8.x から OpenPNE 3.8.12 に変更
- 3.8 で発生するか を Unknown (未調査) にセット
#10 誠二 天重 が9年以上前に更新
- コピー先 Backport(バックポート) #3637: テストケースをSQLite等のDBMS上で動作させることができない を追加
#13 Shinichi Urabe が9年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです
#14 isao sano が9年以上前に更新
- コピー先 Backport(バックポート) #3661: テストケースをSQLite等のDBMS上で動作させることができない を追加
#15 Youichi Kimura が9年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
更新履歴 7439f352059a5ac9c46150625870a359f32b936b で適用されました。