はじめに
こんばんは。
今回も前回に続き、php-mysql-engineへの貢献を続けております。
なんとかしてcakephp3でも使えるようにという感じで、頑張っております。
本題
今回は、NoticeErrorが起きたのでそちらの対応を行いました。
例えば以下のようなSQLの場合
CREATE TABLE `orders` ( `id` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INTEGER(11) UNSIGNED, `price` INTEGER(11) UNSIGNED NOT NULL DEFAULT 0, `created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `modified_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
このようなNoticeErrorが発生します。
Notice Error: Uninitialized string offset: 0 in [/path/to/vendor/vimeo/php-mysql-engine/src/Parser/CreateTableParser.php, line 936]
問題は以下のコード
\substr($sql, $source_map[$i][0], $source_map[$i][1])
で、 デフォルトの値が 数値の 0
の場合 三項演算子の false
側に倒れるようになっていました。
つまり最初のSQLでも、 DEFAULT 0
ではなく、 DEFAULT '0'
であれば通りました。
今回こちらを修正するPRを作成しました。
終わりに
前回のPRは問題なくマージされましたので、今回も調子に乗って第二弾あげました。
本来は show column用のPRを作る予定だったのですが、たまたま見つかったので、こちらを先にあげました。
マージされたらいいなぁ。
現場からは以上です。