プロジェクト

全般

プロフィール

Bug(バグ) #4161

OpenPNE 3 - Task(タスク) #4033: MySQLのStrict Modeを有効にした場合に生じる問題を調査

MySQLのSTRICT_TRANS_TABLESが有効な状態でテスト用fixtureのロードに失敗する

Youichi Kimura約7年前に追加.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
-
開始日:
2017-02-16
期日:
進捗率:

0%

3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
いいえ
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

MySQL 5.7 の Strict Mode が有効な状態での動作確認 (#4033) を行った際に発生した。

fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:

$ php plugins/opDiaryPlugin/test/unit/model/DiaryTest.php

[...]

Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[HY000]: General error: 1364 Field 'last_comment_time' doesn't have a default value' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO dia...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(DiaryCommentUpdateTable), Array)
#4 /vagr in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082

Causes (原因)

test/fixtures/diaries.yml#L110-L111:

<?php for ($i = 1; $i <= 60; $i++): ?>
  diary_for_member1_<?php echo $i ?>:
    Member: member1
    title: "title:<?php echo $i ?> by member1" 
    body: "body:<?php echo $i ?> by member1" 
    created_at: "2009-03-<?php printf('%02d', $i) ?> 10:00:00" 
    updated_at: "2009-03-<?php printf('%02d', $i) ?> 10:00:00" 
<?php endfor; ?>

上記のように記述された fixture は次のような YAML を出力します。

  diary_for_member1_1:
    Member: member1
    title: "title:1 by member1" 
    body: "body:1 by member1" 
    created_at: "2009-03-01 10:00:00" 
    updated_at: "2009-03-01 10:00:00" 
...
  diary_for_member1_60:
    Member: member1
    title: "title:60 by member1" 
    body: "body:60 by member1" 
    created_at: "2009-03-60 10:00:00" 
    updated_at: "2009-03-60 10:00:00" 

created_at および updated_at にセットされる "2009-03-60 10:00:00" は不正な日付のため、STRICT_TRANS_TABLES が有効な MySQL ではエラーが発生する。

履歴

#1 Youichi Kimura約7年前に更新

  • コピー元 Bug(バグ) #4151: MySQLのONLY_FULL_GROUP_BYが有効な状態で「日記コメント記入履歴」ガジェットを表示するとエラー を追加

#2 Youichi Kimura約7年前に更新

  • コピー元 を削除 (Bug(バグ) #4151: MySQLのONLY_FULL_GROUP_BYが有効な状態で「日記コメント記入履歴」ガジェットを表示するとエラー)

他の形式にエクスポート: Atom PDF