LoginSignup
6
6

More than 5 years have passed since last update.

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

Posted at

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」として認識されていたようです。

謝辞

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

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6