13.4 JSON_TRANSFORMの演算子APPEND
JSON_TRANSFORMの演算子APPENDは、配列に値を追加します。
これは、その操作のRHSで指定されている値を、LHSのパス式で対象となっている配列に追加します。これは、RHSのパス式で一致した、複数の値のシーケンスを受け入れることができます。
LHSのパス式が、配列でない値の既存のフィールドを対象としている場合はエラーが発生します。
RHSが配列を対象としている場合は、RHSの配列の要素を順番に追加することでLHSの配列が更新されます。例13-10を参照してください。
例13-9 要素を配列に追加してそれを末尾に挿入
このコードでは、配列aの末尾に文字列"hello"を追加しています。
SELECT json_transform('{"a":[1,2,3]}',
APPEND '$.a' = 'hello');
結果 — 変更された入力データ:
{"a":[ 1,2,3,"hello" ]}
演算子INSERTを使用するこのコードも同等です。APPENDは、last+1の配列位置に対するINSERTの効果があります。
SELECT json_transform('{"a":[1,2,3]}',
INSERT '$.a[last+1]' = 'hello');
例13-10 JSON_TRANSFORM: 変数の使用による配列への複数要素の追加
この例では、値5と"cat"を、その順序で、各配列a.bに、つまり配列[ 1,2 ]と[ 3,4 ]に追加します。(これは、例13-24に似ています。)
追加する要素、およびそれらを追加する順序は、ここでは配列[ 5,"cat" ]によって指定されています。これはこの場合は、RHSのSQL式(SQL/JSONファンクションjson_arrayを呼び出す)を評価した結果です。
この配列は、SQL/JSON変数$varの値として演算子APPENDに渡されます。追加される要素は、すべての配列要素を順番に並べたものであり、RHSのパス式で[*]を使用して指定します。
SELECT json_transform('{"a": [ {"b": [ 1,2 ]},
{"b": [ 3,4 ]} ]}',
SET '$var' = json_array(5, 'cat'),
APPEND '$.a[*].b' = PATH '$var[*]');
結果 — 変更された入力データ:
{"a":[ {"b":[ 1,2,5,"cat" ]},
{"b":[ 3,4,5,"cat" ]} ]}
ヒント:
ハンドラCREATE ON MISSINGを使用すると、LHSが対象とする欠落している配列値フィールドを作成して、RHSで指定された値から入力できます。次に例を示します:
SELECT json_transform('{"a":[1,2,3]}',
APPEND '$.b' = PATH '$.a[0,2]'
CREATE ON MISSING);
結果 — 変更された入力データ:
{"a":[ 1,2,3 ], "b":[ 1,3 ]}
演算子APPENDで使用できるハンドラは次のとおりです(演算子PREPENDの場合と同じです):
-
ERROR ON MISSING(デフォルト)、IGNORE ON MISSING、CREATE ON MISSING、NULL ON MISSING。作成は、対象となる場所に単一の配列を挿入することを意味します。単一の配列要素は、SQLの結果式の値です。 -
ERROR ON MISMATCH(デフォルト)、IGNORE ON MISMATCH、REPLACE ON MISMATCH、CREATE ON MISMATCH。 -
NULL ON NULL(デフォルト)、IGNORE ON NULL、ERROR ON NULL -
IGNORE ON EMPTY(デフォルト)、ERROR ON EMPTY.