3904 lines
197 KiB
Plaintext
3904 lines
197 KiB
Plaintext
SELECT CAST(0.0e0 AS JSON) = -0.0e0;
|
|
CAST(0.0e0 AS JSON) = -0.0e0
|
|
1
|
|
SELECT CAST(CAST(0 AS DECIMAL) AS JSON) = CAST(-0.0e0 AS DECIMAL);
|
|
CAST(CAST(0 AS DECIMAL) AS JSON) = CAST(-0.0e0 AS DECIMAL)
|
|
1
|
|
SELECT CAST(0.0e0 AS JSON) = CAST(-0.0e0 AS DECIMAL);
|
|
CAST(0.0e0 AS JSON) = CAST(-0.0e0 AS DECIMAL)
|
|
1
|
|
SELECT CAST(CAST(0 AS DECIMAL) AS JSON) = -0.0e0;
|
|
CAST(CAST(0 AS DECIMAL) AS JSON) = -0.0e0
|
|
1
|
|
SELECT CAST(CAST(0 AS SIGNED) AS JSON) = -0.0e0;
|
|
CAST(CAST(0 AS SIGNED) AS JSON) = -0.0e0
|
|
1
|
|
SELECT CAST(CAST(0 AS SIGNED) AS JSON) = CAST(-0.0e0 AS DECIMAL);
|
|
CAST(CAST(0 AS SIGNED) AS JSON) = CAST(-0.0e0 AS DECIMAL)
|
|
1
|
|
SELECT CAST(CAST(0 AS UNSIGNED) AS JSON) = -0.0e0;
|
|
CAST(CAST(0 AS UNSIGNED) AS JSON) = -0.0e0
|
|
1
|
|
SELECT CAST(CAST(0 AS UNSIGNED) AS JSON) = CAST(-0.0e0 AS DECIMAL);
|
|
CAST(CAST(0 AS UNSIGNED) AS JSON) = CAST(-0.0e0 AS DECIMAL)
|
|
1
|
|
select cast('"abc"' as json);
|
|
cast('"abc"' as json)
|
|
"abc"
|
|
select cast('abc' as json);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function cast_as_json: "Invalid value." at position 0.
|
|
|
|
# String literal - valid JSON
|
|
select JSON_VALID('123');
|
|
JSON_VALID('123')
|
|
1
|
|
select JSON_VALID('-123');
|
|
JSON_VALID('-123')
|
|
1
|
|
select JSON_VALID('5000000000');
|
|
JSON_VALID('5000000000')
|
|
1
|
|
select JSON_VALID('-5000000000');
|
|
JSON_VALID('-5000000000')
|
|
1
|
|
select JSON_VALID('1.23');
|
|
JSON_VALID('1.23')
|
|
1
|
|
select JSON_VALID('"123"');
|
|
JSON_VALID('"123"')
|
|
1
|
|
select JSON_VALID('true');
|
|
JSON_VALID('true')
|
|
1
|
|
select JSON_VALID('false');
|
|
JSON_VALID('false')
|
|
1
|
|
select JSON_VALID('null');
|
|
JSON_VALID('null')
|
|
1
|
|
select JSON_VALID('{"address": "Trondheim"}');
|
|
JSON_VALID('{"address": "Trondheim"}')
|
|
1
|
|
|
|
# String literal - not valid JSON
|
|
select JSON_VALID('12 3');
|
|
JSON_VALID('12 3')
|
|
0
|
|
|
|
# String literal not in UTF-8
|
|
set names 'ascii';
|
|
select JSON_VALID('123');
|
|
JSON_VALID('123')
|
|
1
|
|
set names 'utf8';
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
|
|
# Json expression
|
|
select JSON_VALID(cast('[123]' as JSON ));
|
|
JSON_VALID(cast('[123]' as JSON ))
|
|
1
|
|
|
|
# Json expression NULL
|
|
select JSON_VALID(cast(NULL as JSON ));
|
|
JSON_VALID(cast(NULL as JSON ))
|
|
NULL
|
|
|
|
# Bare NULL
|
|
select JSON_VALID( NULL );
|
|
JSON_VALID( NULL )
|
|
NULL
|
|
|
|
# Function result - string
|
|
select JSON_VALID( UPPER('"abc"') );
|
|
JSON_VALID( UPPER('"abc"') )
|
|
1
|
|
set names 'latin1';
|
|
|
|
# Function result - string
|
|
select JSON_VALID( UPPER('"abc"') );
|
|
JSON_VALID( UPPER('"abc"') )
|
|
1
|
|
set names 'utf8';
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
|
|
# Function result - date, not valid as JSON without CAST
|
|
select JSON_VALID( CAST('2015-01-15' AS DATE) );
|
|
JSON_VALID( CAST('2015-01-15' AS DATE) )
|
|
0
|
|
|
|
# The date string doesn't parse as JSON text, so wrong:
|
|
select JSON_VALID( CAST(CAST('2015-01-15' AS DATE) as CHAR CHARACTER SET 'utf8') );
|
|
JSON_VALID( CAST(CAST('2015-01-15' AS DATE) as CHAR CHARACTER SET 'utf8') )
|
|
0
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
# OK, though:
|
|
select JSON_VALID( CAST(CURDATE() as JSON) );
|
|
JSON_VALID( CAST(CURDATE() as JSON) )
|
|
1
|
|
|
|
# Function result - NULL
|
|
select JSON_VALID( UPPER(NULL) );
|
|
JSON_VALID( UPPER(NULL) )
|
|
NULL
|
|
select JSON_VALID( UPPER(CAST(NULL as CHAR)) );
|
|
JSON_VALID( UPPER(CAST(NULL as CHAR)) )
|
|
NULL
|
|
SELECT JSON_VALID( '{ "firstName" : "Fred", "lastName" : "Flintstone" }' );
|
|
JSON_VALID( '{ "firstName" : "Fred", "lastName" : "Flintstone" }' )
|
|
1
|
|
SELECT JSON_VALID( '3' );
|
|
JSON_VALID( '3' )
|
|
1
|
|
SELECT JSON_VALID( null );
|
|
JSON_VALID( null )
|
|
NULL
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_CONTAINS_PATH function.
|
|
# ----------------------------------------------------------------------
|
|
select json_contains_path();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_contains_path'
|
|
select json_contains_path('{ "a": true }' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_contains_path'
|
|
select json_contains_path('{ "a": true }', 'all' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_contains_path'
|
|
select json_contains_path('{ "a": tru }', 'all', '$' );
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_contains_path: "Invalid value." at position 10.
|
|
select json_contains_path('{ "a": true }', 'all', '$[' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 2.
|
|
select json_contains_path('{ "a": true }', 'all', '$a.***[3]' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
select json_contains_path('{ "a": true }', 'foo', '$.a' );
|
|
ERROR 42000: The oneOrAll argument to json_contains_path may take these values: 'one' or 'all'.
|
|
select json_contains_path('{}', 'all', cast('$' as binary));
|
|
ERROR 22032: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
|
select json_contains_path(null, 'all', '$.a' );
|
|
json_contains_path(null, 'all', '$.a' )
|
|
NULL
|
|
select json_contains_path('{ "a": true }', null, '$.a' );
|
|
json_contains_path('{ "a": true }', null, '$.a' )
|
|
NULL
|
|
select json_contains_path('{ "a": true }', 'all', null );
|
|
json_contains_path('{ "a": true }', 'all', null )
|
|
NULL
|
|
select json_contains_path('{ "a": true }', 'all', '$' );
|
|
json_contains_path('{ "a": true }', 'all', '$' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'all', '$.a' );
|
|
json_contains_path('{ "a": true }', 'all', '$.a' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'one', '$.a' );
|
|
json_contains_path('{ "a": true }', 'one', '$.a' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'all', '$.b' );
|
|
json_contains_path('{ "a": true }', 'all', '$.b' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'one', '$.b' );
|
|
json_contains_path('{ "a": true }', 'one', '$.b' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'all', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'all', '$.a', '$.b' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'all', '$.b', '$.a' );
|
|
json_contains_path('{ "a": true }', 'all', '$.b', '$.a' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'ALL', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'ALL', '$.a', '$.b' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'aLl', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'aLl', '$.a', '$.b' )
|
|
0
|
|
select json_contains_path('{ "a": true }', 'one', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'one', '$.a', '$.b' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'one', '$.b', '$.a' );
|
|
json_contains_path('{ "a": true }', 'one', '$.b', '$.a' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'ONE', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'ONE', '$.a', '$.b' )
|
|
1
|
|
select json_contains_path('{ "a": true }', 'oNe', '$.a', '$.b' );
|
|
json_contains_path('{ "a": true }', 'oNe', '$.a', '$.b' )
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**[4]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**[4]' )
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**[4]', '$**[5]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**[4]', '$**[5]' )
|
|
0
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**.c[2]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**.c[2]' )
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**.c[3]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2, { "c": [ 4, 5, { "d": [ 6, 7, 8, 9, 10 ]} ] } ] }', 'all', '$**.c[3]' )
|
|
0
|
|
select json_contains_path('{"a":1, "b":2}', 'one', '$.*');
|
|
json_contains_path('{"a":1, "b":2}', 'one', '$.*')
|
|
1
|
|
select json_contains_path('[1,2,3]', 'one', '$.*');
|
|
json_contains_path('[1,2,3]', 'one', '$.*')
|
|
0
|
|
select json_contains_path('{}', 'one', '$[*]');
|
|
json_contains_path('{}', 'one', '$[*]')
|
|
0
|
|
SELECT JSON_CONTAINS_PATH('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'one', '$**.a.*');
|
|
JSON_CONTAINS_PATH('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'one', '$**.a.*')
|
|
1
|
|
SELECT JSON_CONTAINS_PATH('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'all', '$**.a.*');
|
|
JSON_CONTAINS_PATH('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'all', '$**.a.*')
|
|
1
|
|
SELECT JSON_CONTAINS_PATH('[1,2,3]', 'one', '$**[*]');
|
|
JSON_CONTAINS_PATH('[1,2,3]', 'one', '$**[*]')
|
|
1
|
|
SELECT JSON_CONTAINS_PATH('[1,2,3]', 'all', '$**[*]');
|
|
JSON_CONTAINS_PATH('[1,2,3]', 'all', '$**[*]')
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$**[1]', '$.b[0]', '$.c' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$**[1]', '$.b[0]', '$.c' )
|
|
0
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$.c', '$**[1]', '$.b[0]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$.c', '$**[1]', '$.b[0]' )
|
|
0
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$.b[0]', '$.c', '$**[1]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'all', '$.b[0]', '$.c', '$**[1]' )
|
|
0
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$**[1]', '$.b[0]', '$.c' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$**[1]', '$.b[0]', '$.c' )
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$.c', '$**[1]', '$.b[0]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$.c', '$**[1]', '$.b[0]' )
|
|
1
|
|
select json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$.b[0]', '$.c', '$**[1]' );
|
|
json_contains_path('{ "a": true, "b": [ 1, 2 ] }', 'one', '$.b[0]', '$.c', '$**[1]' )
|
|
1
|
|
SELECT JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'all',
|
|
'$.a.c',
|
|
'$.b[1]'
|
|
);
|
|
JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'all',
|
|
'$.a.c',
|
|
'$.b[1]'
|
|
)
|
|
0
|
|
SELECT JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'one',
|
|
'$.a.c',
|
|
'$.b[1]'
|
|
);
|
|
JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'one',
|
|
'$.a.c',
|
|
'$.b[1]'
|
|
)
|
|
1
|
|
SELECT JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'all',
|
|
'$.c'
|
|
);
|
|
JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'all',
|
|
'$.c'
|
|
)
|
|
0
|
|
SELECT JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, { "c" : { "d" : true } } ] }',
|
|
'all',
|
|
'$.b[1].c.d'
|
|
);
|
|
JSON_CONTAINS_PATH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, { "c" : { "d" : true } } ] }',
|
|
'all',
|
|
'$.b[1].c.d'
|
|
)
|
|
1
|
|
select json_length( null );
|
|
json_length( null )
|
|
NULL
|
|
select json_length( '1' );
|
|
json_length( '1' )
|
|
1
|
|
|
|
# invalid json text
|
|
select json_length( 'abc' );
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_length: "Invalid value." at position 0.
|
|
select json_length( '"abc"' );
|
|
json_length( '"abc"' )
|
|
1
|
|
select json_length( 'true' );
|
|
json_length( 'true' )
|
|
1
|
|
select json_length( 'false' );
|
|
json_length( 'false' )
|
|
1
|
|
select json_length( 'null' );
|
|
json_length( 'null' )
|
|
1
|
|
select json_length( '{}' );
|
|
json_length( '{}' )
|
|
0
|
|
select json_length( '{ "a" : 100, "b" : 200 }' );
|
|
json_length( '{ "a" : 100, "b" : 200 }' )
|
|
2
|
|
select json_length( '{ "a" : 100, "b" : [ 300, 400, 500 ] }' );
|
|
json_length( '{ "a" : 100, "b" : [ 300, 400, 500 ] }' )
|
|
2
|
|
select json_length( '[]' );
|
|
json_length( '[]' )
|
|
0
|
|
select json_length( '[ null, "foo", true, 1.1 ]' );
|
|
json_length( '[ null, "foo", true, 1.1 ]' )
|
|
4
|
|
select json_length( '[ null, "foo", true, { "a" : "b", "c" : "d" } ]' );
|
|
json_length( '[ null, "foo", true, { "a" : "b", "c" : "d" } ]' )
|
|
4
|
|
select json_length( '"foo"' );
|
|
json_length( '"foo"' )
|
|
1
|
|
select json_length( '1.2' );
|
|
json_length( '1.2' )
|
|
1
|
|
|
|
# invalid json path
|
|
select json_length( 'true', 'c$' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
|
|
# invalid json path
|
|
select json_length( '{ "foo" : [ true, false ] }', '$.foo[bar]' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 6.
|
|
|
|
# wildcards not allowed in path expressions for this function
|
|
select json_length( 'true', '$.*' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
|
|
# wildcards not allowed in path expressions for this function
|
|
select json_length( 'true', '$.foo**.bar' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[0]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[0]' )
|
|
1
|
|
select json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[1]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[1]' )
|
|
3
|
|
select json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2]' )
|
|
1
|
|
select json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2][0]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2][0]' )
|
|
1
|
|
select json_length( '[ 1, [ 2, 3, 4 ], {"a": 1} ]', '$[2][0]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], {"a": 1} ]', '$[2][0]' )
|
|
1
|
|
select json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2][1]' );
|
|
json_length( '[ 1, [ 2, 3, 4 ], 5 ]', '$[2][1]' )
|
|
NULL
|
|
select json_length( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]' );
|
|
json_length( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]' )
|
|
3
|
|
SELECT JSON_LENGTH
|
|
(
|
|
'{}'
|
|
);
|
|
JSON_LENGTH
|
|
(
|
|
'{}'
|
|
)
|
|
0
|
|
SELECT JSON_LENGTH
|
|
(
|
|
'3'
|
|
);
|
|
JSON_LENGTH
|
|
(
|
|
'3'
|
|
)
|
|
1
|
|
SELECT JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }'
|
|
);
|
|
JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }'
|
|
)
|
|
2
|
|
SELECT JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }',
|
|
'$.b'
|
|
);
|
|
JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }',
|
|
'$.b'
|
|
)
|
|
3
|
|
SELECT JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }',
|
|
'$.c'
|
|
);
|
|
JSON_LENGTH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456, 789 ] }',
|
|
'$.c'
|
|
)
|
|
NULL
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_DEPTH function.
|
|
# ----------------------------------------------------------------------
|
|
select json_depth(null);
|
|
json_depth(null)
|
|
NULL
|
|
select json_depth(cast(null as json));
|
|
json_depth(cast(null as json))
|
|
NULL
|
|
select json_depth(cast('[]' as json)),
|
|
json_depth(cast('{}' as json)),
|
|
json_depth(cast('null' as json)),
|
|
json_depth(json_quote('foo'));
|
|
json_depth(cast('[]' as json)) json_depth(cast('{}' as json)) json_depth(cast('null' as json)) json_depth(json_quote('foo'))
|
|
1 1 1 1
|
|
select json_depth(cast('[[2], 3, [[[4]]]]' as json));
|
|
json_depth(cast('[[2], 3, [[[4]]]]' as json))
|
|
5
|
|
select json_depth(cast('{"a": {"a1": [3]}, "b": {"b1": {"c": {"d": [5]}}}}' as json));
|
|
json_depth(cast('{"a": {"a1": [3]}, "b": {"b1": {"c": {"d": [5]}}}}' as json))
|
|
6
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'{}'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'{}'
|
|
)
|
|
1
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'[]'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'[]'
|
|
)
|
|
1
|
|
SELECT JSON_DEPTH( '"abc"' );
|
|
JSON_DEPTH( '"abc"' )
|
|
1
|
|
SELECT JSON_DEPTH( CAST( '"abc"' AS JSON ) );
|
|
JSON_DEPTH( CAST( '"abc"' AS JSON ) )
|
|
1
|
|
SELECT JSON_DEPTH( 1 );
|
|
ERROR 22032: Invalid data type for JSON data in argument 1 to function json_depth; a JSON string or JSON type is required.
|
|
SELECT JSON_DEPTH( 'abc' );
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_depth: "Invalid value." at position 0.
|
|
SELECT JSON_DEPTH( CAST( 1 AS JSON ) );
|
|
JSON_DEPTH( CAST( 1 AS JSON ) )
|
|
1
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : false, "c" : null }'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : false, "c" : null }'
|
|
)
|
|
2
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , false, "c" , null ]'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , false, "c" , null ]'
|
|
)
|
|
2
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : {}, "c" : null }'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : {}, "c" : null }'
|
|
)
|
|
2
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , {}, "c" , null ]'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , {}, "c" , null ]'
|
|
)
|
|
2
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : { "e" : false }, "c" : null }'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'{ "a" : true, "b" : { "e" : false }, "c" : null }'
|
|
)
|
|
3
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , { "e" : false }, "c" , null ]'
|
|
);
|
|
JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , { "e" : false }, "c" , null ]'
|
|
)
|
|
3
|
|
SELECT JSON_DEPTH
|
|
(
|
|
'[ "a", true, "b" , { "e" : false }, "c" , null'
|
|
);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_depth: "Missing a comma or ']' after an array element." at position 46.
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_REMOVE function.
|
|
# ----------------------------------------------------------------------
|
|
select json_remove( null, '$[1]' );
|
|
json_remove( null, '$[1]' )
|
|
NULL
|
|
select json_remove( null, '$[1]' ) is null;
|
|
json_remove( null, '$[1]' ) is null
|
|
1
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null );
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null )
|
|
NULL
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null ) is null;
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null ) is null
|
|
1
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', null );
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', null )
|
|
NULL
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', null ) is null;
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', null ) is null
|
|
1
|
|
|
|
# not enough args
|
|
select json_remove();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_remove'
|
|
|
|
# not enough args
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_remove'
|
|
|
|
# not enough args
|
|
select json_remove( '$[1]' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_remove'
|
|
|
|
# invalid json text
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ', '$[1]', '$[2]' );
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_remove: "Missing a comma or ']' after an array element." at position 45.
|
|
|
|
# invalid json path
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1', '$[2]' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 3.
|
|
|
|
# invalid json path
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', '$[2' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 3.
|
|
|
|
# Vacuous path expression
|
|
select json_remove( '[ 1, 2, 3 ]', '$' );
|
|
ERROR 42000: The path expression '$' is not allowed in this context.
|
|
|
|
# Vacuous path expression
|
|
select json_remove( '[ 1, 2, 3 ]', '$', '$[2]' );
|
|
ERROR 42000: The path expression '$' is not allowed in this context.
|
|
|
|
# Vacuous path expression
|
|
select json_remove( '[ 1, 2, 3 ]', '$[1]', '$' );
|
|
ERROR 42000: The path expression '$' is not allowed in this context.
|
|
select json_remove( '[ 1, 2, 3 ]', '$[*]' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '[ 1, 2, 3 ]', '$**[2]' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '[ 1, 2, 3 ]', '$[2]', '$[*]' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '[ 1, 2, 3 ]', '$[2]', '$**[2]' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '[ 1, 2, 3 ]', '$[0]' );
|
|
json_remove( '[ 1, 2, 3 ]', '$[0]' )
|
|
[2, 3]
|
|
select json_remove( '[ 1, 2, 3 ]', '$[1]' );
|
|
json_remove( '[ 1, 2, 3 ]', '$[1]' )
|
|
[1, 3]
|
|
select json_remove( '[ 1, 2, 3 ]', '$[2]' );
|
|
json_remove( '[ 1, 2, 3 ]', '$[2]' )
|
|
[1, 2]
|
|
select json_remove( '[ 1, 2, 3 ]', '$[3]' );
|
|
json_remove( '[ 1, 2, 3 ]', '$[3]' )
|
|
[1, 2, 3]
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]' );
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]' )
|
|
[1, 5]
|
|
select json_remove( '[ { "a": { "a": true } } ]', '$**.a' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '[ { "a": true }, { "b": false }, { "c": null }, { "a": null } ]', '$[0].a', '$[2].c' );
|
|
json_remove( '[ { "a": true }, { "b": false }, { "c": null }, { "a": null } ]', '$[0].a', '$[2].c' )
|
|
[{}, {"b": false}, {}, {"a": null}]
|
|
select json_remove( '[ { "a": true }, { "b": [ { "c": { "a": true } } ] }, { "c": null }, { "a": null } ]', '$**.a' );
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_remove( '{"id": 123, "name": "systemQA", "array": [1, 2, 3]}', '$[0]' );
|
|
json_remove( '{"id": 123, "name": "systemQA", "array": [1, 2, 3]}', '$[0]' )
|
|
{"id": 123, "name": "systemQA", "array": [1, 2, 3]}
|
|
SELECT JSON_REMOVE
|
|
(
|
|
'{"a" : "foo", "b" : [true, {"c" : 123}]}',
|
|
'$.b[ 1 ]'
|
|
);
|
|
JSON_REMOVE
|
|
(
|
|
'{"a" : "foo", "b" : [true, {"c" : 123}]}',
|
|
'$.b[ 1 ]'
|
|
)
|
|
{"a": "foo", "b": [true]}
|
|
SELECT JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c'
|
|
)
|
|
{"a": "foo", "b": [true, {}]}
|
|
SELECT JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c'
|
|
)
|
|
{"a": "foo", "b": [true, {}]}
|
|
SELECT JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "d" : 456 } ] }',
|
|
'$.b[ 1 ].e'
|
|
);
|
|
JSON_REMOVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "d" : 456 } ] }',
|
|
'$.b[ 1 ].e'
|
|
)
|
|
{"a": "foo", "b": [true, {"c": 123, "d": 456}]}
|
|
SELECT JSON_REMOVE('123', '$.a');
|
|
JSON_REMOVE('123', '$.a')
|
|
123
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_MERGE_PRESERVE function.
|
|
# ----------------------------------------------------------------------
|
|
|
|
# not enough args
|
|
SELECT JSON_MERGE_PRESERVE();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PRESERVE'
|
|
|
|
# not enough args
|
|
SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PRESERVE'
|
|
SELECT JSON_MERGE_PRESERVE(NULL, NULL);
|
|
JSON_MERGE_PRESERVE(NULL, NULL)
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]');
|
|
JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]')
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL);
|
|
JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL)
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]');
|
|
JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]')
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL, '[ 4, 5, 6 ]');
|
|
JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL, '[ 4, 5, 6 ]')
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', '[ 4, 5, 6 ]', NULL);
|
|
JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', '[ 4, 5, 6 ]', NULL)
|
|
NULL
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4');
|
|
ERROR 22032: Invalid JSON text in argument 2 to function json_merge_preserve: "Missing a comma or ']' after an array element." at position 5.
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2', '[3, 4]');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_merge_preserve: "Missing a comma or ']' after an array element." at position 5.
|
|
SELECT JSON_MERGE_PRESERVE('1', '2');
|
|
JSON_MERGE_PRESERVE('1', '2')
|
|
[1, 2]
|
|
SELECT JSON_MERGE_PRESERVE('1', '[2, 3]');
|
|
JSON_MERGE_PRESERVE('1', '[2, 3]')
|
|
[1, 2, 3]
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2]', '3');
|
|
JSON_MERGE_PRESERVE('[1, 2]', '3')
|
|
[1, 2, 3]
|
|
SELECT JSON_MERGE_PRESERVE('1', '{ "a": 2 }');
|
|
JSON_MERGE_PRESERVE('1', '{ "a": 2 }')
|
|
[1, {"a": 2}]
|
|
SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '1');
|
|
JSON_MERGE_PRESERVE('{ "a": 2 }', '1')
|
|
[{"a": 2}, 1]
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4]');
|
|
JSON_MERGE_PRESERVE('[1, 2]', '[3, 4]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '{ "b": 3}');
|
|
JSON_MERGE_PRESERVE('{ "a": 2 }', '{ "b": 3}')
|
|
{"a": 2, "b": 3}
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2]', '{ "a": 2 }');
|
|
JSON_MERGE_PRESERVE('[1, 2]', '{ "a": 2 }')
|
|
[1, 2, {"a": 2}]
|
|
SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '[1, 2]');
|
|
JSON_MERGE_PRESERVE('{ "a": 2 }', '[1, 2]')
|
|
[{"a": 2}, 1, 2]
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": 3, "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": 3, "d": 4 }')
|
|
{"a": 1, "b": [2, 3], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": [3, 4], "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": [3, 4], "d": 4 }')
|
|
{"a": 1, "b": [2, 3, 4], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }')
|
|
{"a": 1, "b": [2, 3, 4], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": {"e": 7, "f": 8}, "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }',
|
|
'{"b": {"e": 7, "f": 8}, "d": 4 }')
|
|
{"a": 1, "b": [2, {"e": 7, "f": 8}], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{"a": 1, "b": 2 }');
|
|
JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{"a": 1, "b": 2 }')
|
|
{"a": 1, "b": [{"e": 7, "f": 8}, 2], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }',
|
|
'{"b": [10, 11], "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }',
|
|
'{"b": [10, 11], "d": 4 }')
|
|
{"a": 1, "b": [2, 9, 10, 11], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }',
|
|
'{"b": {"e": 7, "f": 8}, "d": 4 }');
|
|
JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }',
|
|
'{"b": {"e": 7, "f": 8}, "d": 4 }')
|
|
{"a": 1, "b": [2, 9, {"e": 7, "f": 8}], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{"a": 1, "b": [2, 9] }');
|
|
JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{"a": 1, "b": [2, 9] }')
|
|
{"a": 1, "b": [{"e": 7, "f": 8}, 2, 9], "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{ "a": 1, "b": {"e": 20, "g": 21 } }');
|
|
JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }',
|
|
'{ "a": 1, "b": {"e": 20, "g": 21 } }')
|
|
{"a": 1, "b": {"e": [7, 20], "f": 8, "g": 21}, "d": 4}
|
|
SELECT JSON_MERGE_PRESERVE('1', '2', '3');
|
|
JSON_MERGE_PRESERVE('1', '2', '3')
|
|
[1, 2, 3]
|
|
SELECT JSON_MERGE_PRESERVE('[1, 2 ]', '3', '[4, 5]');
|
|
JSON_MERGE_PRESERVE('[1, 2 ]', '3', '[4, 5]')
|
|
[1, 2, 3, 4, 5]
|
|
SELECT JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a": true, "b": { "c": 3, "d": 4 }, "e": [ 1, 2 ] }',
|
|
'{ "d": false, "b": { "g": 3, "d": 5 }, "f": [ 1, 2 ] }',
|
|
'{ "m": true, "b": { "h": 8, "d": 4 }, "e": [ 3, 4 ] }'
|
|
);
|
|
JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a": true, "b": { "c": 3, "d": 4 }, "e": [ 1, 2 ] }',
|
|
'{ "d": false, "b": { "g": 3, "d": 5 }, "f": [ 1, 2 ] }',
|
|
'{ "m": true, "b": { "h": 8, "d": 4 }, "e": [ 3, 4 ] }'
|
|
)
|
|
{"a": true, "b": {"c": 3, "d": [4, 5, 4], "g": 3, "h": 8}, "d": false, "e": [1, 2, 3, 4], "f": [1, 2], "m": true}
|
|
SELECT JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'[ 5, 6]'
|
|
);
|
|
JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'[ 5, 6]'
|
|
)
|
|
[{"a": "foo", "b": [true, {"c": 123}]}, 5, 6]
|
|
SELECT JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'{ "b": [ false, 34 ] }'
|
|
);
|
|
JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'{ "b": [ false, 34 ] }'
|
|
)
|
|
{"a": "foo", "b": [true, {"c": 123}, false, 34]}
|
|
SELECT JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'{ "b": "bar" }'
|
|
);
|
|
JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'{ "b": "bar" }'
|
|
)
|
|
{"a": "foo", "b": [true, {"c": 123}, "bar"]}
|
|
SELECT JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : { "b" : 1 } }',
|
|
'{ "a" : { "c" : 1 } }'
|
|
);
|
|
JSON_MERGE_PRESERVE
|
|
(
|
|
'{ "a" : { "b" : 1 } }',
|
|
'{ "a" : { "c" : 1 } }'
|
|
)
|
|
{"a": {"b": 1, "c": 1}}
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_TYPE function.
|
|
# ----------------------------------------------------------------------
|
|
select json_type('abc');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_type: "Invalid value." at position 0.
|
|
select json_type('{"a": 2}');
|
|
json_type('{"a": 2}')
|
|
OBJECT
|
|
select json_type('[1,2]');
|
|
json_type('[1,2]')
|
|
ARRAY
|
|
select json_type('"scalar string"');
|
|
json_type('"scalar string"')
|
|
STRING
|
|
select json_type('true');
|
|
json_type('true')
|
|
BOOLEAN
|
|
select json_type('false');
|
|
json_type('false')
|
|
BOOLEAN
|
|
select json_type('null');
|
|
json_type('null')
|
|
NULL
|
|
select json_type('1');
|
|
json_type('1')
|
|
INTEGER
|
|
select json_type('-0');
|
|
json_type('-0')
|
|
INTEGER
|
|
select json_type('-0.0');
|
|
json_type('-0.0')
|
|
DOUBLE
|
|
select json_type(-1);
|
|
ERROR 22032: Invalid data type for JSON data in argument 1 to function json_type; a JSON string or JSON type is required.
|
|
select json_type(CAST(1 AS UNSIGNED));
|
|
ERROR 22032: Invalid data type for JSON data in argument 1 to function json_type; a JSON string or JSON type is required.
|
|
select json_type('32767');
|
|
json_type('32767')
|
|
INTEGER
|
|
select json_type(PI());
|
|
ERROR 22032: Invalid data type for JSON data in argument 1 to function json_type; a JSON string or JSON type is required.
|
|
select json_type('3.14');
|
|
json_type('3.14')
|
|
DOUBLE
|
|
select json_type(CAST(CAST('2015-01-15' AS DATE) as CHAR CHARACTER SET 'utf8'));
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_type: "The document root must not be followed by other values." at position 4.
|
|
# ----------------------------------------------------------------------
|
|
# Test of CAST(literal AS JSON)
|
|
# ----------------------------------------------------------------------
|
|
select json_type(cast(cast('2014-11-25 18:00' as datetime) as json));
|
|
json_type(cast(cast('2014-11-25 18:00' as datetime) as json))
|
|
DATETIME
|
|
select json_type(cast(cast('2014-11-25' as date) as json));
|
|
json_type(cast(cast('2014-11-25' as date) as json))
|
|
DATE
|
|
select json_type(cast(cast('18:00:59' as time) as json));
|
|
json_type(cast(cast('18:00:59' as time) as json))
|
|
TIME
|
|
select json_type(cast(127 as json));
|
|
json_type(cast(127 as json))
|
|
INTEGER
|
|
select json_type(cast(255 as json));
|
|
json_type(cast(255 as json))
|
|
INTEGER
|
|
select json_type(cast(32767 as json));
|
|
json_type(cast(32767 as json))
|
|
INTEGER
|
|
select json_type(cast(65535 as json));
|
|
json_type(cast(65535 as json))
|
|
INTEGER
|
|
select json_type(cast(8388607 as json));
|
|
json_type(cast(8388607 as json))
|
|
INTEGER
|
|
select json_type(cast(16777215 as json));
|
|
json_type(cast(16777215 as json))
|
|
INTEGER
|
|
select json_type(cast(2147483647 as json));
|
|
json_type(cast(2147483647 as json))
|
|
INTEGER
|
|
select json_type(cast(4294967295 as json));
|
|
json_type(cast(4294967295 as json))
|
|
INTEGER
|
|
select json_type(cast(9223372036854775807 as json));
|
|
json_type(cast(9223372036854775807 as json))
|
|
INTEGER
|
|
select json_type(cast(18446744073709551615 as json));
|
|
json_type(cast(18446744073709551615 as json))
|
|
UNSIGNED INTEGER
|
|
select json_type(cast(true as json));
|
|
json_type(cast(true as json))
|
|
BOOLEAN
|
|
select json_type(cast(b'10101' as json));
|
|
json_type(cast(b'10101' as json))
|
|
BLOB
|
|
select json_type(cast(cast(3.14 as decimal(5,2)) as json));
|
|
json_type(cast(cast(3.14 as decimal(5,2)) as json))
|
|
DECIMAL
|
|
select json_type(cast(3.14 as json));
|
|
json_type(cast(3.14 as json))
|
|
DECIMAL
|
|
select json_type(cast(3.14E30 as json));
|
|
json_type(cast(3.14E30 as json))
|
|
DOUBLE
|
|
select json_type(cast(cast('10101abcde' as binary) as json));
|
|
json_type(cast(cast('10101abcde' as binary) as json))
|
|
BLOB
|
|
select json_type(cast(ST_GeomFromText('POINT(1 1)') as json));
|
|
json_type(cast(ST_GeomFromText('POINT(1 1)') as json))
|
|
OBJECT
|
|
select json_type(cast(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)') as json));
|
|
json_type(cast(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)') as json))
|
|
OBJECT
|
|
select json_type(cast(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
|
(5 5,7 5,7 7,5 7, 5 5))') as json));
|
|
json_type(cast(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
|
(5 5,7 5,7 7,5 7, 5 5))') as json))
|
|
OBJECT
|
|
select json_type(cast(null as json));
|
|
json_type(cast(null as json))
|
|
NULL
|
|
select json_type(cast(null as json)) is null;
|
|
json_type(cast(null as json)) is null
|
|
1
|
|
select json_type(null) is null;
|
|
json_type(null) is null
|
|
1
|
|
select cast(cast('2014-11-25 18:00' as datetime) as json);
|
|
cast(cast('2014-11-25 18:00' as datetime) as json)
|
|
"2014-11-25 18:00:00.000000"
|
|
select cast(cast('2014-11-25' as date) as json);
|
|
cast(cast('2014-11-25' as date) as json)
|
|
"2014-11-25"
|
|
select cast(cast('18:00:59' as time) as json);
|
|
cast(cast('18:00:59' as time) as json)
|
|
"18:00:59.000000"
|
|
select cast(127 as json);
|
|
cast(127 as json)
|
|
127
|
|
select cast(255 as json);
|
|
cast(255 as json)
|
|
255
|
|
select cast(32767 as json);
|
|
cast(32767 as json)
|
|
32767
|
|
select cast(65535 as json);
|
|
cast(65535 as json)
|
|
65535
|
|
select cast(8388607 as json);
|
|
cast(8388607 as json)
|
|
8388607
|
|
select cast(16777215 as json);
|
|
cast(16777215 as json)
|
|
16777215
|
|
select cast(2147483647 as json);
|
|
cast(2147483647 as json)
|
|
2147483647
|
|
select cast(4294967295 as json);
|
|
cast(4294967295 as json)
|
|
4294967295
|
|
select cast(9223372036854775807 as json);
|
|
cast(9223372036854775807 as json)
|
|
9223372036854775807
|
|
select cast(18446744073709551615 as json);
|
|
cast(18446744073709551615 as json)
|
|
18446744073709551615
|
|
select cast(true as json);
|
|
cast(true as json)
|
|
true
|
|
select cast(b'10101' as json);
|
|
cast(b'10101' as json)
|
|
"base64:type15:FQ=="
|
|
select cast(cast(3.14 as decimal(5,2)) as json);
|
|
cast(cast(3.14 as decimal(5,2)) as json)
|
|
3.14
|
|
select cast(3.14 as json);
|
|
cast(3.14 as json)
|
|
3.14
|
|
select cast(3.14e0 as json);
|
|
cast(3.14e0 as json)
|
|
3.14
|
|
select cast(cast('10101abcde' as binary) as json);
|
|
cast(cast('10101abcde' as binary) as json)
|
|
"base64:type15:MTAxMDFhYmNkZQ=="
|
|
select cast(ST_GeomFromText('POINT(1 1)') as json);
|
|
cast(ST_GeomFromText('POINT(1 1)') as json)
|
|
{"type": "Point", "coordinates": [1.0, 1.0]}
|
|
select cast(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)') as json);
|
|
cast(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)') as json)
|
|
{"type": "LineString", "coordinates": [[0.0, 0.0], [1.0, 1.0], [2.0, 2.0]]}
|
|
select cast(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
|
(5 5,7 5,7 7,5 7, 5 5))') as json);
|
|
cast(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
|
(5 5,7 5,7 7,5 7, 5 5))') as json)
|
|
{"type": "Polygon", "coordinates": [[[0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, 0.0]], [[5.0, 5.0], [7.0, 5.0], [7.0, 7.0], [5.0, 7.0], [5.0, 5.0]]]}
|
|
select cast(null as json);
|
|
cast(null as json)
|
|
NULL
|
|
select cast(null as json) is null;
|
|
cast(null as json) is null
|
|
1
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_KEYS function.
|
|
# ----------------------------------------------------------------------
|
|
select json_keys(NULL);
|
|
json_keys(NULL)
|
|
NULL
|
|
select json_keys(NULL, '$.b');
|
|
json_keys(NULL, '$.b')
|
|
NULL
|
|
select json_keys(NULL, NULL);
|
|
json_keys(NULL, NULL)
|
|
NULL
|
|
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a');
|
|
json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a')
|
|
NULL
|
|
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', NULL);
|
|
json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', NULL)
|
|
NULL
|
|
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}');
|
|
json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}')
|
|
["a", "b"]
|
|
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.b');
|
|
json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.b')
|
|
["b", "e"]
|
|
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.*.b');
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
# returns [ "a", "b" ]
|
|
SELECT JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }');
|
|
JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }')
|
|
["a", "b"]
|
|
# returns []
|
|
SELECT JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.b[1].c');
|
|
JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.b[1].c')
|
|
[]
|
|
# returns NULL
|
|
SELECT JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.a.b[2]');
|
|
JSON_KEYS('{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.a.b[2]')
|
|
NULL
|
|
SELECT JSON_KEYS('{"a":1}', '1010');
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
SELECT JSON_KEYS('{"a":1}', '1010') IS NULL;
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
SELECT JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }'
|
|
);
|
|
JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }'
|
|
)
|
|
["a", "b"]
|
|
SELECT JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.b[1].c'
|
|
);
|
|
JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.b[1].c'
|
|
)
|
|
[]
|
|
SELECT JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.a.b[2]'
|
|
);
|
|
JSON_KEYS
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : {} } ] }',
|
|
'$.a.b[2]'
|
|
)
|
|
NULL
|
|
SELECT JSON_KEYS();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_KEYS'
|
|
SELECT JSON_KEYS('{}', '$', '$');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_KEYS'
|
|
# ----------------------------------------------------------------------
|
|
# CAST(<json> AS CHAR). See also 'json_conversions.test' for other
|
|
# conversion tests.
|
|
# ----------------------------------------------------------------------
|
|
select cast(json_keys('{"a": 1}') as char);
|
|
cast(json_keys('{"a": 1}') as char)
|
|
["a"]
|
|
select cast(cast(1 as json) as char);
|
|
cast(cast(1 as json) as char)
|
|
1
|
|
select cast(json_keys(NULL) as char);
|
|
cast(json_keys(NULL) as char)
|
|
NULL
|
|
# ----------------------------------------------------------------------
|
|
# Path matching with double-quotes
|
|
# ----------------------------------------------------------------------
|
|
select json_extract( '{ "one potato" : 1 }', '$."one potato"' );
|
|
json_extract( '{ "one potato" : 1 }', '$."one potato"' )
|
|
1
|
|
select json_extract( '{ "a.b" : 1 }', '$."a.b"' );
|
|
json_extract( '{ "a.b" : 1 }', '$."a.b"' )
|
|
1
|
|
select json_extract( '{ "\\"a\\"": 1}', '$."a"' );
|
|
json_extract( '{ "\\"a\\"": 1}', '$."a"' )
|
|
NULL
|
|
select json_extract( '{ "\\"a\\"": 1}', '$."\\"a\\""' );
|
|
json_extract( '{ "\\"a\\"": 1}', '$."\\"a\\""' )
|
|
1
|
|
select json_extract( '{ "a": 1}', '$."a"' );
|
|
json_extract( '{ "a": 1}', '$."a"' )
|
|
1
|
|
select json_extract( '{ "a": 1}', '$.a' );
|
|
json_extract( '{ "a": 1}', '$.a' )
|
|
1
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[0]' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[0]' )
|
|
[3, 2]
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[0][1]' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[0][1]' )
|
|
2
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1]' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1]' )
|
|
[{"c": "d"}, 1]
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1][0]' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1][0]' )
|
|
{"c": "d"}
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1][0].c' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.a[1][0].c' )
|
|
"d"
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$."one potato"' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$."one potato"' )
|
|
7
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.b.c' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$.b.c' )
|
|
6
|
|
select json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$."b.c"' );
|
|
json_extract( '{ "a": [ [ 3, 2 ], [ { "c" : "d" }, 1 ] ], "b": { "c" : 6 }, "one potato": 7, "b.c" : 8 }', '$."b.c"' )
|
|
8
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_EXTRACT function.
|
|
# ----------------------------------------------------------------------
|
|
select json_extract(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_extract'
|
|
select json_extract('$.b');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_extract'
|
|
select json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_extract'
|
|
select json_extract('$.a', '{"a": 1, "b": {"e": "foo", "b": 3}}');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 0.
|
|
select json_extract(NULL, '$.b');
|
|
json_extract(NULL, '$.b')
|
|
NULL
|
|
select json_extract(NULL, NULL);
|
|
json_extract(NULL, NULL)
|
|
NULL
|
|
select json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a');
|
|
json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a')
|
|
1
|
|
select json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.*');
|
|
json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.*')
|
|
[1, {"b": 3, "e": "foo"}]
|
|
select json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a', '$.b.e');
|
|
json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a', '$.b.e')
|
|
[1, "foo"]
|
|
select json_extract('{"a": 1, "b": [1,2,3]}', '$.b[2]');
|
|
json_extract('{"a": 1, "b": [1,2,3]}', '$.b[2]')
|
|
3
|
|
select json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a', NULL);
|
|
json_extract('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.a', NULL)
|
|
NULL
|
|
# returns a JSON value containing just the string "123"
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }',
|
|
'$.b[ 1 ].c');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }',
|
|
'$.b[ 1 ].c')
|
|
"123"
|
|
# returns a JSON value containing just the number 123
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c')
|
|
123
|
|
# raises an error because the document is not valid
|
|
SELECT JSON_EXTRACT('{ "a" : [ }',
|
|
'$.b[ 1 ].c');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 10.
|
|
# raises an error because the path is invalid
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].');
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 9.
|
|
# returns a JSON value containing the number 123 (because of
|
|
# auto-wrapping the scalar)
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 0 ]');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 0 ]')
|
|
123
|
|
# returns a JSON value containing the object because of auto-wrapping
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : {"not array": 4} } ] }',
|
|
'$.b[ 1 ].c[ 0 ]');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : {"not array": 4} } ] }',
|
|
'$.b[ 1 ].c[ 0 ]')
|
|
{"not array": 4}
|
|
# returns null because the path, although valid, does not identify a value
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 1 ]');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 1 ]')
|
|
NULL
|
|
# returns a JSON value containing the number 456 (due to normalization)
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c')
|
|
456
|
|
# returns a JSON array [ "foo", true ]
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.a', '$.b[0]');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.a', '$.b[0]')
|
|
["foo", true]
|
|
# returns a JSON array [ true ]
|
|
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.d', '$.b[0]');
|
|
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.d', '$.b[0]')
|
|
[true]
|
|
# Some examples verifying ellipsis behavior.
|
|
# Should have the same result, apart from wrapping.
|
|
select json_extract( '[1]', '$[0][0]' );
|
|
json_extract( '[1]', '$[0][0]' )
|
|
1
|
|
select json_extract( '[1]', '$**[0]' );
|
|
json_extract( '[1]', '$**[0]' )
|
|
[1]
|
|
select json_extract( '[1]', '$[last][last]' );
|
|
json_extract( '[1]', '$[last][last]' )
|
|
1
|
|
select json_extract( '[1]', '$**[last]' );
|
|
json_extract( '[1]', '$**[last]' )
|
|
[1]
|
|
# Should have the same result.
|
|
select json_extract( '{ "a": 1 }', '$**[0]' );
|
|
json_extract( '{ "a": 1 }', '$**[0]' )
|
|
[{"a": 1}, 1]
|
|
select json_extract( '{ "a": 1 }', '$[0]', '$.a[0]' );
|
|
json_extract( '{ "a": 1 }', '$[0]', '$.a[0]' )
|
|
[{"a": 1}, 1]
|
|
select json_extract( '{ "a": 1 }', '$[0]', '$[0].a[0]' );
|
|
json_extract( '{ "a": 1 }', '$[0]', '$[0].a[0]' )
|
|
[{"a": 1}, 1]
|
|
select json_extract( '{ "a": 1 }', '$**[last]' );
|
|
json_extract( '{ "a": 1 }', '$**[last]' )
|
|
[{"a": 1}, 1]
|
|
select json_extract( '{ "a": 1 }', '$[last]', '$.a[last]' );
|
|
json_extract( '{ "a": 1 }', '$[last]', '$.a[last]' )
|
|
[{"a": 1}, 1]
|
|
# Should have the same result, apart from wrapping.
|
|
select json_extract( '{ "a": 1 }', '$**.a' );
|
|
json_extract( '{ "a": 1 }', '$**.a' )
|
|
[1]
|
|
select json_extract( '{ "a": 1 }', '$[0].a' );
|
|
json_extract( '{ "a": 1 }', '$[0].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[last].a' );
|
|
json_extract( '{ "a": 1 }', '$[last].a' )
|
|
1
|
|
# Should have the same result, apart from wrapping.
|
|
select json_extract( '{ "a": 1 }', '$**.a' );
|
|
json_extract( '{ "a": 1 }', '$**.a' )
|
|
[1]
|
|
select json_extract( '{ "a": 1 }', '$[0].a' );
|
|
json_extract( '{ "a": 1 }', '$[0].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[0][0].a' );
|
|
json_extract( '{ "a": 1 }', '$[0][0].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[0][0][0].a' );
|
|
json_extract( '{ "a": 1 }', '$[0][0][0].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[last].a' );
|
|
json_extract( '{ "a": 1 }', '$[last].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[last][last].a' );
|
|
json_extract( '{ "a": 1 }', '$[last][last].a' )
|
|
1
|
|
select json_extract( '{ "a": 1 }', '$[last][last][last].a' );
|
|
json_extract( '{ "a": 1 }', '$[last][last][last].a' )
|
|
1
|
|
# Should have the same result.
|
|
SELECT JSON_EXTRACT('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]', '$**.a.*');
|
|
JSON_EXTRACT('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]', '$**.a.*')
|
|
[{"c": 42}]
|
|
SELECT JSON_EXTRACT('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'$[1][0][0].x[0].a.*');
|
|
JSON_EXTRACT('[1, [[{"x": [{"a":{"b":{"c":42}}}]}]]]',
|
|
'$[1][0][0].x[0].a.*')
|
|
[{"c": 42}]
|
|
SELECT JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[0]');
|
|
JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[0]')
|
|
[[0, 1], 0, 1, 2, 3, 4, 5, 6]
|
|
SELECT JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[1]');
|
|
JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[1]')
|
|
[[2, 3], 1, 3, [5, 6], 6]
|
|
SELECT JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[2]');
|
|
JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[2]')
|
|
[[4, [5, 6]]]
|
|
SELECT JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[3]');
|
|
JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[3]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[*]');
|
|
JSON_EXTRACT('[[0,1],[2,3],[4,[5,6]]]', '$**[*]')
|
|
[[0, 1], [2, 3], [4, [5, 6]], 0, 1, 2, 3, 4, [5, 6], 5, 6]
|
|
SELECT JSON_EXTRACT('[1,2,[3,4,[5,6,{"a":7}]]]', '$**[*]**[0]');
|
|
JSON_EXTRACT('[1,2,[3,4,[5,6,{"a":7}]]]', '$**[*]**[0]')
|
|
[1, 2, 3, 4, 5, 6, {"a": 7}, 7]
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : "123" } ] }',
|
|
'$.b[ 1 ].c'
|
|
)
|
|
"123"
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c'
|
|
)
|
|
123
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : [ }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 10.
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].'
|
|
);
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 9.
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 0 ]'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 0 ]'
|
|
)
|
|
123
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 1 ]'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
|
'$.b[ 1 ].c[ 1 ]'
|
|
)
|
|
NULL
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.b[ 1 ].c'
|
|
)
|
|
456
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.a', '$.b[0]'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.a', '$.b[0]'
|
|
)
|
|
["foo", true]
|
|
SELECT JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.d', '$.b[0]'
|
|
);
|
|
JSON_EXTRACT
|
|
(
|
|
'{ "a" : "foo", "b" : [ true, { "c" : 123, "c" : 456 } ] }',
|
|
'$.d', '$.b[0]'
|
|
)
|
|
[true]
|
|
select json_extract( '[ { "a": 1 }, { "a": 2 } ]', '$[*].b' ) jdoc;
|
|
jdoc
|
|
NULL
|
|
select json_extract( '[ { "a": 1 }, { "a": 2 } ]', '$[0].b' ) jdoc;
|
|
jdoc
|
|
NULL
|
|
select json_extract( '[ { "a": 1 }, { "a": 2 } ]', '$[0].a' ) jdoc;
|
|
jdoc
|
|
1
|
|
select json_extract( '[ { "a": 1 }, { "a": 2 } ]', '$[*].a' ) jdoc;
|
|
jdoc
|
|
[1, 2]
|
|
select json_extract( '[ { "a": 1 }, { "b": 2 } ]', '$[*].a' ) jdoc;
|
|
jdoc
|
|
[1]
|
|
select json_extract( '[ { "a": [3,4] }, { "b": 2 } ]', '$[0].a' ) jdoc;
|
|
jdoc
|
|
[3, 4]
|
|
select json_extract( '[ { "a": [3,4] }, { "b": 2 } ]', '$[*].a' ) jdoc;
|
|
jdoc
|
|
[[3, 4]]
|
|
select json_extract( '[ { "a": [3,4] }, { "b": 2 } ]', '$[0].a', '$[1].a' ) jdoc;
|
|
jdoc
|
|
[[3, 4]]
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_ARRAY_APPEND function.
|
|
# ----------------------------------------------------------------------
|
|
select json_array_append(NULL, '$.b', cast(1 as json));
|
|
json_array_append(NULL, '$.b', cast(1 as json))
|
|
NULL
|
|
select json_array_append('[1,2,3]', NULL, cast(1 as json));
|
|
json_array_append('[1,2,3]', NULL, cast(1 as json))
|
|
NULL
|
|
select json_array_append('[1,2,3]', '$', NULL);
|
|
json_array_append('[1,2,3]', '$', NULL)
|
|
[1, 2, 3, null]
|
|
select json_array_append(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_append'
|
|
select json_array_append(NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_append'
|
|
select json_array_append(NULL, NULL, NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_append'
|
|
SELECT JSON_ARRAY_APPEND(cast('1' as json), '$', 3);
|
|
JSON_ARRAY_APPEND(cast('1' as json), '$', 3)
|
|
[1, 3]
|
|
SELECT JSON_ARRAY_APPEND(cast('{"a": 3}' as json), '$', 3);
|
|
JSON_ARRAY_APPEND(cast('{"a": 3}' as json), '$', 3)
|
|
[{"a": 3}, 3]
|
|
SELECT JSON_ARRAY_APPEND('1', '$[0]', 3);
|
|
JSON_ARRAY_APPEND('1', '$[0]', 3)
|
|
[1, 3]
|
|
select json_array_append(cast('{"a": {"b": [3]}}' as json), '$**[0]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_ARRAY_APPEND('1', '$[0 to 1]', 3);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
# Auto-wrapping, since because the paths identify scalars.
|
|
# should return {"a": "foo", "b": ["bar", 4], "c": ["wibble", "grape"]}
|
|
SELECT JSON_ARRAY_APPEND('{"a": "foo", "b": "bar", "c": "wibble"}',
|
|
'$.b', cast(4 as json),
|
|
'$.c', cast('"grape"' as json));
|
|
JSON_ARRAY_APPEND('{"a": "foo", "b": "bar", "c": "wibble"}',
|
|
'$.b', cast(4 as json),
|
|
'$.c', cast('"grape"' as json))
|
|
{"a": "foo", "b": ["bar", 4], "c": ["wibble", "grape"]}
|
|
# should return {"a": "foo", "b": [1, 2, 3, 4],
|
|
# "c": ["apple", "pear", "grape"]}
|
|
SELECT JSON_ARRAY_APPEND('{"a" : "foo","b": [1, 2, 3], "c": ["apple", "pear"]}',
|
|
'$.b', cast(4 as json),
|
|
'$.c', cast('"grape"' as json));
|
|
JSON_ARRAY_APPEND('{"a" : "foo","b": [1, 2, 3], "c": ["apple", "pear"]}',
|
|
'$.b', cast(4 as json),
|
|
'$.c', cast('"grape"' as json))
|
|
{"a": "foo", "b": [1, 2, 3, 4], "c": ["apple", "pear", "grape"]}
|
|
SELECT JSON_ARRAY_APPEND('{"a" : "foo","b": [1, 2, 3], "c": ["apple", "pear"]}',
|
|
'$.b', 4,
|
|
'$.c', 'grape');
|
|
JSON_ARRAY_APPEND('{"a" : "foo","b": [1, 2, 3], "c": ["apple", "pear"]}',
|
|
'$.b', 4,
|
|
'$.c', 'grape')
|
|
{"a": "foo", "b": [1, 2, 3, 4], "c": ["apple", "pear", "grape"]}
|
|
select json_array_append( '[[], [], []]', '$[*]', 3, '$[*]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_array_append( '[[], "not array", []]', '$[*]', 3, '$[*]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_ARRAY_APPEND
|
|
(
|
|
'{ "a" : "foo", "b" : "bar", "c" : "wibble" }',
|
|
'$.b', 4,
|
|
'$.c', "grape"
|
|
);
|
|
JSON_ARRAY_APPEND
|
|
(
|
|
'{ "a" : "foo", "b" : "bar", "c" : "wibble" }',
|
|
'$.b', 4,
|
|
'$.c', "grape"
|
|
)
|
|
{"a": "foo", "b": ["bar", 4], "c": ["wibble", "grape"]}
|
|
SELECT JSON_ARRAY_APPEND
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ], "c" : [ "apple", "pear" ] }',
|
|
'$.b', 4,
|
|
'$.c', "grape"
|
|
);
|
|
JSON_ARRAY_APPEND
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ], "c" : [ "apple", "pear" ] }',
|
|
'$.b', 4,
|
|
'$.c', "grape"
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3, 4], "c": ["apple", "pear", "grape"]}
|
|
# ----------------------------------------------------------------------
|
|
# Bug#21373874 ASSERTION `PARENT' FAILED
|
|
# ----------------------------------------------------------------------
|
|
select json_array_append('{"a":1}', '$[0]', 100);
|
|
json_array_append('{"a":1}', '$[0]', 100)
|
|
[{"a": 1}, 100]
|
|
select json_array_append('3', '$[0]', 100);
|
|
json_array_append('3', '$[0]', 100)
|
|
[3, 100]
|
|
select json_array_append('3', '$[0][0][0][0]', 100);
|
|
json_array_append('3', '$[0][0][0][0]', 100)
|
|
[3, 100]
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_INSERT function.
|
|
# ----------------------------------------------------------------------
|
|
select json_insert(NULL, '$.b', cast(1 as json));
|
|
json_insert(NULL, '$.b', cast(1 as json))
|
|
NULL
|
|
select json_insert('[1,2,3]', NULL, cast(1 as json));
|
|
json_insert('[1,2,3]', NULL, cast(1 as json))
|
|
NULL
|
|
select json_insert('[1,2,3]', '$[3]', NULL);
|
|
json_insert('[1,2,3]', '$[3]', NULL)
|
|
[1, 2, 3, null]
|
|
select json_insert(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_insert'
|
|
select json_insert(NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_insert'
|
|
select json_insert(NULL, NULL, NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_insert'
|
|
select json_insert('[1,2,3]', '$[0]', 4);
|
|
json_insert('[1,2,3]', '$[0]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[1]', 4);
|
|
json_insert('[1,2,3]', '$[1]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[2]', 4);
|
|
json_insert('[1,2,3]', '$[2]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[3]', 4);
|
|
json_insert('[1,2,3]', '$[3]', 4)
|
|
[1, 2, 3, 4]
|
|
select json_insert('[1,2,3]', '$[10]', 4);
|
|
json_insert('[1,2,3]', '$[10]', 4)
|
|
[1, 2, 3, 4]
|
|
select json_insert('[1,2,3]', '$[last]', 4);
|
|
json_insert('[1,2,3]', '$[last]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[last-1]', 4);
|
|
json_insert('[1,2,3]', '$[last-1]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[last-2]', 4);
|
|
json_insert('[1,2,3]', '$[last-2]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[last-3]', 4);
|
|
json_insert('[1,2,3]', '$[last-3]', 4)
|
|
[4, 1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[last-10]', 4);
|
|
json_insert('[1,2,3]', '$[last-10]', 4)
|
|
[4, 1, 2, 3]
|
|
select json_insert('[]', '$[0]', 1);
|
|
json_insert('[]', '$[0]', 1)
|
|
[1]
|
|
select json_insert('[]', '$[1]', 1);
|
|
json_insert('[]', '$[1]', 1)
|
|
[1]
|
|
select json_insert('[]', '$[last]', 1);
|
|
json_insert('[]', '$[last]', 1)
|
|
[1]
|
|
select json_insert('[]', '$[last-1]', 1);
|
|
json_insert('[]', '$[last-1]', 1)
|
|
[1]
|
|
select json_insert('{"c":4}', '$.c', 4);
|
|
json_insert('{"c":4}', '$.c', 4)
|
|
{"c": 4}
|
|
select json_insert('{"c":4}', '$.a', 4);
|
|
json_insert('{"c":4}', '$.a', 4)
|
|
{"a": 4, "c": 4}
|
|
select json_insert('1', '$', 4);
|
|
json_insert('1', '$', 4)
|
|
1
|
|
select json_insert('1', '$[0]', 4);
|
|
json_insert('1', '$[0]', 4)
|
|
1
|
|
select json_insert('1', '$[1]', 4);
|
|
json_insert('1', '$[1]', 4)
|
|
[1, 4]
|
|
select json_insert('1', '$[10]', '4', '$[11]', 5);
|
|
json_insert('1', '$[10]', '4', '$[11]', 5)
|
|
[1, "4", 5]
|
|
select json_insert('1', '$[last]', 4);
|
|
json_insert('1', '$[last]', 4)
|
|
1
|
|
select json_insert('1', '$[last-1]', 4);
|
|
json_insert('1', '$[last-1]', 4)
|
|
[4, 1]
|
|
select json_insert('1', '$[last-10]', '4', '$[last-11]', 5);
|
|
json_insert('1', '$[last-10]', '4', '$[last-11]', 5)
|
|
[5, "4", 1]
|
|
select json_insert('[1,2,3]', '$[2][0]', 4);
|
|
json_insert('[1,2,3]', '$[2][0]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[2][1]', 4);
|
|
json_insert('[1,2,3]', '$[2][1]', 4)
|
|
[1, 2, [3, 4]]
|
|
select json_insert('[1,2,3]', '$[2][2]', 4);
|
|
json_insert('[1,2,3]', '$[2][2]', 4)
|
|
[1, 2, [3, 4]]
|
|
select json_insert('[1,2,3]', '$[2][last]', 4);
|
|
json_insert('[1,2,3]', '$[2][last]', 4)
|
|
[1, 2, 3]
|
|
select json_insert('[1,2,3]', '$[2][last-1]', 4);
|
|
json_insert('[1,2,3]', '$[2][last-1]', 4)
|
|
[1, 2, [4, 3]]
|
|
select json_insert('[1,2,3]', '$[2][last-2]', 4);
|
|
json_insert('[1,2,3]', '$[2][last-2]', 4)
|
|
[1, 2, [4, 3]]
|
|
select json_insert('{"a": 3}', '$.a[0]', 4);
|
|
json_insert('{"a": 3}', '$.a[0]', 4)
|
|
{"a": 3}
|
|
select json_insert('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5');
|
|
json_insert('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5')
|
|
{"a": [3, 4, "5"]}
|
|
select json_insert('{"a": 3}', '$.a[last]', 4);
|
|
json_insert('{"a": 3}', '$.a[last]', 4)
|
|
{"a": 3}
|
|
select json_insert('{"a": 3}', '$.a[last-1]', 4, '$.a[last-2]', '5');
|
|
json_insert('{"a": 3}', '$.a[last-1]', 4, '$.a[last-2]', '5')
|
|
{"a": ["5", 4, 3]}
|
|
select json_insert(cast('{"a": [1], "b": 2}' as json), '$.*[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": 1, "b": 2}' as json), '$.*[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": {"b": 3}}' as json), '$.a.*[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": {"b": [3]}}' as json), '$.a.*[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": {"b": 3}}' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": {"b": [3]}}' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[1]' as json), '$[*][1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[1]' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[1, [2], 3]' as json), '$[*][1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[1, [2], 3]' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[[1]]' as json), '$[*][1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[[1]]' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('[1, [2], 3]' as json), '$[1 to 2]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert(cast('{"a": 3}' as json), '$[1]', 6);
|
|
json_insert(cast('{"a": 3}' as json), '$[1]', 6)
|
|
[{"a": 3}, 6]
|
|
SELECT JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.a', true);
|
|
JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.a', true)
|
|
{"a": "foo", "b": [1, 2, 3]}
|
|
SELECT JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.c', 123);
|
|
JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.c', 123)
|
|
{"a": "foo", "b": [1, 2, 3], "c": 123}
|
|
SELECT JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.c', '123');
|
|
JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.c', '123')
|
|
{"a": "foo", "b": [1, 2, 3], "c": "123"}
|
|
SELECT JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.a[1]', true);
|
|
JSON_INSERT('{ "a" : "foo", "b" : [ 1, 2, 3 ] }', '$.a[1]', true)
|
|
{"a": ["foo", true], "b": [1, 2, 3]}
|
|
SELECT JSON_INSERT('{ "a" : "foo"}', '$.b', true, '$.b', false);
|
|
JSON_INSERT('{ "a" : "foo"}', '$.b', true, '$.b', false)
|
|
{"a": "foo", "b": true}
|
|
SELECT JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
true
|
|
);
|
|
JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
true
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3]}
|
|
SELECT JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
123
|
|
);
|
|
JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
123
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3], "c": 123}
|
|
SELECT JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
'123'
|
|
);
|
|
JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
'123'
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3], "c": "123"}
|
|
SELECT JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a[1]',
|
|
true
|
|
);
|
|
JSON_INSERT
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a[1]',
|
|
true
|
|
)
|
|
{"a": ["foo", true], "b": [1, 2, 3]}
|
|
SELECT JSON_INSERT
|
|
(
|
|
'{ "a" : "foo"}',
|
|
'$.b', true,
|
|
'$.b', false
|
|
);
|
|
JSON_INSERT
|
|
(
|
|
'{ "a" : "foo"}',
|
|
'$.b', true,
|
|
'$.b', false
|
|
)
|
|
{"a": "foo", "b": true}
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_ARRAY_INSERT function.
|
|
# ----------------------------------------------------------------------
|
|
select json_array_insert(NULL, '$.b[1]', 1);
|
|
json_array_insert(NULL, '$.b[1]', 1)
|
|
NULL
|
|
select json_array_insert('[1,2,3]', NULL, 1);
|
|
json_array_insert('[1,2,3]', NULL, 1)
|
|
NULL
|
|
select json_array_insert('[1,2,3]', '$[3]', NULL);
|
|
json_array_insert('[1,2,3]', '$[3]', NULL)
|
|
[1, 2, 3, null]
|
|
select json_array_insert(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
|
|
select json_array_insert(NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
|
|
select json_array_insert(NULL, NULL, NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_array_insert'
|
|
select json_array_insert('true', '$', 1);
|
|
ERROR 42000: A path expression is not a path to a cell in an array.
|
|
select json_array_insert('true', '$.a', 1);
|
|
ERROR 42000: A path expression is not a path to a cell in an array.
|
|
select json_array_insert('true', '$.a[1].b', 1);
|
|
ERROR 42000: A path expression is not a path to a cell in an array.
|
|
select json_array_insert( 'true', '$[0]', false );
|
|
json_array_insert( 'true', '$[0]', false )
|
|
true
|
|
select json_array_insert( 'true', '$[1]', false );
|
|
json_array_insert( 'true', '$[1]', false )
|
|
true
|
|
select json_array_insert( '{ "a": true }', '$.a[0]', false );
|
|
json_array_insert( '{ "a": true }', '$.a[0]', false )
|
|
{"a": true}
|
|
select json_array_insert( '{ "a": true }', '$.a[1]', false );
|
|
json_array_insert( '{ "a": true }', '$.a[1]', false )
|
|
{"a": true}
|
|
select json_array_insert( '[]', '$[0]', false );
|
|
json_array_insert( '[]', '$[0]', false )
|
|
[false]
|
|
select json_array_insert( '[]', '$[1]', false );
|
|
json_array_insert( '[]', '$[1]', false )
|
|
[false]
|
|
select json_array_insert( '[]', '$[last]', false );
|
|
json_array_insert( '[]', '$[last]', false )
|
|
[false]
|
|
select json_array_insert( '[]', '$[last-1]', false );
|
|
json_array_insert( '[]', '$[last-1]', false )
|
|
[false]
|
|
select json_array_insert( '[true]', '$[0]', false );
|
|
json_array_insert( '[true]', '$[0]', false )
|
|
[false, true]
|
|
select json_array_insert( '[true]', '$[1]', false );
|
|
json_array_insert( '[true]', '$[1]', false )
|
|
[true, false]
|
|
select json_array_insert( '[true]', '$[2]', false );
|
|
json_array_insert( '[true]', '$[2]', false )
|
|
[true, false]
|
|
select json_array_insert( '{ "a": [] }', '$.a[0]', false );
|
|
json_array_insert( '{ "a": [] }', '$.a[0]', false )
|
|
{"a": [false]}
|
|
select json_array_insert( '{ "a": [] }', '$.a[1]', false );
|
|
json_array_insert( '{ "a": [] }', '$.a[1]', false )
|
|
{"a": [false]}
|
|
select json_array_insert( '{ "a": [true] }', '$.a[0]', false );
|
|
json_array_insert( '{ "a": [true] }', '$.a[0]', false )
|
|
{"a": [false, true]}
|
|
select json_array_insert( '{ "a": [true] }', '$.a[1]', false );
|
|
json_array_insert( '{ "a": [true] }', '$.a[1]', false )
|
|
{"a": [true, false]}
|
|
select json_array_insert( '{ "a": [true] }', '$.a[2]', false );
|
|
json_array_insert( '{ "a": [true] }', '$.a[2]', false )
|
|
{"a": [true, false]}
|
|
select json_array_insert( '{ "a": [true] }', '$.a[last]', false );
|
|
json_array_insert( '{ "a": [true] }', '$.a[last]', false )
|
|
{"a": [false, true]}
|
|
select json_array_insert( '{ "a": [true] }', '$.a[last-1]', false );
|
|
json_array_insert( '{ "a": [true] }', '$.a[last-1]', false )
|
|
{"a": [false, true]}
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[0]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[0]', false )
|
|
[false, 1, 2, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[1]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[1]', false )
|
|
[1, false, 2, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[2]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[2]', false )
|
|
[1, 2, false, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[3]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[3]', false )
|
|
[1, 2, 3, false, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[4]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[4]', false )
|
|
[1, 2, 3, 4, false]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[5]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[5]', false )
|
|
[1, 2, 3, 4, false]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[last]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[last]', false )
|
|
[1, 2, 3, false, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[last-1]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[last-1]', false )
|
|
[1, 2, false, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[last-2]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[last-2]', false )
|
|
[1, false, 2, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[last-3]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[last-3]', false )
|
|
[false, 1, 2, 3, 4]
|
|
select json_array_insert( '[1, 2, 3, 4]', '$[last-4]', false );
|
|
json_array_insert( '[1, 2, 3, 4]', '$[last-4]', false )
|
|
[false, 1, 2, 3, 4]
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[0]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[0]', false )
|
|
{"a": [false, 1, 2, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[1]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[1]', false )
|
|
{"a": [1, false, 2, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[2]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[2]', false )
|
|
{"a": [1, 2, false, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[3]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[3]', false )
|
|
{"a": [1, 2, 3, false, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[4]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[4]', false )
|
|
{"a": [1, 2, 3, 4, false]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[5]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[5]', false )
|
|
{"a": [1, 2, 3, 4, false]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last]', false )
|
|
{"a": [1, 2, 3, false, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last-1]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last-1]', false )
|
|
{"a": [1, 2, false, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last-4]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.a[last-4]', false )
|
|
{"a": [false, 1, 2, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[0]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[0]', false )
|
|
{"a": [1, 2, 3, 4]}
|
|
select json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[1]', false );
|
|
json_array_insert( '{ "a": [1, 2, 3, 4] }', '$.b[1]', false )
|
|
{"a": [1, 2, 3, 4]}
|
|
select json_array_insert( '"a"', '$[0]', true );
|
|
json_array_insert( '"a"', '$[0]', true )
|
|
"a"
|
|
select json_array_insert( '[ "a" ]', '$[0][0]', true );
|
|
json_array_insert( '[ "a" ]', '$[0][0]', true )
|
|
["a"]
|
|
select json_array_insert( '"a"', '$[1]', true );
|
|
json_array_insert( '"a"', '$[1]', true )
|
|
"a"
|
|
select json_insert('[]', '$.a.*[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert('[]', '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert('[]', '$[*][1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_insert('[]', '$[1 to 2]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
select json_array_insert( '[ 1, 2, 3 ]', '$[1]', true, '$[1]', false );
|
|
json_array_insert( '[ 1, 2, 3 ]', '$[1]', true, '$[1]', false )
|
|
[1, false, true, 2, 3]
|
|
select json_array_insert( '[ 1, 2, 3 ]', '$[1]',
|
|
cast( '[ "a", "b", "c", "d" ]' as json ), '$[1][2]', false );
|
|
json_array_insert( '[ 1, 2, 3 ]', '$[1]',
|
|
cast( '[ "a", "b", "c", "d" ]' as json ), '$[1][2]', false )
|
|
[1, ["a", "b", false, "c", "d"], 2, 3]
|
|
SELECT JSON_ARRAY_INSERT(JSON_EXTRACT('[1', '$'), '$[0]', 1);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Missing a comma or ']' after an array element." at position 2.
|
|
select json_array_insert( '[ 1, 2, 3 ]', '$[1]', json_extract( '[', '$' ) );
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 1.
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_SET function.
|
|
# ----------------------------------------------------------------------
|
|
select json_set(NULL, '$.b', cast(1 as json));
|
|
json_set(NULL, '$.b', cast(1 as json))
|
|
NULL
|
|
select json_set('[1,2,3]', NULL, cast(1 as json));
|
|
json_set('[1,2,3]', NULL, cast(1 as json))
|
|
NULL
|
|
select json_set('[1,2,3]', '$[3]', NULL);
|
|
json_set('[1,2,3]', '$[3]', NULL)
|
|
[1, 2, 3, null]
|
|
select json_set(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_set'
|
|
select json_set(NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_set'
|
|
select json_set(NULL, NULL, NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_set'
|
|
SELECT JSON_SET('[', '$[0]', 0);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_set: "Invalid value." at position 1.
|
|
SELECT JSON_SET('{}', '$.name', JSON_EXTRACT('', '$'));
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0.
|
|
select json_set('[1,2,3]', '$[2]', 4);
|
|
json_set('[1,2,3]', '$[2]', 4)
|
|
[1, 2, 4]
|
|
select json_set('[1,2,3]', '$[3]', 4);
|
|
json_set('[1,2,3]', '$[3]', 4)
|
|
[1, 2, 3, 4]
|
|
select json_set('[1,2,3]', '$[10]', 4);
|
|
json_set('[1,2,3]', '$[10]', 4)
|
|
[1, 2, 3, 4]
|
|
select json_set('[]', '$[0]', 1);
|
|
json_set('[]', '$[0]', 1)
|
|
[1]
|
|
select json_set('[]', '$[1]', 1);
|
|
json_set('[]', '$[1]', 1)
|
|
[1]
|
|
select json_set('[]', '$[last]', 1);
|
|
json_set('[]', '$[last]', 1)
|
|
[1]
|
|
select json_set('[]', '$[last-1]', 1);
|
|
json_set('[]', '$[last-1]', 1)
|
|
[1]
|
|
select json_set('{"c":4}', '$.c', 5);
|
|
json_set('{"c":4}', '$.c', 5)
|
|
{"c": 5}
|
|
select json_set('{"c":4}', '$.a', 5);
|
|
json_set('{"c":4}', '$.a', 5)
|
|
{"a": 5, "c": 4}
|
|
select json_set('1', '$', 4);
|
|
json_set('1', '$', 4)
|
|
4
|
|
select json_set('1', '$[0]', 4);
|
|
json_set('1', '$[0]', 4)
|
|
4
|
|
select json_set('1', '$[1]', 4);
|
|
json_set('1', '$[1]', 4)
|
|
[1, 4]
|
|
select json_set('1', '$[10]', '4', '$[11]', 5);
|
|
json_set('1', '$[10]', '4', '$[11]', 5)
|
|
[1, "4", 5]
|
|
select json_set('1', '$[last]', 4);
|
|
json_set('1', '$[last]', 4)
|
|
4
|
|
select json_set('1', '$[last-1]', 4);
|
|
json_set('1', '$[last-1]', 4)
|
|
[4, 1]
|
|
select json_set('1', '$[last-10]', '4', '$[last-11]', 5);
|
|
json_set('1', '$[last-10]', '4', '$[last-11]', 5)
|
|
[5, "4", 1]
|
|
select json_set('[1,2,3]', '$[2][0]', 4);
|
|
json_set('[1,2,3]', '$[2][0]', 4)
|
|
[1, 2, 4]
|
|
select json_set('[1,2,3]', '$[2][2]', 4);
|
|
json_set('[1,2,3]', '$[2][2]', 4)
|
|
[1, 2, [3, 4]]
|
|
select json_set('[1,2,3]', '$[2][last]', 4);
|
|
json_set('[1,2,3]', '$[2][last]', 4)
|
|
[1, 2, 4]
|
|
select json_set('[1,2,3]', '$[2][last-2]', 4);
|
|
json_set('[1,2,3]', '$[2][last-2]', 4)
|
|
[1, 2, [4, 3]]
|
|
select json_set('{"a": 3}', '$.a[0]', 4);
|
|
json_set('{"a": 3}', '$.a[0]', 4)
|
|
{"a": 4}
|
|
select json_set('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5');
|
|
json_set('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5')
|
|
{"a": [3, 4, "5"]}
|
|
select json_set('{"a": 3}', '$.a[last]', 4);
|
|
json_set('{"a": 3}', '$.a[last]', 4)
|
|
{"a": 4}
|
|
select json_set('{"a": 3}', '$.a[last-1]', 4, '$.a[last-2]', '5');
|
|
json_set('{"a": 3}', '$.a[last-1]', 4, '$.a[last-2]', '5')
|
|
{"a": ["5", 4, 3]}
|
|
select json_set(cast('{"a": {"b": [3]}}' as json), '$**[1]', 6);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_SET('[1,2,3]', '$[*]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_SET('[1,2,3]', '$[1 to 2]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_SET('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
JSON_OBJECT());
|
|
JSON_SET('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
JSON_OBJECT())
|
|
{"a": {}, "b": [1, 2, 3]}
|
|
SELECT JSON_SET('{ "a" : "foo"}', '$.a',
|
|
JSON_OBJECT( 'b', false ), '$.a.c', true);
|
|
JSON_SET('{ "a" : "foo"}', '$.a',
|
|
JSON_OBJECT( 'b', false ), '$.a.c', true)
|
|
{"a": {"b": false, "c": true}}
|
|
select json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
cast('{}' as json));
|
|
json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
cast('{}' as json))
|
|
{"a": {}, "b": [1, 2, 3]}
|
|
select json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
cast('[true, false]' as json));
|
|
json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
cast('[true, false]' as json))
|
|
{"a": "foo", "b": [1, 2, 3], "c": [true, false]}
|
|
select json_set('1', '$[3]', 2);
|
|
json_set('1', '$[3]', 2)
|
|
[1, 2]
|
|
select json_set('{ "a" : "foo"}', '$.a',
|
|
cast('{"b": false}' as json), '$.a.c', true);
|
|
json_set('{ "a" : "foo"}', '$.a',
|
|
cast('{"b": false}' as json), '$.a.c', true)
|
|
{"a": {"b": false, "c": true}}
|
|
SELECT JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
JSON_OBJECT()
|
|
);
|
|
JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a',
|
|
JSON_OBJECT()
|
|
)
|
|
{"a": {}, "b": [1, 2, 3]}
|
|
SELECT JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
JSON_ARRAY( true, false )
|
|
);
|
|
JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
JSON_ARRAY( true, false )
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3], "c": [true, false]}
|
|
SELECT JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
JSON_ARRAY( CAST( 'true' AS JSON ), CAST( 'false' AS JSON ) )
|
|
);
|
|
JSON_SET
|
|
(
|
|
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
JSON_ARRAY( CAST( 'true' AS JSON ), CAST( 'false' AS JSON ) )
|
|
)
|
|
{"a": "foo", "b": [1, 2, 3], "c": [true, false]}
|
|
SELECT JSON_SET
|
|
(
|
|
'1',
|
|
'$[3]',
|
|
2
|
|
);
|
|
JSON_SET
|
|
(
|
|
'1',
|
|
'$[3]',
|
|
2
|
|
)
|
|
[1, 2]
|
|
SELECT JSON_SET
|
|
(
|
|
'{ "a" : "foo"}',
|
|
'$.a', JSON_OBJECT( 'b', false ),
|
|
'$.a.c', true
|
|
);
|
|
JSON_SET
|
|
(
|
|
'{ "a" : "foo"}',
|
|
'$.a', JSON_OBJECT( 'b', false ),
|
|
'$.a.c', true
|
|
)
|
|
{"a": {"b": false, "c": true}}
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_REPLACE function.
|
|
# ----------------------------------------------------------------------
|
|
select json_replace(NULL, '$.b', cast(1 as json));
|
|
json_replace(NULL, '$.b', cast(1 as json))
|
|
NULL
|
|
select json_replace('[1,2,3]', NULL, cast(1 as json));
|
|
json_replace('[1,2,3]', NULL, cast(1 as json))
|
|
NULL
|
|
select json_replace('[1,2,3]', '$[2]', NULL);
|
|
json_replace('[1,2,3]', '$[2]', NULL)
|
|
[1, 2, null]
|
|
select json_replace(NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_replace'
|
|
select json_replace(NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_replace'
|
|
select json_replace(NULL, NULL, NULL, NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_replace'
|
|
select json_replace('[1,2,3]', '$[2]', 4);
|
|
json_replace('[1,2,3]', '$[2]', 4)
|
|
[1, 2, 4]
|
|
select json_replace('[1,2,3]', '$[3]', 4);
|
|
json_replace('[1,2,3]', '$[3]', 4)
|
|
[1, 2, 3]
|
|
select json_replace('[1,2,3]', '$[10]', 4);
|
|
json_replace('[1,2,3]', '$[10]', 4)
|
|
[1, 2, 3]
|
|
select json_replace('[1,2,3]', '$[last]', 4);
|
|
json_replace('[1,2,3]', '$[last]', 4)
|
|
[1, 2, 4]
|
|
select json_replace('[1,2,3]', '$[last-1]', 4);
|
|
json_replace('[1,2,3]', '$[last-1]', 4)
|
|
[1, 4, 3]
|
|
select json_replace('[1,2,3]', '$[last-10]', 4);
|
|
json_replace('[1,2,3]', '$[last-10]', 4)
|
|
[1, 2, 3]
|
|
select json_replace('{"c":4}', '$.c', 5);
|
|
json_replace('{"c":4}', '$.c', 5)
|
|
{"c": 5}
|
|
select json_replace('{"c":4}', '$.a', 5);
|
|
json_replace('{"c":4}', '$.a', 5)
|
|
{"c": 4}
|
|
select json_replace('1', '$', 4);
|
|
json_replace('1', '$', 4)
|
|
4
|
|
select json_replace('1', '$[0]', 4);
|
|
json_replace('1', '$[0]', 4)
|
|
4
|
|
select json_replace('1', '$[1]', 4);
|
|
json_replace('1', '$[1]', 4)
|
|
1
|
|
select json_replace('1', '$[10]', '4', '$[11]', 5);
|
|
json_replace('1', '$[10]', '4', '$[11]', 5)
|
|
1
|
|
select json_replace('[1,2,3]', '$[2][0]', 4);
|
|
json_replace('[1,2,3]', '$[2][0]', 4)
|
|
[1, 2, 4]
|
|
select json_replace('[1,2,3]', '$[2][2]', 4);
|
|
json_replace('[1,2,3]', '$[2][2]', 4)
|
|
[1, 2, 3]
|
|
select json_replace('{"a": 3}', '$.a[0]', 4);
|
|
json_replace('{"a": 3}', '$.a[0]', 4)
|
|
{"a": 4}
|
|
select json_replace('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5');
|
|
json_replace('{"a": 3}', '$.a[1]', 4, '$.a[2]', '5')
|
|
{"a": 3}
|
|
SELECT JSON_REPLACE('[1,2,3]', '$**.a', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_REPLACE('[1,2,3]', '$[*]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_REPLACE('[1,2,3]', '$[1 to 2]', 4);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
true);
|
|
JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.c',
|
|
true)
|
|
{"a": "foo", "b": [1, 2, 3]}
|
|
SELECT JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a[0]',
|
|
true);
|
|
JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.a[0]',
|
|
true)
|
|
{"a": true, "b": [1, 2, 3]}
|
|
SELECT JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.b[5]',
|
|
true);
|
|
JSON_REPLACE('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
|
'$.b[5]',
|
|
true)
|
|
{"a": "foo", "b": [1, 2, 3]}
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_ARRAY function.
|
|
# ----------------------------------------------------------------------
|
|
select json_array(NULL, '$.b', cast(1 as json));
|
|
json_array(NULL, '$.b', cast(1 as json))
|
|
[null, "$.b", 1]
|
|
select json_array('[1,2,3]', NULL, cast(1 as json));
|
|
json_array('[1,2,3]', NULL, cast(1 as json))
|
|
["[1,2,3]", null, 1]
|
|
select json_array('[1,2,3]', '$[3]', NULL);
|
|
json_array('[1,2,3]', '$[3]', NULL)
|
|
["[1,2,3]", "$[3]", null]
|
|
select json_array();
|
|
json_array()
|
|
[]
|
|
select json_array(3.14);
|
|
json_array(3.14)
|
|
[3.14]
|
|
select json_array('[1,2,3]');
|
|
json_array('[1,2,3]')
|
|
["[1,2,3]"]
|
|
select json_array(cast('[1,2,3]' as json));
|
|
json_array(cast('[1,2,3]' as json))
|
|
[[1, 2, 3]]
|
|
select json_array(1,2,3);
|
|
json_array(1,2,3)
|
|
[1, 2, 3]
|
|
select json_array(b'0', b'1', b'10');
|
|
json_array(b'0', b'1', b'10')
|
|
["base64:type15:AA==", "base64:type15:AQ==", "base64:type15:Ag=="]
|
|
SELECT JSON_ARRAY();
|
|
JSON_ARRAY()
|
|
[]
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_OBJECT function.
|
|
# ----------------------------------------------------------------------
|
|
select json_object( 'a' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_object'
|
|
select json_object( 'a', 1, 'b' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_object'
|
|
select json_object( null, 1 );
|
|
ERROR 22032: JSON documents may not contain NULL member names.
|
|
select json_object();
|
|
json_object()
|
|
{}
|
|
select json_object( 'a', null );
|
|
json_object( 'a', null )
|
|
{"a": null}
|
|
select json_object( 'a', 1 );
|
|
json_object( 'a', 1 )
|
|
{"a": 1}
|
|
select json_object( 'a', 1, 'b', 'foo' );
|
|
json_object( 'a', 1, 'b', 'foo' )
|
|
{"a": 1, "b": "foo"}
|
|
select json_object( 'a', 1, 'b', 'foo', 'c', cast( '{ "d": "wibble" }' as json ) );
|
|
json_object( 'a', 1, 'b', 'foo', 'c', cast( '{ "d": "wibble" }' as json ) )
|
|
{"a": 1, "b": "foo", "c": {"d": "wibble"}}
|
|
select json_object( 'a', true, 'b', false, 'c', cast( 'null' as json) );
|
|
json_object( 'a', true, 'b', false, 'c', cast( 'null' as json) )
|
|
{"a": true, "b": false, "c": null}
|
|
select json_valid( json_object( '"a"', 1 ) );
|
|
json_valid( json_object( '"a"', 1 ) )
|
|
1
|
|
select json_object( REPEAT('a', 64 * 1024), 1 );
|
|
json_object( REPEAT('a', 64 * 1024), 1 )
|
|
{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 1}
|
|
select json_object(json_array(), json_array());
|
|
json_object(json_array(), json_array())
|
|
{"[]": []}
|
|
select json_object( cast(json_array() as char), json_array());
|
|
json_object( cast(json_array() as char), json_array())
|
|
{"[]": []}
|
|
select json_object( 1, json_array());
|
|
json_object( 1, json_array())
|
|
{"1": []}
|
|
select json_object( cast(1 as char), json_array());
|
|
json_object( cast(1 as char), json_array())
|
|
{"1": []}
|
|
SELECT JSON_OBJECT('a', 1, 'b', 2, 'a', 3);
|
|
JSON_OBJECT('a', 1, 'b', 2, 'a', 3)
|
|
{"a": 3, "b": 2}
|
|
SELECT JSON_OBJECT();
|
|
JSON_OBJECT()
|
|
{}
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_SEARCH function.
|
|
# ----------------------------------------------------------------------
|
|
select json_search();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_search'
|
|
select json_search( '{ "a": true }' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_search'
|
|
select json_search( '{ "a": true }', 'one' );
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_search'
|
|
select json_search( null, 'one', 'foo' );
|
|
json_search( null, 'one', 'foo' )
|
|
NULL
|
|
select json_search( '{ "a": "foo" }', null, 'foo' );
|
|
json_search( '{ "a": "foo" }', null, 'foo' )
|
|
NULL
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', null, null );
|
|
json_search( '{ "a": "foo" }', 'one', 'foo', null, null )
|
|
NULL
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', null, '$.a', null );
|
|
json_search( '{ "a": "foo" }', 'one', 'foo', null, '$.a', null )
|
|
NULL
|
|
select json_search( '{ "a": "foo" }', 'twof', 'foo' );
|
|
ERROR 42000: The oneOrAll argument to json_search may take these values: 'one' or 'all'.
|
|
select json_search( '{ "a": "foo" }', 'two', 'foo' );
|
|
ERROR 42000: The oneOrAll argument to json_search may take these values: 'one' or 'all'.
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', 'ab' );
|
|
ERROR HY000: Incorrect arguments to ESCAPE
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', null, '$a' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
select json_search( '{ "a": "foo" }', 'all', 'foo', null, '$.a', '$b' );
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 1.
|
|
select json_search(a, b, c);
|
|
ERROR 42S22: Unknown column 'a' in 'field list'
|
|
select json_search( '{ "a": "foobar" }', 'one', 'foo%' );
|
|
json_search( '{ "a": "foobar" }', 'one', 'foo%' )
|
|
"$.a"
|
|
select json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'one', 'foo%' );
|
|
json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'one', 'foo%' )
|
|
"$.a"
|
|
select json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'all', 'foo%' );
|
|
json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'all', 'foo%' )
|
|
["$.a", "$.c[1]"]
|
|
select json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'all', 'f__us' );
|
|
json_search( '{ "a": "foobar", "b": "focus", "c": [ "arm", "foot", "shoulder" ] }', 'all', 'f__us' )
|
|
"$.b"
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'all', 'foo%', null, '$.a' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'all', 'foo%', null, '$.a' )
|
|
["$.a[0]", "$.a[2]"]
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'all', 'foo%', null, '$.a', '$.b' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'all', 'foo%', null, '$.a', '$.b' )
|
|
["$.a[0]", "$.a[2]", "$.b"]
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'one', 'foo%', null, '$.a', '$.b' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'one', 'foo%', null, '$.a', '$.b' )
|
|
"$.a[0]"
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'ALL', 'foo%', null, '$.a' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'ALL', 'foo%', null, '$.a' )
|
|
["$.a[0]", "$.a[2]"]
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'aLl', 'foo%', null, '$.a', '$.b' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'aLl', 'foo%', null, '$.a', '$.b' )
|
|
["$.a[0]", "$.a[2]", "$.b"]
|
|
select json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'ONE', 'foo%', null, '$.a', '$.b' );
|
|
json_search( '{ "a": [ "foolish", "folly", "foolhardy" ], "b" : "fool" }', 'ONE', 'foo%', null, '$.a', '$.b' )
|
|
"$.a[0]"
|
|
select json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "fool" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "food"} } ]',
|
|
'all',
|
|
'foo%',
|
|
null,
|
|
'$**.c'
|
|
);
|
|
json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "fool" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "food"} } ]',
|
|
'all',
|
|
'foo%',
|
|
null,
|
|
'$**.c'
|
|
)
|
|
["$[0].a.b.c", "$[2].c.c"]
|
|
select json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$**.c'
|
|
);
|
|
json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$**.c'
|
|
)
|
|
["$[0].a.b.c", "$[1].b.c", "$[2].c.c"]
|
|
select json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%e',
|
|
null,
|
|
'$**.c'
|
|
);
|
|
json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%e',
|
|
null,
|
|
'$**.c'
|
|
)
|
|
["$[0].a.b.c", "$[2].c.c"]
|
|
select json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$[*].c'
|
|
);
|
|
json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, { "b": { "c": "shoulder" } }, { "c": { "c": "shoe"} } ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$[*].c'
|
|
)
|
|
"$[2].c.c"
|
|
select json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, [ { "b": { "c": "shout" } }, { "c": { "c": "shoe"} } ] ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$[1]**.c'
|
|
);
|
|
json_search
|
|
(
|
|
'[ { "a": { "b": { "c": "showtime" } } }, [ { "b": { "c": "shout" } }, { "c": { "c": "shoe"} } ] ]',
|
|
'all',
|
|
'sho%',
|
|
null,
|
|
'$[1]**.c'
|
|
)
|
|
["$[1][0].b.c", "$[1][1].c.c"]
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo%bar' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo%bar' )
|
|
["$[0]", "$[1]"]
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar' )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|' )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]' )
|
|
NULL
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]', '$[1]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]', '$[1]' )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]', '$[1]', '$[2]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]', '$[1]', '$[2]' )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null, '$[0]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null, '$[0]' )
|
|
NULL
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null, '$[1]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo\%bar', null, '$[1]' )
|
|
"$[1]"
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[0]' )
|
|
NULL
|
|
select json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[1]' );
|
|
json_search( '[ "footbar", "foo%bar" ]', 'all', 'foo|%bar', '|', '$[1]' )
|
|
"$[1]"
|
|
select json_search( '[ "abc", "ABC" ]', 'all', 'aBc' );
|
|
json_search( '[ "abc", "ABC" ]', 'all', 'aBc' )
|
|
NULL
|
|
select json_search( '[ "abc", "ABC" ]', 'all', 'abc' );
|
|
json_search( '[ "abc", "ABC" ]', 'all', 'abc' )
|
|
"$[0]"
|
|
select json_search( '[ "abc", "ABC" ]', 'all', 'ABC' );
|
|
json_search( '[ "abc", "ABC" ]', 'all', 'ABC' )
|
|
"$[1]"
|
|
select json_search( '[ 10, "10", 1.0, "1.0" ]', 'all', '1%' );
|
|
json_search( '[ 10, "10", 1.0, "1.0" ]', 'all', '1%' )
|
|
["$[1]", "$[3]"]
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'one',
|
|
'123'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
|
'one',
|
|
'123'
|
|
)
|
|
NULL
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : "123", "b" : [ 123, "789", "123", "456", "123" ] }',
|
|
'one',
|
|
'123',
|
|
null,
|
|
'$.b'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : "123", "b" : [ 123, "789", "123", "456", "123" ] }',
|
|
'one',
|
|
'123',
|
|
null,
|
|
'$.b'
|
|
)
|
|
"$.b[2]"
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : "123", "b" : { "key" : "123" } }',
|
|
'one',
|
|
'123'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : "123", "b" : { "key" : "123" } }',
|
|
'one',
|
|
'123'
|
|
)
|
|
"$.a"
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234" } }',
|
|
'one',
|
|
'123%'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234" } }',
|
|
'one',
|
|
'123%'
|
|
)
|
|
"$.b.key"
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234", "c": "directorysub%directoryabc" } }',
|
|
'one',
|
|
'dir%torysub@%dir%',
|
|
'@'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234", "c": "directorysub%directoryabc" } }',
|
|
'one',
|
|
'dir%torysub@%dir%',
|
|
'@'
|
|
)
|
|
"$.b.c"
|
|
SELECT JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234" } }',
|
|
'one',
|
|
'123%',
|
|
null,
|
|
'$.c'
|
|
);
|
|
JSON_SEARCH
|
|
(
|
|
'{ "a" : "1243", "b" : { "key" : "1234" } }',
|
|
'one',
|
|
'123%',
|
|
null,
|
|
'$.c'
|
|
)
|
|
NULL
|
|
SELECT JSON_UNQUOTE
|
|
(
|
|
JSON_SEARCH
|
|
(
|
|
'{ "onepotato": "foot", "one potato": "food" , "one \\"potato": "fool" }',
|
|
'all',
|
|
'food'
|
|
)
|
|
);
|
|
JSON_UNQUOTE
|
|
(
|
|
JSON_SEARCH
|
|
(
|
|
'{ "onepotato": "foot", "one potato": "food" , "one \\"potato": "fool" }',
|
|
'all',
|
|
'food'
|
|
)
|
|
)
|
|
$."one potato"
|
|
select json_type(case (null is null) when 1 then
|
|
cast('null' as json) else
|
|
cast('[1,2,3]' as json) end);
|
|
json_type(case (null is null) when 1 then
|
|
cast('null' as json) else
|
|
cast('[1,2,3]' as json) end)
|
|
NULL
|
|
select json_type(case (null is not null) when 1 then
|
|
cast('null' as json) else
|
|
cast('[1,2,3]' as json) end);
|
|
json_type(case (null is not null) when 1 then
|
|
cast('null' as json) else
|
|
cast('[1,2,3]' as json) end)
|
|
ARRAY
|
|
select json_type( if(null is null,
|
|
cast('null' as json),
|
|
cast('[1,2,3]' as json)) );
|
|
json_type( if(null is null,
|
|
cast('null' as json),
|
|
cast('[1,2,3]' as json)) )
|
|
NULL
|
|
select json_type( if(null is not null,
|
|
cast('null' as json),
|
|
cast('[1,2,3]' as json)));
|
|
json_type( if(null is not null,
|
|
cast('null' as json),
|
|
cast('[1,2,3]' as json)))
|
|
ARRAY
|
|
select cast(json_extract(cast(concat('[', cast('["A",2]' as json), ']') as json),
|
|
'$[0][1]') as char) = 2;
|
|
cast(json_extract(cast(concat('[', cast('["A",2]' as json), ']') as json),
|
|
'$[0][1]') as char) = 2
|
|
1
|
|
# ----------------------------------------------------------------------
|
|
# Test of aggregate function MAX, MIN.
|
|
# ----------------------------------------------------------------------
|
|
select max(cast('[1,2,3]' as json));
|
|
max(cast('[1,2,3]' as json))
|
|
[1, 2, 3]
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_QUOTE, JSON_UNQUOTE
|
|
# ----------------------------------------------------------------------
|
|
select json_quote();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_quote'
|
|
select json_quote('abc', 'def');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_quote'
|
|
select json_quote(NULL, 'def');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_quote'
|
|
select json_quote('abc', NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_quote'
|
|
select json_unquote();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_unquote'
|
|
select json_unquote('"abc"', '"def"');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_unquote'
|
|
select json_unquote(NULL, 'def');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_unquote'
|
|
select json_unquote('"abc"', NULL);
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'json_unquote'
|
|
select json_quote(NULL);
|
|
json_quote(NULL)
|
|
NULL
|
|
select json_unquote(NULL);
|
|
json_unquote(NULL)
|
|
NULL
|
|
select json_quote('abc');
|
|
json_quote('abc')
|
|
"abc"
|
|
select json_quote(convert('abc' using ascii));
|
|
json_quote(convert('abc' using ascii))
|
|
"abc"
|
|
select json_quote(convert('abc' using latin1));
|
|
json_quote(convert('abc' using latin1))
|
|
"abc"
|
|
select json_quote(convert('abc' using utf8));
|
|
json_quote(convert('abc' using utf8))
|
|
"abc"
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
select json_quote(convert('abc' using utf8mb4));
|
|
json_quote(convert('abc' using utf8mb4))
|
|
"abc"
|
|
select json_unquote('abc');
|
|
json_unquote('abc')
|
|
abc
|
|
select json_unquote('"abc"');
|
|
json_unquote('"abc"')
|
|
abc
|
|
select json_unquote(convert('"abc"' using ascii));
|
|
json_unquote(convert('"abc"' using ascii))
|
|
abc
|
|
select json_unquote(convert('"abc"' using latin1));
|
|
json_unquote(convert('"abc"' using latin1))
|
|
abc
|
|
select json_unquote(convert('"abc"' using utf8));
|
|
json_unquote(convert('"abc"' using utf8))
|
|
abc
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
select json_unquote(convert('"abc"' using utf8mb4));
|
|
json_unquote(convert('"abc"' using utf8mb4))
|
|
abc
|
|
select json_quote('"');
|
|
json_quote('"')
|
|
"\""
|
|
select json_unquote('"');
|
|
json_unquote('"')
|
|
"
|
|
select json_quote(123);
|
|
ERROR HY000: Incorrect type for argument 1 in function json_quote.
|
|
select json_unquote(123);
|
|
ERROR HY000: Incorrect type for argument 1 in function json_unquote.
|
|
select json_unquote('""');
|
|
json_unquote('""')
|
|
|
|
select char_length(json_unquote('""'));
|
|
char_length(json_unquote('""'))
|
|
0
|
|
select json_unquote('"" ');
|
|
json_unquote('"" ')
|
|
""
|
|
select json_unquote(cast(json_quote('abc') as json));
|
|
json_unquote(cast(json_quote('abc') as json))
|
|
abc
|
|
select cast('{"abc": "foo"}' as json);
|
|
cast('{"abc": "foo"}' as json)
|
|
{"abc": "foo"}
|
|
select json_unquote(cast('{"abc": "foo"}' as json));
|
|
json_unquote(cast('{"abc": "foo"}' as json))
|
|
{"abc": "foo"}
|
|
select json_extract(cast('{"abc": "foo"}' as json), '$.abc');
|
|
json_extract(cast('{"abc": "foo"}' as json), '$.abc')
|
|
"foo"
|
|
select json_unquote(json_extract(cast('{"abc": "foo"}' as json), '$.abc'));
|
|
json_unquote(json_extract(cast('{"abc": "foo"}' as json), '$.abc'))
|
|
foo
|
|
select json_unquote('["a", "b", "c"]');
|
|
json_unquote('["a", "b", "c"]')
|
|
["a", "b", "c"]
|
|
select json_unquote(cast('["a", "b", "c"]' as json));
|
|
json_unquote(cast('["a", "b", "c"]' as json))
|
|
["a", "b", "c"]
|
|
select charset(json_unquote('"abc"'));
|
|
charset(json_unquote('"abc"'))
|
|
utf8mb4
|
|
select json_quote(convert(X'e68891' using utf8));
|
|
json_quote(convert(X'e68891' using utf8))
|
|
"我"
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
select json_quote(convert(X'e68891' using utf8mb4));
|
|
json_quote(convert(X'e68891' using utf8mb4))
|
|
"我"
|
|
select cast(json_quote(convert(X'e68891' using utf8)) as json);
|
|
cast(json_quote(convert(X'e68891' using utf8)) as json)
|
|
"我"
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
select json_unquote(convert(X'e68891' using utf8));
|
|
json_unquote(convert(X'e68891' using utf8))
|
|
我
|
|
Warnings:
|
|
Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
|
|
select json_quote(json_quote(json_quote('abc')));
|
|
json_quote(json_quote(json_quote('abc')))
|
|
"\"\\\"abc\\\"\""
|
|
select json_unquote(json_unquote(json_unquote( # long round trip of it
|
|
json_quote(json_quote(json_quote('abc'))))));
|
|
json_unquote(json_unquote(json_unquote( # long round trip of it
|
|
json_quote(json_quote(json_quote('abc'))))))
|
|
abc
|
|
select cast(cast('2015-01-15 23:24:25' as datetime) as json);
|
|
cast(cast('2015-01-15 23:24:25' as datetime) as json)
|
|
"2015-01-15 23:24:25.000000"
|
|
select json_unquote(cast(cast('2015-01-15 23:24:25' as datetime) as json));
|
|
json_unquote(cast(cast('2015-01-15 23:24:25' as datetime) as json))
|
|
2015-01-15 23:24:25.000000
|
|
select cast(st_geomfromtext('point(1 1)') as json);
|
|
cast(st_geomfromtext('point(1 1)') as json)
|
|
{"type": "Point", "coordinates": [1.0, 1.0]}
|
|
select json_unquote(cast(st_geomfromtext('point(1 1)') as json));
|
|
json_unquote(cast(st_geomfromtext('point(1 1)') as json))
|
|
{"type": "Point", "coordinates": [1.0, 1.0]}
|
|
SELECT JSON_UNQUOTE( '"abc"' );
|
|
JSON_UNQUOTE( '"abc"' )
|
|
abc
|
|
SELECT JSON_UNQUOTE( '"abc' );
|
|
JSON_UNQUOTE( '"abc' )
|
|
"abc
|
|
SELECT JSON_UNQUOTE( 123 );
|
|
ERROR HY000: Incorrect type for argument 1 in function json_unquote.
|
|
SELECT JSON_UNQUOTE
|
|
( CAST( CAST( '"abc"' AS JSON ) AS CHAR ) );
|
|
JSON_UNQUOTE
|
|
( CAST( CAST( '"abc"' AS JSON ) AS CHAR ) )
|
|
abc
|
|
SELECT JSON_UNQUOTE
|
|
(
|
|
CAST(
|
|
JSON_EXTRACT( '{ "userName" : "fred" }', '$.userName' )
|
|
AS CHAR
|
|
)
|
|
) = 'fred';
|
|
JSON_UNQUOTE
|
|
(
|
|
CAST(
|
|
JSON_EXTRACT( '{ "userName" : "fred" }', '$.userName' )
|
|
AS CHAR
|
|
)
|
|
) = 'fred'
|
|
1
|
|
SELECT
|
|
CAST(
|
|
JSON_EXTRACT( '{ "userName" : "fred" }', '$.userName' )
|
|
AS CHAR
|
|
) = 'fred';
|
|
CAST(
|
|
JSON_EXTRACT( '{ "userName" : "fred" }', '$.userName' )
|
|
AS CHAR
|
|
) = 'fred'
|
|
0
|
|
SELECT JSON_QUOTE( 'abc' );
|
|
JSON_QUOTE( 'abc' )
|
|
"abc"
|
|
SELECT JSON_QUOTE( 123 );
|
|
ERROR HY000: Incorrect type for argument 1 in function json_quote.
|
|
SELECT CAST( JSON_QUOTE( '123' ) AS JSON );
|
|
CAST( JSON_QUOTE( '123' ) AS JSON )
|
|
"123"
|
|
# ----------------------------------------------------------------------
|
|
# Test of JSON_CONTAINS
|
|
# ----------------------------------------------------------------------
|
|
# should give NULL
|
|
select json_contains(NULL, NULL);
|
|
json_contains(NULL, NULL)
|
|
NULL
|
|
select json_contains(cast('{"a": 1, "b": 2}' as json), NULL);
|
|
json_contains(cast('{"a": 1, "b": 2}' as json), NULL)
|
|
NULL
|
|
select json_contains(NULL, cast('null' as json));
|
|
json_contains(NULL, cast('null' as json))
|
|
NULL
|
|
select json_contains(cast('[1]' as json), cast('[1]' as json), NULL);
|
|
json_contains(cast('[1]' as json), cast('[1]' as json), NULL)
|
|
NULL
|
|
# should give 0:
|
|
select json_contains(cast(3.14 as json), cast(3 as json));
|
|
json_contains(cast(3.14 as json), cast(3 as json))
|
|
0
|
|
# should give 0: not at top level
|
|
select json_contains(cast('{"a": {"b": 7}}' as json), cast('{"b": 7}' as json));
|
|
json_contains(cast('{"a": {"b": 7}}' as json), cast('{"b": 7}' as json))
|
|
0
|
|
# but path argument will fix it:
|
|
select json_contains(cast('{"a": {"b": 7}}' as json), cast('{"b": 7}' as json), '$.a');
|
|
json_contains(cast('{"a": {"b": 7}}' as json), cast('{"b": 7}' as json), '$.a')
|
|
1
|
|
# but arrays "introspect"
|
|
select json_contains(cast('[1,[2.0, 3.0]]' as json), cast('[2.0]' as json));
|
|
json_contains(cast('[1,[2.0, 3.0]]' as json), cast('[2.0]' as json))
|
|
1
|
|
select json_contains(cast('[1, 2, [3, [4, 5]], 6, 7]' as json), cast('5' as json));
|
|
json_contains(cast('[1, 2, [3, [4, 5]], 6, 7]' as json), cast('5' as json))
|
|
1
|
|
# should give 0: just a key
|
|
select json_contains(cast('{"a": 1, "b": 2}' as json), cast('"a"' as json));
|
|
json_contains(cast('{"a": 1, "b": 2}' as json), cast('"a"' as json))
|
|
0
|
|
# should give 0: one candidate element doesn't match
|
|
select json_contains(cast('[1]' as json), cast('[1,2]' as json));
|
|
json_contains(cast('[1]' as json), cast('[1,2]' as json))
|
|
0
|
|
# should all give 1
|
|
select json_contains(cast('null' as json), cast('null' as json));
|
|
json_contains(cast('null' as json), cast('null' as json))
|
|
1
|
|
# simple object subset
|
|
select json_contains(cast('{"a": 1, "b": 2}' as json), cast( '{"a": 1}' as json));
|
|
json_contains(cast('{"a": 1, "b": 2}' as json), cast( '{"a": 1}' as json))
|
|
1
|
|
# simple vector subset
|
|
select json_contains(cast('[1, 2, 3]' as json), cast('[1, 3]' as json));
|
|
json_contains(cast('[1, 2, 3]' as json), cast('[1, 3]' as json))
|
|
1
|
|
# auto-wrap, should give 1
|
|
select json_contains(cast('[1, 2, 3]' as json), cast(3 as json));
|
|
json_contains(cast('[1, 2, 3]' as json), cast(3 as json))
|
|
1
|
|
# ok even with nested cast off elements
|
|
select json_contains(cast('{"person": {"id": 1, "country": "norway"}}' as json),
|
|
cast('{"person": {"country": "norway"}}' as json));
|
|
json_contains(cast('{"person": {"id": 1, "country": "norway"}}' as json),
|
|
cast('{"person": {"country": "norway"}}' as json))
|
|
1
|
|
# vector reordering and duplicates is ok
|
|
select json_contains(cast('[1,3,5]' as json), cast('[5,3,1,5]' as json));
|
|
json_contains(cast('[1,3,5]' as json), cast('[5,3,1,5]' as json))
|
|
1
|
|
# ok even with more elts in candidate than in doc
|
|
select json_contains(cast('[{"b": 4, "a":7}]' as json), cast('[{"a":7},{"b":4}]' as json));
|
|
json_contains(cast('[{"b": 4, "a":7}]' as json), cast('[{"a":7},{"b":4}]' as json))
|
|
1
|
|
select json_contains(cast('[{"b": 4, "a":7}, 5]' as json), cast('[5, {"a":7, "b":4}]' as json));
|
|
json_contains(cast('[{"b": 4, "a":7}, 5]' as json), cast('[5, {"a":7, "b":4}]' as json))
|
|
1
|
|
# ok even with mixed number types that compare equal
|
|
select json_contains(cast('[{"b": 4, "a":7}, 5.0]' as json), cast('[5, {"a":7.0E0, "b":4}]' as json));
|
|
json_contains(cast('[{"b": 4, "a":7}, 5.0]' as json), cast('[5, {"a":7.0E0, "b":4}]' as json))
|
|
1
|
|
select json_contains( '{"customer": "cust3"}', '{"customer": "cust1"}' );
|
|
json_contains( '{"customer": "cust3"}', '{"customer": "cust1"}' )
|
|
0
|
|
SELECT JSON_CONTAINS('[null,1,[2,3],true,false]', '[null,1,[3],false]');
|
|
JSON_CONTAINS('[null,1,[2,3],true,false]', '[null,1,[3],false]')
|
|
1
|
|
SELECT JSON_CONTAINS('[null,1,[2,3],true,false]', '[null,1,[4],false]');
|
|
JSON_CONTAINS('[null,1,[2,3],true,false]', '[null,1,[4],false]')
|
|
0
|
|
SELECT JSON_CONTAINS('[true,false]', '[[true]]');
|
|
JSON_CONTAINS('[true,false]', '[[true]]')
|
|
0
|
|
SELECT JSON_CONTAINS('[1,2]', '[[1]]');
|
|
JSON_CONTAINS('[1,2]', '[[1]]')
|
|
0
|
|
SELECT JSON_CONTAINS('[1,2]', '1', '$.abc');
|
|
JSON_CONTAINS('[1,2]', '1', '$.abc')
|
|
NULL
|
|
SELECT JSON_CONTAINS('{}', '{}');
|
|
JSON_CONTAINS('{}', '{}')
|
|
1
|
|
SELECT JSON_CONTAINS('{}', '{"a":1}');
|
|
JSON_CONTAINS('{}', '{"a":1}')
|
|
0
|
|
SELECT JSON_CONTAINS('{"a":1}', '{"a":1,"b":2}');
|
|
JSON_CONTAINS('{"a":1}', '{"a":1,"b":2}')
|
|
0
|
|
SELECT JSON_CONTAINS
|
|
(
|
|
CAST('[1, 4, 6]' AS JSON),
|
|
CAST('[1, 6]' AS JSON)
|
|
);
|
|
JSON_CONTAINS
|
|
(
|
|
CAST('[1, 4, 6]' AS JSON),
|
|
CAST('[1, 6]' AS JSON)
|
|
)
|
|
1
|
|
SELECT JSON_CONTAINS
|
|
(
|
|
CAST('{"person": {"id": 1, "country": "norway"}}' AS JSON),
|
|
CAST('{"person": {"country": "norway"}}' AS JSON)
|
|
);
|
|
JSON_CONTAINS
|
|
(
|
|
CAST('{"person": {"id": 1, "country": "norway"}}' AS JSON),
|
|
CAST('{"person": {"country": "norway"}}' AS JSON)
|
|
)
|
|
1
|
|
SELECT JSON_CONTAINS
|
|
(
|
|
CAST('[1,3,5]' AS JSON),
|
|
CAST('[5,3,1,5]' AS JSON)
|
|
);
|
|
JSON_CONTAINS
|
|
(
|
|
CAST('[1,3,5]' AS JSON),
|
|
CAST('[5,3,1,5]' AS JSON)
|
|
)
|
|
1
|
|
SELECT JSON_CONTAINS
|
|
(
|
|
CAST('[3.14]' AS JSON),
|
|
CAST('[3]' AS JSON)
|
|
);
|
|
JSON_CONTAINS
|
|
(
|
|
CAST('[3.14]' AS JSON),
|
|
CAST('[3]' AS JSON)
|
|
)
|
|
0
|
|
SELECT JSON_CONTAINS
|
|
(
|
|
CAST('[1, 2, 3]' AS JSON),
|
|
CAST(3 AS JSON)
|
|
);
|
|
JSON_CONTAINS
|
|
(
|
|
CAST('[1, 2, 3]' AS JSON),
|
|
CAST(3 AS JSON)
|
|
)
|
|
1
|
|
SELECT JSON_CONTAINS();
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_CONTAINS'
|
|
SELECT JSON_CONTAINS('[1]');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_CONTAINS'
|
|
SELECT JSON_CONTAINS('[1]', '[1]', '$', '$[0]');
|
|
ERROR 42000: Incorrect parameter count in the call to native function 'JSON_CONTAINS'
|
|
# ----------------------------------------------------------------------
|
|
# Wrong collation from JSON_QUOTE caused problems: Set it in
|
|
# Item_func_json_quote::fix_length_and_dec. Bug found by Knut.
|
|
# Similar issue for JSON_UNQUOTE and JSON_TYPE.
|
|
# ----------------------------------------------------------------------
|
|
select json_object("a", ifnull(json_quote('test'), cast('null' as json)));
|
|
json_object("a", ifnull(json_quote('test'), cast('null' as json)))
|
|
{"a": "\"test\""}
|
|
select cast(concat('[', json_quote('ab'), ']') as json);
|
|
cast(concat('[', json_quote('ab'), ']') as json)
|
|
["ab"]
|
|
select cast(concat('[', json_unquote('"12"'), ']') as json);
|
|
cast(concat('[', json_unquote('"12"'), ']') as json)
|
|
[12]
|
|
select cast(concat('["', json_type(cast(1 as json)), '"]') as json);
|
|
cast(concat('["', json_type(cast(1 as json)), '"]') as json)
|
|
["INTEGER"]
|
|
#
|
|
# Bug#20912438: ITEM_TYPE_HOLDER::DISPLAY_LENGTH(ITEM*): ASSERTION `0' FAILED
|
|
#
|
|
(SELECT JSON_KEYS('{ "key80": "2015-04-20 11:53:55"}')) UNION ALL
|
|
(SELECT JSON_KEYS('{ "key80": "2015-04-20 11:53:55" }') LIMIT 0);
|
|
JSON_KEYS('{ "key80": "2015-04-20 11:53:55"}')
|
|
["key80"]
|
|
SELECT CAST(1 AS JSON) UNION ALL SELECT CAST(1 AS JSON);
|
|
CAST(1 AS JSON)
|
|
1
|
|
1
|
|
SELECT COUNT(*), CAST(NULL AS JSON);
|
|
COUNT(*) CAST(NULL AS JSON)
|
|
1 NULL
|
|
SELECT COUNT(*), JSON_EXTRACT('not valid json!', '$');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 1.
|
|
# ----------------------------------------------------------------------
|
|
# Bug report from John E.
|
|
# Crash in Item_copy_json::~Item_copy_json
|
|
# ----------------------------------------------------------------------
|
|
EXPLAIN SELECT COUNT(*), JSON_KEYS('{}');
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select count(0) AS `COUNT(*)`,json_keys('{}') AS `JSON_KEYS('{}')`
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', 'a' );
|
|
json_search( '{ "a": "foo" }', 'one', 'foo', 'a' )
|
|
"$.a"
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', null );
|
|
json_search( '{ "a": "foo" }', 'one', 'foo', null )
|
|
"$.a"
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', convert(x'f8' using latin1) );
|
|
json_search( '{ "a": "foo" }', 'one', 'foo', convert(x'f8' using latin1) )
|
|
"$.a"
|
|
select json_search( '{ "a": "foo" }', 'one', 'foo', 'ab' );
|
|
ERROR HY000: Incorrect arguments to ESCAPE
|
|
# ----------------------------------------------------------------------
|
|
# Wrong results when Json_path_cache primed is accessed
|
|
# during the prepare-phase.
|
|
#----------------------------------------------------------------------
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null ) is null;
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null ) is null
|
|
1
|
|
prepare stmt1 from 'select json_remove( ''[ 1, { "a": true, "b": false, "c": null }, 5 ]'', null ) is null';
|
|
execute stmt1;
|
|
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', null ) is null
|
|
1
|
|
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$.' ) is null;
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 2.
|
|
prepare stmt1 from 'select json_remove( ''[ 1, { "a": true, "b": false, "c": null }, 5 ]'', ''$.'' ) is null';
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 2.
|
|
# ----------------------------------------------------------------------
|
|
# Bug#20987329 VALUE OF PREPARED STATEMENT PLACEHOLDER FOR PARAMETER
|
|
# IN JSON_EXTRACT IS STICKY
|
|
#----------------------------------------------------------------------
|
|
prepare json_stmt1 FROM 'select json_contains( ''{ "keyA": [1, 2, 3], "keyB": [4, 5, 6] }'', ''[2]'', ? )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt1 USING @mypath;
|
|
json_contains( '{ "keyA": [1, 2, 3], "keyB": [4, 5, 6] }', '[2]', ? )
|
|
1
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt1 USING @mypath;
|
|
json_contains( '{ "keyA": [1, 2, 3], "keyB": [4, 5, 6] }', '[2]', ? )
|
|
0
|
|
prepare json_stmt2 FROM 'select json_contains_path( ''{ "keyA": [1, 2, 3] }'', ''all'', ? )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt2 USING @mypath;
|
|
json_contains_path( '{ "keyA": [1, 2, 3] }', 'all', ? )
|
|
1
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt2 USING @mypath;
|
|
json_contains_path( '{ "keyA": [1, 2, 3] }', 'all', ? )
|
|
0
|
|
prepare json_stmt3 FROM 'select json_length( ''{ "keyA": [1, 2, 3], "keyB": [1, 2, 3, 4] }'', ? )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt3 USING @mypath;
|
|
json_length( '{ "keyA": [1, 2, 3], "keyB": [1, 2, 3, 4] }', ? )
|
|
3
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt3 USING @mypath;
|
|
json_length( '{ "keyA": [1, 2, 3], "keyB": [1, 2, 3, 4] }', ? )
|
|
4
|
|
prepare json_stmt4 FROM 'select json_keys( ''[ { "keyA": true }, { "keyB": false } ]'', ? )';
|
|
set @mypath = '$[0]';
|
|
execute json_stmt4 USING @mypath;
|
|
json_keys( '[ { "keyA": true }, { "keyB": false } ]', ? )
|
|
["keyA"]
|
|
set @mypath = '$[1]';
|
|
execute json_stmt4 USING @mypath;
|
|
json_keys( '[ { "keyA": true }, { "keyB": false } ]', ? )
|
|
["keyB"]
|
|
prepare json_stmt5 FROM 'select json_array_append( ''{ "keyA": [1, 2], "keyB": [3, 4] }'', ?, 5 )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt5 USING @mypath;
|
|
json_array_append( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2, 5], "keyB": [3, 4]}
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt5 USING @mypath;
|
|
json_array_append( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2], "keyB": [3, 4, 5]}
|
|
prepare json_stmt6 FROM 'select json_insert( ''{ "keyA": [1, 2], "keyB": [3, 4] }'', ?, 5 )';
|
|
set @mypath = '$.keyA[2]';
|
|
execute json_stmt6 USING @mypath;
|
|
json_insert( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2, 5], "keyB": [3, 4]}
|
|
set @mypath = '$.keyB[2]';
|
|
execute json_stmt6 USING @mypath;
|
|
json_insert( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2], "keyB": [3, 4, 5]}
|
|
prepare json_stmt7 FROM 'select json_set( ''{ "keyA": [1, 2], "keyB": [3, 4] }'', ?, 5 )';
|
|
set @mypath = '$.keyA[2]';
|
|
execute json_stmt7 USING @mypath;
|
|
json_set( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2, 5], "keyB": [3, 4]}
|
|
set @mypath = '$.keyB[2]';
|
|
execute json_stmt7 USING @mypath;
|
|
json_set( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2], "keyB": [3, 4, 5]}
|
|
prepare json_stmt8 FROM 'select json_replace( ''{ "keyA": [1, 2], "keyB": [3, 4] }'', ?, 5 )';
|
|
set @mypath = '$.keyA[1]';
|
|
execute json_stmt8 USING @mypath;
|
|
json_replace( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 5], "keyB": [3, 4]}
|
|
set @mypath = '$.keyB[1]';
|
|
execute json_stmt8 USING @mypath;
|
|
json_replace( '{ "keyA": [1, 2], "keyB": [3, 4] }', ?, 5 )
|
|
{"keyA": [1, 2], "keyB": [3, 5]}
|
|
prepare json_stmt9 FROM 'select json_search( ''{ "keyA": [ "foot" ], "keyB": [ "food" ] }'', ''all'', ''foo%'', null, ? )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt9 USING @mypath;
|
|
json_search( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', 'all', 'foo%', null, ? )
|
|
"$.keyA[0]"
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt9 USING @mypath;
|
|
json_search( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', 'all', 'foo%', null, ? )
|
|
"$.keyB[0]"
|
|
prepare json_stmt10 FROM 'select json_remove( ''{ "keyA": [ "foot" ], "keyB": [ "food" ] }'', ? )';
|
|
set @mypath = '$.keyA';
|
|
execute json_stmt10 USING @mypath;
|
|
json_remove( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', ? )
|
|
{"keyB": ["food"]}
|
|
set @mypath = '$.keyB';
|
|
execute json_stmt10 USING @mypath;
|
|
json_remove( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', ? )
|
|
{"keyA": ["foot"]}
|
|
prepare json_stmt11 FROM 'select json_contains_path( ''{ "keyA": true }'', ?, ''$.keyA'', ''$.keyB'' )';
|
|
set @mypath = 'one';
|
|
execute json_stmt11 USING @mypath;
|
|
json_contains_path( '{ "keyA": true }', ?, '$.keyA', '$.keyB' )
|
|
1
|
|
set @mypath = 'all';
|
|
execute json_stmt11 USING @mypath;
|
|
json_contains_path( '{ "keyA": true }', ?, '$.keyA', '$.keyB' )
|
|
0
|
|
prepare json_stmt12 FROM 'select json_search( ''{ "keyA": [ "foot" ], "keyB": [ "food" ] }'', ?, ''foo%'' )';
|
|
set @mypath = 'one';
|
|
execute json_stmt12 USING @mypath;
|
|
json_search( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', ?, 'foo%' )
|
|
"$.keyA[0]"
|
|
set @mypath = 'all';
|
|
execute json_stmt12 USING @mypath;
|
|
json_search( '{ "keyA": [ "foot" ], "keyB": [ "food" ] }', ?, 'foo%' )
|
|
["$.keyA[0]", "$.keyB[0]"]
|
|
#
|
|
# Bug#21128632 JSON_QUOTE(JSON_TYPE(...)) GIVES ERROR 3139 ER_INVALID_JSON_CHARSET
|
|
#
|
|
select json_quote( json_type( json_object() ) );
|
|
json_quote( json_type( json_object() ) )
|
|
"OBJECT"
|
|
select json_quote( json_type( cast('{}' as json) ) );
|
|
json_quote( json_type( cast('{}' as json) ) )
|
|
"OBJECT"
|
|
#
|
|
# Bug#21148020 OUTPUT FROM JSON_TYPE() IS TRUNCATED
|
|
# WHEN EXECUTED IN A VIEW OR JOIN
|
|
#
|
|
SELECT JSON_TYPE(JSON_OBJECT());
|
|
JSON_TYPE(JSON_OBJECT())
|
|
OBJECT
|
|
CREATE VIEW v1 AS SELECT JSON_TYPE(JSON_OBJECT());
|
|
SELECT * FROM v1;
|
|
JSON_TYPE(JSON_OBJECT())
|
|
OBJECT
|
|
SELECT JSON_TYPE(CAST(CAST('2015-05-25 11:23:55' AS DATETIME) AS JSON));
|
|
JSON_TYPE(CAST(CAST('2015-05-25 11:23:55' AS DATETIME) AS JSON))
|
|
DATETIME
|
|
CREATE VIEW v2 AS SELECT JSON_TYPE(CAST(CAST('2015-05-25 11:23:55' AS
|
|
DATETIME) AS JSON));
|
|
SELECT * FROM v2;
|
|
JSON_TYPE(CAST(CAST('2015-05-25 11:23:55' AS
|
|
DATETIME) AS JSON))
|
|
DATETIME
|
|
drop view v1;
|
|
drop view v2;
|
|
#
|
|
# Bug#21198333 SIG 6 IN ITEM_CACHE_JSON::CACHE_VALUE AT SQL/ITEM.CC:9470
|
|
#
|
|
SELECT MIN(JSON_EXTRACT('not json', '$'));
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Invalid value." at position 1.
|
|
#
|
|
# Bug#21200657 DATA FROM DERIVED TABLE BASED
|
|
# ON JSN_QUOTE()/JSN_UNQUOTE() CALL IS TRUNCATED
|
|
#
|
|
SELECT JSON_QUOTE('This is a string that should not be truncated') AS field1;
|
|
field1
|
|
"This is a string that should not be truncated"
|
|
SELECT JSON_UNQUOTE(JSON_QUOTE('This is a string that should not be truncated')) AS field1;
|
|
field1
|
|
This is a string that should not be truncated
|
|
SELECT * FROM (SELECT JSON_QUOTE('This is a string that should not be truncated') AS field1) AS DERIVED_TABLE;
|
|
field1
|
|
"This is a string that should not be truncated"
|
|
SELECT * FROM (SELECT JSON_UNQUOTE("This is a string that should not be truncated") AS field1) AS DERIVED_TABLE;
|
|
field1
|
|
This is a string that should not be truncated
|
|
SELECT * FROM (SELECT JSON_UNQUOTE(JSON_QUOTE('This is a string that should not be truncated')) AS field1) AS DERIVED_TABLE;
|
|
field1
|
|
This is a string that should not be truncated
|
|
#
|
|
# Bug#21296173 JSON_OBJECT('KEY', BOOLEAN_LITERAL) USES VALUES 0, 1
|
|
# FOR BOOL WHEN USED VIA VIEW
|
|
#
|
|
SELECT JSON_OBJECT('key1', false, 'key2', true);
|
|
JSON_OBJECT('key1', false, 'key2', true)
|
|
{"key1": false, "key2": true}
|
|
SELECT JSON_ARRAY('key1', false, 'key2', true);
|
|
JSON_ARRAY('key1', false, 'key2', true)
|
|
["key1", false, "key2", true]
|
|
CREATE VIEW v1 AS SELECT JSON_OBJECT('key1', false, 'key2', true);
|
|
SELECT * FROM v1;
|
|
JSON_OBJECT('key1', false, 'key2', true)
|
|
{"key1": false, "key2": true}
|
|
CREATE VIEW v2 AS SELECT JSON_ARRAY('key1', false, 'key2', true);
|
|
SELECT * FROM v2;
|
|
JSON_ARRAY('key1', false, 'key2', true)
|
|
["key1", false, "key2", true]
|
|
drop view v1;
|
|
drop view v2;
|
|
#
|
|
# Bug#21293089 JSON_CONTAINS() RETURNS WRONG RESULT WITH EMPTY JSON ARRAY
|
|
#
|
|
SELECT JSON_CONTAINS('[]', '{"a" : 1}');
|
|
JSON_CONTAINS('[]', '{"a" : 1}')
|
|
0
|
|
SELECT JSON_CONTAINS('[]', '[1, 2, 3, 4, 5]');
|
|
JSON_CONTAINS('[]', '[1, 2, 3, 4, 5]')
|
|
0
|
|
SELECT JSON_CONTAINS('[]', '[1, 2, 3, 4, {"a" : 1}]');
|
|
JSON_CONTAINS('[]', '[1, 2, 3, 4, {"a" : 1}]')
|
|
0
|
|
SELECT JSON_CONTAINS('[]', '{"a" : [1, 2, 3, 4, 5]}');
|
|
JSON_CONTAINS('[]', '{"a" : [1, 2, 3, 4, 5]}')
|
|
0
|
|
SELECT JSON_CONTAINS('[]', '[]');
|
|
JSON_CONTAINS('[]', '[]')
|
|
1
|
|
#
|
|
# Bug#21377136 STACK OVERFLOW IN RAPIDJSON::GENERICREADER
|
|
#
|
|
SELECT JSON_VALID(REPEAT('[', 100000));
|
|
ERROR 22032: The JSON document exceeds the maximum depth.
|
|
SELECT JSON_VALID(REPEAT('{"a":', 100000));
|
|
ERROR 22032: The JSON document exceeds the maximum depth.
|
|
SELECT JSON_VALID(REPEAT('{"a":[', 100000));
|
|
ERROR 22032: The JSON document exceeds the maximum depth.
|
|
SELECT JSON_VALID(REPEAT('[{"a":', 100000));
|
|
ERROR 22032: The JSON document exceeds the maximum depth.
|
|
#
|
|
# Bug#21381806 JSON: ASSERTION FAILED: ARG->NULL_VALUE
|
|
#
|
|
SELECT JSON_SET(CASE WHEN 1 THEN NULL ELSE NULL END, '{}', '{}');
|
|
JSON_SET(CASE WHEN 1 THEN NULL ELSE NULL END, '{}', '{}')
|
|
NULL
|
|
SELECT JSON_VALID(CASE WHEN 1 THEN NULL ELSE NULL END);
|
|
JSON_VALID(CASE WHEN 1 THEN NULL ELSE NULL END)
|
|
NULL
|
|
SELECT JSON_ARRAY(CASE WHEN 1 THEN NULL ELSE NULL END);
|
|
JSON_ARRAY(CASE WHEN 1 THEN NULL ELSE NULL END)
|
|
[null]
|
|
#
|
|
# Bug#21384048 ASSERTION FAILED: N >= 0 && N <= 308
|
|
# IN RAPIDJSON::INTERNAL::FASTPATH
|
|
#
|
|
SELECT JSON_EXTRACT('-1E-36181012216111515851075235238', '$');
|
|
JSON_EXTRACT('-1E-36181012216111515851075235238', '$')
|
|
-0.0
|
|
SELECT JSON_EXTRACT('1E-36181012216111515851075235238', '$');
|
|
JSON_EXTRACT('1E-36181012216111515851075235238', '$')
|
|
0.0
|
|
SELECT JSON_EXTRACT('1E-325', '$');
|
|
JSON_EXTRACT('1E-325', '$')
|
|
0.0
|
|
SELECT JSON_EXTRACT('1E-324', '$');
|
|
JSON_EXTRACT('1E-324', '$')
|
|
0.0
|
|
SELECT JSON_EXTRACT('1E-323', '$');
|
|
JSON_EXTRACT('1E-323', '$')
|
|
1e-323
|
|
SELECT JSON_EXTRACT('1E+308', '$');
|
|
JSON_EXTRACT('1E+308', '$')
|
|
1e308
|
|
SELECT JSON_EXTRACT('1E+309', '$');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Number too big to be stored in double." at position 0.
|
|
SELECT JSON_EXTRACT('1E+36181012216111515851075235238', '$');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Number too big to be stored in double." at position 0.
|
|
SELECT JSON_EXTRACT('-1E+36181012216111515851075235238', '$');
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "Number too big to be stored in double." at position 0.
|
|
#
|
|
# Bug#21383284: ASSERTION IN SELECT_LEX::SETUP_CONDS
|
|
#
|
|
SELECT 1 FROM dual WHERE JSON_SEARCH('{}', 'one', 'foo', 'too-long-escape');
|
|
ERROR HY000: Incorrect arguments to ESCAPE
|
|
SELECT 1 FROM dual WHERE JSON_SEARCH('{}', 'one', 'foo', JSON_EXTRACT('', '$'));
|
|
ERROR 22032: Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0.
|
|
#
|
|
# Bug#21442624 INCORRECT RESULT FROM JSON_SET WITH AUTO-WRAPPING
|
|
#
|
|
SELECT JSON_SET('1', '$', 100);
|
|
JSON_SET('1', '$', 100)
|
|
100
|
|
SELECT JSON_SET('1', '$[0]', 100);
|
|
JSON_SET('1', '$[0]', 100)
|
|
100
|
|
SELECT JSON_SET('1', '$[0][0]', 100);
|
|
JSON_SET('1', '$[0][0]', 100)
|
|
100
|
|
SELECT JSON_SET('1', '$[0][0][0]', 100);
|
|
JSON_SET('1', '$[0][0][0]', 100)
|
|
100
|
|
SELECT JSON_SET('[]', '$', 100);
|
|
JSON_SET('[]', '$', 100)
|
|
100
|
|
SELECT JSON_SET('[]', '$[0]', 100);
|
|
JSON_SET('[]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[]', '$[0][0]', 100);
|
|
JSON_SET('[]', '$[0][0]', 100)
|
|
[]
|
|
SELECT JSON_SET('[]', '$[0][0][0]', 100);
|
|
JSON_SET('[]', '$[0][0][0]', 100)
|
|
[]
|
|
SELECT JSON_SET('[1]', '$', 100);
|
|
JSON_SET('[1]', '$', 100)
|
|
100
|
|
SELECT JSON_SET('[1]', '$[0]', 100);
|
|
JSON_SET('[1]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[1]', '$[0][0]', 100);
|
|
JSON_SET('[1]', '$[0][0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[1]', '$[0][0][0]', 100);
|
|
JSON_SET('[1]', '$[0][0][0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[[1]]', '$', 100);
|
|
JSON_SET('[[1]]', '$', 100)
|
|
100
|
|
SELECT JSON_SET('[[1]]', '$[0]', 100);
|
|
JSON_SET('[[1]]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[[1]]', '$[0][0]', 100);
|
|
JSON_SET('[[1]]', '$[0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_SET('[[1]]', '$[0][0][0]', 100);
|
|
JSON_SET('[[1]]', '$[0][0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_SET('[[[1]]]', '$', 100);
|
|
JSON_SET('[[[1]]]', '$', 100)
|
|
100
|
|
SELECT JSON_SET('[[[1]]]', '$[0]', 100);
|
|
JSON_SET('[[[1]]]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_SET('[[[1]]]', '$[0][0]', 100);
|
|
JSON_SET('[[[1]]]', '$[0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_SET('[[[1]]]', '$[0][0][0]', 100);
|
|
JSON_SET('[[[1]]]', '$[0][0][0]', 100)
|
|
[[[100]]]
|
|
SELECT JSON_REPLACE('1', '$', 100);
|
|
JSON_REPLACE('1', '$', 100)
|
|
100
|
|
SELECT JSON_REPLACE('1', '$[0]', 100);
|
|
JSON_REPLACE('1', '$[0]', 100)
|
|
100
|
|
SELECT JSON_REPLACE('1', '$[0][0]', 100);
|
|
JSON_REPLACE('1', '$[0][0]', 100)
|
|
100
|
|
SELECT JSON_REPLACE('1', '$[0][0][0]', 100);
|
|
JSON_REPLACE('1', '$[0][0][0]', 100)
|
|
100
|
|
SELECT JSON_REPLACE('[]', '$', 100);
|
|
JSON_REPLACE('[]', '$', 100)
|
|
100
|
|
SELECT JSON_REPLACE('[]', '$[0]', 100);
|
|
JSON_REPLACE('[]', '$[0]', 100)
|
|
[]
|
|
SELECT JSON_REPLACE('[]', '$[0][0]', 100);
|
|
JSON_REPLACE('[]', '$[0][0]', 100)
|
|
[]
|
|
SELECT JSON_REPLACE('[]', '$[0][0][0]', 100);
|
|
JSON_REPLACE('[]', '$[0][0][0]', 100)
|
|
[]
|
|
SELECT JSON_REPLACE('[1]', '$', 100);
|
|
JSON_REPLACE('[1]', '$', 100)
|
|
100
|
|
SELECT JSON_REPLACE('[1]', '$[0]', 100);
|
|
JSON_REPLACE('[1]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_REPLACE('[1]', '$[0][0]', 100);
|
|
JSON_REPLACE('[1]', '$[0][0]', 100)
|
|
[100]
|
|
SELECT JSON_REPLACE('[1]', '$[0][0][0]', 100);
|
|
JSON_REPLACE('[1]', '$[0][0][0]', 100)
|
|
[100]
|
|
SELECT JSON_REPLACE('[[1]]', '$', 100);
|
|
JSON_REPLACE('[[1]]', '$', 100)
|
|
100
|
|
SELECT JSON_REPLACE('[[1]]', '$[0]', 100);
|
|
JSON_REPLACE('[[1]]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_REPLACE('[[1]]', '$[0][0]', 100);
|
|
JSON_REPLACE('[[1]]', '$[0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_REPLACE('[[1]]', '$[0][0][0]', 100);
|
|
JSON_REPLACE('[[1]]', '$[0][0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_REPLACE('[[[1]]]', '$', 100);
|
|
JSON_REPLACE('[[[1]]]', '$', 100)
|
|
100
|
|
SELECT JSON_REPLACE('[[[1]]]', '$[0]', 100);
|
|
JSON_REPLACE('[[[1]]]', '$[0]', 100)
|
|
[100]
|
|
SELECT JSON_REPLACE('[[[1]]]', '$[0][0]', 100);
|
|
JSON_REPLACE('[[[1]]]', '$[0][0]', 100)
|
|
[[100]]
|
|
SELECT JSON_REPLACE('[[[1]]]', '$[0][0][0]', 100);
|
|
JSON_REPLACE('[[[1]]]', '$[0][0][0]', 100)
|
|
[[[100]]]
|
|
#
|
|
# Bug#21828321: JSON FUNCS CALL DBUG_ABORT OR EXIT() ON WINDOWS!
|
|
#
|
|
SELECT JSON_ARRAY(LEAST(NULL, NULL), GREATEST(NULL, NULL), LEAST(j1, NULL),
|
|
GREATEST(NULL, j2), LEAST(j1, j2), GREATEST(j1, j2)) AS j
|
|
FROM (SELECT CAST('1' AS JSON) AS j1, CAST('2' AS JSON) AS j2) t;
|
|
j
|
|
[null, null, null, null, "1", "2"]
|
|
Warnings:
|
|
Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators'
|
|
Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators'
|
|
Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators'
|
|
Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators'
|
|
#
|
|
# Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE
|
|
#
|
|
SELECT JSON_SET(JSON_ARRAY(JSON_MERGE_PRESERVE('{"a":1}', '{"a":2}')),
|
|
'$[0].a', 123);
|
|
JSON_SET(JSON_ARRAY(JSON_MERGE_PRESERVE('{"a":1}', '{"a":2}')),
|
|
'$[0].a', 123)
|
|
[{"a": 123}]
|
|
#
|
|
# Bug#22887227: ASSERTION FAILED: THIS_TYPE != JSON_DOM::J_ERROR
|
|
#
|
|
SELECT NULLIF(CASE WHEN 1 THEN NULL ELSE JSON_ARRAY() END, 1);
|
|
NULLIF(CASE WHEN 1 THEN NULL ELSE JSON_ARRAY() END, 1)
|
|
NULL
|
|
SELECT JSON_TYPE(CASE WHEN 1 THEN NULL ELSE JSON_ARRAY() END);
|
|
JSON_TYPE(CASE WHEN 1 THEN NULL ELSE JSON_ARRAY() END)
|
|
NULL
|
|
SELECT MIN(CASE 0 WHEN 1 THEN JSON_ARRAY() ELSE NULL END);
|
|
MIN(CASE 0 WHEN 1 THEN JSON_ARRAY() ELSE NULL END)
|
|
NULL
|
|
#
|
|
# Bug #24930829 BITWISE OPERATORS: CRASH IN ITEM_FUNC_BIT_COUNT::VAL_INT
|
|
# Test case does not fail anymore after Bug#24930038 fix was pushed
|
|
# since a check for null return value was added.
|
|
#
|
|
DO BIT_COUNT(COMPRESS(1) << JSON_DEPTH(1));
|
|
ERROR 22032: Invalid data type for JSON data in argument 1 to function json_depth; a JSON string or JSON type is required.
|
|
#
|
|
# Bug#25516881: JSON_UNQUOTE RETURNS WRONG RESULT WHEN INPUT IS UTF-16
|
|
#
|
|
SELECT JSON_UNQUOTE(CAST('"abc"' AS CHAR CHARSET utf16));
|
|
JSON_UNQUOTE(CAST('"abc"' AS CHAR CHARSET utf16))
|
|
abc
|
|
SELECT JSON_UNQUOTE(CAST('ABCD' AS BINARY));
|
|
ERROR 22032: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
|
SELECT HEX(JSON_UNQUOTE(CAST('"abc"' AS CHAR CHARSET utf16))),
|
|
HEX(JSON_UNQUOTE(CAST('abc' AS CHAR CHARSET utf16)));
|
|
HEX(JSON_UNQUOTE(CAST('"abc"' AS CHAR CHARSET utf16))) HEX(JSON_UNQUOTE(CAST('abc' AS CHAR CHARSET utf16)))
|
|
616263 616263
|
|
#
|
|
# Bug#25516960: JSON_SEARCH AND JSON_CONTAINS_PATH REJECT ONE-OR-ALL
|
|
# ARGUMENT IF IT IS UTF-16
|
|
#
|
|
SELECT JSON_SEARCH('["a", "a"]', CAST('one' AS CHAR CHARSET utf16), 'a') AS c1,
|
|
JSON_SEARCH('["a", "a"]', CAST('all' AS CHAR CHARSET utf16), 'a') AS c2,
|
|
JSON_CONTAINS_PATH('{"a":"x"}', CAST('one' AS CHAR CHARSET utf16),
|
|
'$.a', '$.b') AS c3,
|
|
JSON_CONTAINS_PATH('{"a":"x"}', CAST('all' AS CHAR CHARSET utf16),
|
|
'$.a', '$.b') AS c4;
|
|
c1 c2 c3 c4
|
|
"$[0]" ["$[0]", "$[1]"] 1 0
|
|
#
|
|
# Bug#25530204: THE RESULT OF SUM ON JSON_EXTRACT LOST THE DECIMAL PART
|
|
#
|
|
SELECT SUM(CAST('5.45' AS JSON));
|
|
SUM(CAST('5.45' AS JSON))
|
|
5.45
|
|
#
|
|
# Bug#25518504: SOME BIG NUMBERS IN JSON DOCUMENTS BECOME ZERO
|
|
#
|
|
SELECT CAST('2e308' AS JSON);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function cast_as_json: "Terminate parsing due to Handler error." at position 0.
|
|
SELECT CAST('-2e308' AS JSON);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function cast_as_json: "Terminate parsing due to Handler error." at position 0.
|
|
SELECT CAST('2e309' AS JSON);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function cast_as_json: "Number too big to be stored in double." at position 0.
|
|
SELECT CAST('-2e309' AS JSON);
|
|
ERROR 22032: Invalid JSON text in argument 1 to function cast_as_json: "Number too big to be stored in double." at position 0.
|
|
#
|
|
# Bug#25818544: Assert failure when using result from NULLIF as JSON
|
|
#
|
|
SELECT JSON_EXTRACT(NULLIF(JSON_OBJECT('a', 123), JSON_ARRAY()), '$.a');
|
|
JSON_EXTRACT(NULLIF(JSON_OBJECT('a', 123), JSON_ARRAY()), '$.a')
|
|
123
|
|
SELECT JSON_EXTRACT(NULLIF('a', 'a'), '$');
|
|
JSON_EXTRACT(NULLIF('a', 'a'), '$')
|
|
NULL
|
|
SELECT JSON_EXTRACT(NULLIF('1', '2'), '$');
|
|
JSON_EXTRACT(NULLIF('1', '2'), '$')
|
|
1
|
|
#
|
|
# WL#9831: Ranges in JSON path expressions
|
|
#
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[0 to 0]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[0 to 0]')
|
|
[1]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 1]')
|
|
[2]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 2]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 3]')
|
|
[2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 4]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 4]')
|
|
[2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[0 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[0 to 2]')
|
|
[1, 2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[0 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[0 to 3]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[0 to 4]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[0 to 4]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[99 to 100]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[99 to 100]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[100 to 100]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[100 to 100]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last to last]')
|
|
[4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-1 to last-1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-1 to last-1]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-1 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-1 to last]')
|
|
[3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-3 to last-1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-3 to last-1]')
|
|
[1, 2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-4 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-4 to last]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-4 to 5]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-4 to 5]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last to 2]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-1 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-1 to 2]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-1 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-1 to 3]')
|
|
[3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-100 to last-99]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-100 to last-99]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[last-100 to last-100]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[last-100 to last-100]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to last-1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to last-1]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2 to last-2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2 to last-2]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[1 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[1 to 2]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[1 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[1 to 3]')
|
|
[2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[1 to 4]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[1 to 4]')
|
|
[2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[0 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[0 to 2]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[0 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[0 to 3]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[0 to 4]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[0 to 4]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[99 to 100]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[99 to 100]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to last]')
|
|
[3, 4, 1, 2]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-3 to last-1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-3 to last-1]')
|
|
[1, 2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-4 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-4 to last]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-4 to 5]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-4 to 5]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last to 2]')
|
|
[1, 2, 3, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to 2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to 2]')
|
|
[3, 1, 2, 4]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to 3]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-1 to 3]')
|
|
[3, 4, 1, 2]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[last-100 to last-99]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[last-100 to last-99]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[1 to last-1]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[1 to last-1]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$**[2 to last-2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$**[2 to last-2]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[]', '$[0 to 1]');
|
|
JSON_EXTRACT('[]', '$[0 to 1]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[]', '$[last-1 to last]');
|
|
JSON_EXTRACT('[]', '$[last-1 to last]')
|
|
NULL
|
|
SELECT JSON_CONTAINS_PATH('[1,2]', 'one', '$[0 to 2]') AS o,
|
|
JSON_CONTAINS_PATH('[1,2]', 'all', '$[0 to 2]') AS a,
|
|
JSON_CONTAINS_PATH('[1,2]', 'one', '$**[0 to 2]') AS o_e,
|
|
JSON_CONTAINS_PATH('[1,2]', 'all', '$**[0 to 2]') AS a_e;
|
|
o a o_e a_e
|
|
1 1 1 1
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][0 to 10]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][0 to 10]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][0 to last-2]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][0 to last-2]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][0 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][0 to last]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][1 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][1 to last]')
|
|
NULL
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][last-2 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][last-2 to last]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[2][last-2 to 0]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[2][last-2 to 0]')
|
|
[3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][last]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][0 to 10]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][0 to 10]')
|
|
[2, 3]
|
|
SELECT JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][last-10 to last]');
|
|
JSON_EXTRACT('[1,2,3,4]', '$[1 to 2][last-10 to last]')
|
|
[2, 3]
|
|
SELECT JSON_REMOVE('[1,2,3]', '$[last]');
|
|
JSON_REMOVE('[1,2,3]', '$[last]')
|
|
[1, 2]
|
|
SELECT JSON_REMOVE('[1,2,3]', '$[last-1]');
|
|
JSON_REMOVE('[1,2,3]', '$[last-1]')
|
|
[1, 3]
|
|
SELECT JSON_REMOVE('[1,2,3]', '$[last-2]');
|
|
JSON_REMOVE('[1,2,3]', '$[last-2]')
|
|
[2, 3]
|
|
SELECT JSON_REMOVE('[1,2,3]', '$[last-3]');
|
|
JSON_REMOVE('[1,2,3]', '$[last-3]')
|
|
[1, 2, 3]
|
|
SELECT JSON_EXTRACT('true', '$[2 to 1]');
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 8.
|
|
SELECT JSON_EXTRACT('true', '$[last to last-1]');
|
|
ERROR 42000: Invalid JSON path expression. The error is around character position 16.
|
|
SELECT JSON_SET('[1,2,3]', '$[0 to 1]', 123);
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT JSON_LENGTH('[1,2,3]', '$[0 to 1]');
|
|
ERROR 42000: In this situation, path expressions may not contain the * and ** tokens or an array range.
|
|
SELECT j->'$[last]', j->'$[last-1]', j->'$[last-2]',
|
|
j->'$**[last]', j->'$**[last-1]', j->'$**[last-2]'
|
|
FROM (SELECT JSON_ARRAY(1,2) j) t;
|
|
j->'$[last]' j->'$[last-1]' j->'$[last-2]' j->'$**[last]' j->'$**[last-1]' j->'$**[last-2]'
|
|
2 1 NULL [2, 1] [1] NULL
|
|
#
|
|
# WL#9692: Deprecate the JSON_MERGE function
|
|
#
|
|
# Expect a deprecation warning.
|
|
SELECT JSON_MERGE('{}', '{}');
|
|
JSON_MERGE('{}', '{}')
|
|
{}
|
|
Warnings:
|
|
Warning 1287 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead
|
|
# Expect a deprecation warning when creating the view.
|
|
CREATE VIEW v AS SELECT JSON_MERGE('{}', '{}') AS col;
|
|
Warnings:
|
|
Warning 1287 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead
|
|
# The view uses the non-deprecated variant of the function.
|
|
SHOW CREATE VIEW v;
|
|
View Create View character_set_client collation_connection
|
|
v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select json_merge_preserve('{}','{}') AS `col` utf8 utf8_general_ci
|
|
SELECT * FROM v;
|
|
col
|
|
{}
|
|
DROP VIEW v;
|
|
#
|
|
# Bug#26238736: ASSERTION `__NULL != DYNAMIC_CAST<TARGET>(ARG)' FAILURE
|
|
#
|
|
SELECT CAST('{"a": [1,2,3], "a": [4,5,6]}' AS JSON);
|
|
CAST('{"a": [1,2,3], "a": [4,5,6]}' AS JSON)
|
|
{"a": [4, 5, 6]}
|
|
#
|
|
# Bug#26022576: JSON_INSERT DOES NOT HANDLE AUTO-WRAPPING
|
|
#
|
|
SELECT JSON_INSERT('{"a":1}', '$.a[1]', 123) AS c1,
|
|
JSON_INSERT('{"a":1}', '$[0].a[1]', 123) AS c2,
|
|
JSON_INSERT('{"a":1}', '$.a[0][1]', 123) AS c3;
|
|
c1 c2 c3
|
|
{"a": [1, 123]} {"a": [1, 123]} {"a": [1, 123]}
|
|
#
|
|
# Bug#26649978: JSON_INSERT: ASSERTION FAILED: PARENT
|
|
#
|
|
# c1, c2 and c3 should have the same result due to auto-wrapping,
|
|
# but the expressions in c2, c3 and c4 used to hit an assert.
|
|
SELECT JSON_INSERT('{"a":1}', '$[1]', 2) AS c1,
|
|
JSON_INSERT('{"a":1}', '$[0][1]', 2) AS c2,
|
|
JSON_INSERT('{"a":1}', '$[0][0][1]', 2) AS c3,
|
|
JSON_INSERT('{"a":1}', '$[last][1]', 2) AS c4;
|
|
c1 c2 c3 c4
|
|
[{"a": 1}, 2] [{"a": 1}, 2] [{"a": 1}, 2] [{"a": 1}, 2]
|
|
#
|
|
# Bug#27028889: MYSQL NORMALIZES DECIMAL NUMBERS WITH
|
|
# ZERO FRACTIONAL PART TO INTEGERS
|
|
#
|
|
SET @floating_points = '[0.0, -0.0, 1.0, -1.0, 3.14,
|
|
999999999999999.0, -999999999999999.0,
|
|
1000000000000000.0, -1000000000000000.0,
|
|
1e200, -1e200]';
|
|
SELECT CAST(CAST(@floating_points AS JSON) AS CHAR) AS x;
|
|
x
|
|
[0.0, -0.0, 1.0, -1.0, 3.14, 999999999999999.0, -999999999999999.0, 1e15, -1e15, 1e200, -1e200]
|
|
SELECT JSON_PRETTY(@floating_points);
|
|
JSON_PRETTY(@floating_points)
|
|
[
|
|
0.0,
|
|
-0.0,
|
|
1.0,
|
|
-1.0,
|
|
3.14,
|
|
999999999999999.0,
|
|
-999999999999999.0,
|
|
1e15,
|
|
-1e15,
|
|
1e200,
|
|
-1e200
|
|
]
|
|
SELECT j, JSON_TYPE(j) FROM
|
|
JSON_TABLE(CAST(CAST(CAST(@floating_points AS JSON) AS CHAR) AS JSON),
|
|
'$[*]' COLUMNS (o FOR ORDINALITY, j JSON PATH '$')) AS jt
|
|
ORDER BY o;
|
|
j JSON_TYPE(j)
|
|
0.0 DOUBLE
|
|
-0.0 DOUBLE
|
|
1.0 DOUBLE
|
|
-1.0 DOUBLE
|
|
3.14 DOUBLE
|
|
999999999999999.0 DOUBLE
|
|
-999999999999999.0 DOUBLE
|
|
1e15 DOUBLE
|
|
-1e15 DOUBLE
|
|
1e200 DOUBLE
|
|
-1e200 DOUBLE
|
|
#
|
|
# Bug#27312444: ASAN: MEMCPY-PARAM-OVERLAP WITH JSON_QUOTE FUNCTION
|
|
#
|
|
SELECT JSON_QUOTE(RIGHT(REPEAT(_utf8mb4'b', 64), 50));
|
|
JSON_QUOTE(RIGHT(REPEAT(_utf8mb4'b', 64), 50))
|
|
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
SELECT JSON_QUOTE(RIGHT(REPEAT(_utf8mb4'\n', 64), 50));
|
|
JSON_QUOTE(RIGHT(REPEAT(_utf8mb4'\n', 64), 50))
|
|
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
|
|
SELECT JSON_QUOTE(RIGHT(REPEAT(_latin1'b', 64), 50));
|
|
JSON_QUOTE(RIGHT(REPEAT(_latin1'b', 64), 50))
|
|
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
SELECT JSON_QUOTE(RIGHT(REPEAT(_latin1'\n', 64), 50));
|
|
JSON_QUOTE(RIGHT(REPEAT(_latin1'\n', 64), 50))
|
|
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
|
|
#
|
|
# Bug#27891359: JSON_SET RETURNS MALFORMED JSON WHEN IT INCLUDES BINARY DATA
|
|
#
|
|
SELECT CAST(CAST(CAST(CAST(REPEAT('a', 100) AS BINARY) AS JSON) AS CHAR) AS JSON);
|
|
CAST(CAST(CAST(CAST(REPEAT('a', 100) AS BINARY) AS JSON) AS CHAR) AS JSON)
|
|
"base64:type15:YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh\nYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ=="
|