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」として認識されていたようです。
###謝辞
また、今回の修正にあたり以下の記事を参考にさせていただきました。感謝です。