もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

php-mysql-engine貢献中...

はじめに

こんばんは。

今回も前回に続き、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]

問題は以下のコード

github.com

\substr($sql, $source_map[$i][0], $source_map[$i][1]) で、 デフォルトの値が 数値の 0 の場合 三項演算子false 側に倒れるようになっていました。

つまり最初のSQLでも、 DEFAULT 0 ではなく、 DEFAULT '0' であれば通りました。

今回こちらを修正するPRを作成しました。

github.com

終わりに

前回のPRは問題なくマージされましたので、今回も調子に乗って第二弾あげました。

本来は show column用のPRを作る予定だったのですが、たまたま見つかったので、こちらを先にあげました。

マージされたらいいなぁ。

現場からは以上です。