Posted at

AirRecordでBOOLEAN型の値が、必ず「true」として保存されてしまう不具合の対処方法

More than 5 years have passed since last update.

AirRecordでBOOLEAN型の値が、必ず「true」として保存されてしまう不具合の対処方法


問題

AirRecord 1.2で、フィールドをBOOLEAN型として「false」の値をインサートしても、DB上に「true」として保存されてしまい困っていました。


対処方法

下記のように、「true」と「false」の場合で処理を分岐するよう、コードを修正をしました。


ARSQLite.as

        public function value(value:*):String

{
if (value == null || (value is Number && isNaN(value))) return 'NULL';
/* ここから */
if (value == false) {
return 'false';
}
if (value == true) {
return 'true';
}
/* ここまで 追加 */
value = this.escape(value);
return "'" + value + "'";
}


原因

AirRecordでは、SQL文に直す際に文字列化(?)を行っており、その際に「true」と「false」はBoolean型ではなくString型として変換されていました。

また、Action Scriptでは、String型をBoolean型として強制型変換を行うと、NULL(空)以外はすべて「true」扱いになるため、どんな値をいれようとも「true」として認識されていたようです。


謝辞

また、今回の修正にあたり以下の記事を参考にさせていただきました。感謝です。