@@ -7262,6 +7262,167 @@ JSON_INSERT
72627262)
72637263{"a": "foo", "b": true}
72647264# ----------------------------------------------------------------------
7265+ # Test of JSON_ARRAY_INSERT function.
7266+ # ----------------------------------------------------------------------
7267+ select json_array_insert(NULL, '$.b[1]', 1);
7268+ json_array_insert(NULL, '$.b[1]', 1)
7269+ NULL
7270+ select json_array_insert('[1,2,3]', NULL, 1);
7271+ json_array_insert('[1,2,3]', NULL, 1)
7272+ NULL
7273+ select json_array_insert('[1,2,3]', '$[3]', NULL);
7274+ json_array_insert('[1,2,3]', '$[3]', NULL)
7275+ NULL
7276+ select json_array_insert(NULL);
7277+ ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
7278+ select json_array_insert(NULL, NULL);
7279+ ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
7280+ select json_array_insert(NULL, NULL, NULL, NULL);
7281+ ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
7282+ select json_array_insert('true', '$', 1);
7283+ ERROR 42000: A path expression is not a path to a cell in an array.
7284+ select json_array_insert('true', '$.a', 1);
7285+ ERROR 42000: A path expression is not a path to a cell in an array.
7286+ select json_array_insert('true', '$.a[1].b', 1);
7287+ ERROR 42000: A path expression is not a path to a cell in an array.
7288+ select json_array_insert( 'true', '$[0]', false );
7289+ json_array_insert( 'true', '$[0]', false )
7290+ true
7291+ select json_array_insert( 'true', '$[1]', false );
7292+ json_array_insert( 'true', '$[1]', false )
7293+ true
7294+ select json_array_insert( '{ "a": true }', '$.a[0]', false );
7295+ json_array_insert( '{ "a": true }', '$.a[0]', false )
7296+ {"a": true}
7297+ select json_array_insert( '{ "a": true }', '$.a[1]', false );
7298+ json_array_insert( '{ "a": true }', '$.a[1]', false )
7299+ {"a": true}
7300+ select json_array_insert( '[]', '$[0]', false );
7301+ json_array_insert( '[]', '$[0]', false )
7302+ [false]
7303+ select json_array_insert( '[]', '$[1]', false );
7304+ json_array_insert( '[]', '$[1]', false )
7305+ [false]
7306+ select json_array_insert( '[true]', '$[0]', false );
7307+ json_array_insert( '[true]', '$[0]', false )
7308+ [false, true]
7309+ select json_array_insert( '[true]', '$[1]', false );
7310+ json_array_insert( '[true]', '$[1]', false )
7311+ [true, false]
7312+ select json_array_insert( '[true]', '$[2]', false );
7313+ json_array_insert( '[true]', '$[2]', false )
7314+ [true, false]
7315+ select json_array_insert( '{ "a": [] }', '$.a[0]', false );
7316+ json_array_insert( '{ "a": [] }', '$.a[0]', false )
7317+ {"a": [false]}
7318+ select json_array_insert( '{ "a": [] }', '$.a[1]', false );
7319+ json_array_insert( '{ "a": [] }', '$.a[1]', false )
7320+ {"a": [false]}
7321+ select json_array_insert( '{ "a": [true] }', '$.a[0]', false );
7322+ json_array_insert( '{ "a": [true] }', '$.a[0]', false )
7323+ {"a": [false, true]}
7324+ select json_array_insert( '{ "a": [true] }', '$.a[1]', false );
7325+ json_array_insert( '{ "a": [true] }', '$.a[1]', false )
7326+ {"a": [true, false]}
7327+ select json_array_insert( '{ "a": [true] }', '$.a[2]', false );
7328+ json_array_insert( '{ "a": [true] }', '$.a[2]', false )
7329+ {"a": [true, false]}
7330+ select json_array_insert( '[1, 2, 3, 4]', '$[0]', false );
7331+ json_array_insert( '[1, 2, 3, 4]', '$[0]', false )
7332+ [false, 1, 2, 3, 4]
7333+ select json_array_insert( '[1, 2, 3, 4]', '$[1]', false );
7334+ json_array_insert( '[1, 2, 3, 4]', '$[1]', false )
7335+ [1, false, 2, 3, 4]
7336+ select json_array_insert( '[1, 2, 3, 4]', '$[2]', false );
7337+ json_array_insert( '[1, 2, 3, 4]', '$[2]', false )
7338+ [1, 2, false, 3, 4]
7339+ select json_array_insert( '[1, 2, 3, 4]', '$[3]', false );
7340+ json_array_insert( '[1, 2, 3, 4]', '$[3]', false )
7341+ [1, 2, 3, false, 4]
7342+ select json_array_insert( '[1, 2, 3, 4]', '$[4]', false );
7343+ json_array_insert( '[1, 2, 3, 4]', '$[4]', false )
7344+ [1, 2, 3, 4, false]
7345+ select json_array_insert( '[1, 2, 3, 4]', '$[5]', false );
7346+ json_array_insert( '[1, 2, 3, 4]', '$[5]', false )
7347+ [1, 2, 3, 4, false]
7348+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[0]', false );
7349+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[0]', false )
7350+ {"a": [false, 1, 2, 3, 4]}
7351+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[1]', false );
7352+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[1]', false )
7353+ {"a": [1, false, 2, 3, 4]}
7354+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[2]', false );
7355+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[2]', false )
7356+ {"a": [1, 2, false, 3, 4]}
7357+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[3]', false );
7358+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[3]', false )
7359+ {"a": [1, 2, 3, false, 4]}
7360+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[4]', false );
7361+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[4]', false )
7362+ {"a": [1, 2, 3, 4, false]}
7363+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[5]', false );
7364+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[5]', false )
7365+ {"a": [1, 2, 3, 4, false]}
7366+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[0]', false );
7367+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[0]', false )
7368+ {"a": [1, 2, 3, 4]}
7369+ select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[1]', false );
7370+ json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[1]', false )
7371+ {"a": [1, 2, 3, 4]}
7372+ create table jdoc( id int, doc json );
7373+ insert into jdoc values
7374+ ( 1, '[ [ true ], [ false ] ]' ),
7375+ ( 2, '[ [ 0 ], [ 1 ] ]' ),
7376+ ( 3, '[ [ "abc" ], [ "def" ] ]' );
7377+ select id, json_array_insert( doc, '$[0][1]', 'fred' )
7378+ from jdoc order by id;
7379+ id json_array_insert( doc, '$[0][1]', 'fred' )
7380+ 1 [[true, "fred"], [false]]
7381+ 2 [[0, "fred"], [1]]
7382+ 3 [["abc", "fred"], ["def"]]
7383+ select id, json_array_insert( doc, '$[1][0]', 'fred' )
7384+ from jdoc order by id;
7385+ id json_array_insert( doc, '$[1][0]', 'fred' )
7386+ 1 [[true], ["fred", false]]
7387+ 2 [[0], ["fred", 1]]
7388+ 3 [["abc"], ["fred", "def"]]
7389+ drop table jdoc;
7390+ create table t( id int, v varchar(10));
7391+ insert into t values (1, 'a'), (2, null), (3, 'a');
7392+ select id v, json_array_insert('[[1]]', '$[0][0]', v) from t order by id;
7393+ v json_array_insert('[[1]]', '$[0][0]', v)
7394+ 1 [["a", 1]]
7395+ 2 NULL
7396+ 3 [["a", 1]]
7397+ drop table t;
7398+ select json_array_insert( '"a"', '$[0]', true );
7399+ json_array_insert( '"a"', '$[0]', true )
7400+ "a"
7401+ select json_array_insert( '[ "a" ]', '$[0][0]', true );
7402+ json_array_insert( '[ "a" ]', '$[0][0]', true )
7403+ ["a"]
7404+ select json_array_insert( '"a"', '$[1]', true );
7405+ json_array_insert( '"a"', '$[1]', true )
7406+ "a"
7407+ select json_insert('[]', '$.a.*[1]', 6);
7408+ ERROR 42000: In this situation, path expressions may not contain the * and ** tokens.
7409+ select json_insert('[]', '$**[1]', 6);
7410+ ERROR 42000: In this situation, path expressions may not contain the * and ** tokens.
7411+ select json_insert('[]', '$[*][1]', 6);
7412+ ERROR 42000: In this situation, path expressions may not contain the * and ** tokens.
7413+ select json_array_insert( '[ 1, 2, 3 ]', '$[1]', true, '$[1]', false );
7414+ json_array_insert( '[ 1, 2, 3 ]', '$[1]', true, '$[1]', false )
7415+ [1, false, true, 2, 3]
7416+ select json_array_insert( '[ 1, 2, 3 ]', '$[1]',
7417+ cast( '[ "a", "b", "c", "d" ]' as json ), '$[1][2]', false );
7418+ json_array_insert( '[ 1, 2, 3 ]', '$[1]',
7419+ cast( '[ "a", "b", "c", "d" ]' as json ), '$[1][2]', false )
7420+ [1, ["a", "b", false, "c", "d"], 2, 3]
7421+ SELECT JSON_ARRAY_INSERT(JSON_EXTRACT('[1', '$'), '$[0]', 1);
7422+ ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Missing a comma or ']' after an array element." at position 2 in '[1'.
7423+ select json_array_insert( '[ 1, 2, 3 ]', '$[1]', json_extract( '[', '$' ) );
7424+ ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 1 in '['.
7425+ # ----------------------------------------------------------------------
72657426# Test of JSON_SET function.
72667427# ----------------------------------------------------------------------
72677428select json_set(NULL, '$.b', cast(1 as json));
0 commit comments