SQLite 3.38.0はSQLiteの最新リリースだ。このリリースでは、JSONクエリの構文が改善されており、新しい診断インターフェイス、CLI拡張などが提供される。
SQLite 3.38.0では、新たに->
と->>
の演算子が導入されている。これによって開発者はJSONデータに対してクエリを定義できるようになる。どちらの演算子も、右側のJSONパス式に基づいて、左側のJSONオペランドのサブコンポーネントを選択する。例えば、json_field->'$.json_component'
。2つの演算子の違いは、->
はJSON値型を返すのに対し、->>
はテキストや整数などのJSON値から抽出されたSQLデータ型を返すことである。
例えば、
'{"a":2,"c":[4,5,{"f":7}]}' -> '$.c[2]'
によって、'{"f":7}'
が生成される。同様に、
'{"a":2,"c":[4,5,{"f":7}]}' -> '$.c[2].f'
によって'7'
が生成される。一方で、
'{"a":2,"c":[4,5,{"f":7}]}' ->> '$.c[2].f'
によって、整数値7
が生成される。
これは、json_col
に格納されている単純なJSONレコードを使ってテーブル内のすべての行を選択する方法である。
select * from test_table where json_col->>'$.json_key' = 'some_value';
json_extract
に慣れている場合は、->
と->>
とは、それらの効果を組み合わせたものであるという点でわずかに異なることに注意してください。つまり、json_extract
ではJSON値からコンポーネントを抽出し、配列やオブジェクトの場合はJSON値として、文字列や数値などの場合はSQL値として返す。
SQLiteがJSONパスに対してサポートする構文は、MySQLとPostgreSQLの両方と互換性がある。これは、X
がテキストラベルの場合、SQLiteはX
(PostgreSQLスタイル)を$.X
(MySQLスタイル)と同等と理解し、n
は$[n]
と同等と理解することを意味する。
関連する注記として、バージョン3.38ではJSONサポートがデフォルトでオンになっており、-DSQLITE_ENABLE_JSON1
オプションを使ってライブラリを再構築する必要はない。
SQLite 3.38.0ではまた、通常の簡潔なエラーメッセージによって引き起こされる開発者にとっての問題点を緩和しようと試みている。SQLクエリで構文エラーが発生した場所を正確に特定しやすくするために、sqlite3_error_offset()
で特定の文字に絞り込むことができる場合もある。
最後に、SQLite CLIは、タブと改行を正しく処理し「-wrap N」、「-wordwrap on」、「-quote」などのオプションをサポートすることで、列出力モードのサポートを強化した。さらに、.import
コマンドで、自動的に列名の曖昧さを解消できるようになった。
SQLite 3.38.0の新機能すべての一覧については、公式リリースノートをお見逃しなく。