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
.