2016-04-04 11 views
0

SQLite DBブラウザv3.7.0を使用しています。私は、次の構文を使用してテーブルを作成した場合:SQLiteチェック制約とSQLite DBブラウザ

CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

を私はSQLiteのブラウザの「参照データ」タブに移動すると、私は(ブラウザがSQLを解析することができないかのように)現れて何の列を取得していません。これは問題です。なぜなら、「新しいレコード」をクリックすると、「レコードを追加するエラー: の近く」という例外が発生します。「構文エラー(INSERT INTO '' VALUES();)」です。

SQLite DB Browser 3.7.0 Error

私はのいずれか一つであることが制約を変更する場合は、:

CHECK(UPPER("AREA") = "AREA") 
CHECK(INSTR("AREA", ' ') = 0) 

そして、SQLiteのDBブラウザはすべてを正しく解析するために表示されます。私の質問は、無効なSQLiteの上の構文ですか、またはこれはSQLite DB Browserチームに報告する必要がある問題ですか?ありがとう。

EDIT

私も同様の結果が得られ、SQLiteのDBブラウザv3.8.0でテスト:

SQLite DB Browser 3.8.0 Error

答えて

0

:意図したような制約も動作:SQLiteバージョン3.8.2でこのコードを実行すると、テーブルに正しく

sqlite> CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

sqlite> .schema A 
CREATE TABLE "A" (
    "AREA" TEXT NOT NULL DEFAULT 'DEFAULT' 
     CONSTRAINT "A-AREA-MAX_LENGTH_CHECK" 
      CHECK(LENGTH("AREA") <= 25), 
    CONSTRAINT "A-AREA-UPPERCASE_NO_WHITESPACE_CHECK" 
     CHECK(UPPER("AREA") = "AREA" AND INSTR("AREA", ' ') = 0) 
); 

編集を生成し、私はSQLite DB Browser(v3.8.99)の4月3日nightly buildをダウンロードし、そのバージョンですべてが正常に動作することを確認しました。

1

インターフェースを備えたバグです。私は、これは1月18日に固定しissue #505: Sqlite parse error on CHECK constraint、に関連していると思います

sqlite> insert into A values ("area"); 
Error: CHECK constraint failed: A-AREA-UPPERCASE_NO_WHITESPACE_CHECK 
sqlite> insert into A values ("AR EA"); 
Error: CHECK constraint failed: A-AREA-UPPERCASE_NO_WHITESPACE_CHECK 
sqlite> insert into A values ("AREA"); 
sqlite> select * from A; 
AREA