mirror of
https://github.com/MariaDB/server.git
synced 2025-07-04 01:23:45 +03:00
This patch changes the main name of 3 byte character set from utf8 to utf8mb3. New old_mode UTF8_IS_UTF8MB3 is added and set TRUE by default, so that utf8 would mean utf8mb3. If not set, utf8 would mean utf8mb4.
3615 lines
178 KiB
Plaintext
3615 lines
178 KiB
Plaintext
SELECT JSON_COMPACT(0.0e0) = -0.0e0;
|
||
JSON_COMPACT(0.0e0) = -0.0e0
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS DECIMAL)) = CAST(-0.0e0 AS DECIMAL);
|
||
JSON_COMPACT(CAST(0 AS DECIMAL)) = CAST(-0.0e0 AS DECIMAL)
|
||
1
|
||
SELECT JSON_COMPACT(0.0e0) = CAST(-0.0e0 AS DECIMAL);
|
||
JSON_COMPACT(0.0e0) = CAST(-0.0e0 AS DECIMAL)
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS DECIMAL)) = -0.0e0;
|
||
JSON_COMPACT(CAST(0 AS DECIMAL)) = -0.0e0
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS SIGNED)) = -0.0e0;
|
||
JSON_COMPACT(CAST(0 AS SIGNED)) = -0.0e0
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS SIGNED)) = CAST(-0.0e0 AS DECIMAL);
|
||
JSON_COMPACT(CAST(0 AS SIGNED)) = CAST(-0.0e0 AS DECIMAL)
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS UNSIGNED)) = -0.0e0;
|
||
JSON_COMPACT(CAST(0 AS UNSIGNED)) = -0.0e0
|
||
1
|
||
SELECT JSON_COMPACT(CAST(0 AS UNSIGNED)) = CAST(-0.0e0 AS DECIMAL);
|
||
JSON_COMPACT(CAST(0 AS UNSIGNED)) = CAST(-0.0e0 AS DECIMAL)
|
||
1
|
||
select json_compact('"abc"');
|
||
json_compact('"abc"')
|
||
"abc"
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_compact('abc');
|
||
json_compact('abc')
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 1
|
||
|
||
# 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';
|
||
|
||
# Json expression
|
||
select JSON_VALID(json_compact('[123]'));
|
||
JSON_VALID(json_compact('[123]'))
|
||
1
|
||
|
||
# Json expression NULL
|
||
select JSON_VALID(json_compact(NULL));
|
||
JSON_VALID(json_compact(NULL))
|
||
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';
|
||
|
||
# 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
|
||
# OK, though:
|
||
select JSON_VALID( json_compact(CURDATE()) );
|
||
JSON_VALID( json_compact(CURDATE()) )
|
||
0
|
||
|
||
# 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'
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_contains_path('{ "a": tru }', 'all', '$' );
|
||
json_contains_path('{ "a": tru }', 'all', '$' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_contains_path' at position 10
|
||
error ER_INVALID_JSON_PATH
|
||
select json_contains_path('{ "a": true }', 'all', '$[' );
|
||
json_contains_path('{ "a": true }', 'all', '$[' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4041 Unexpected end of JSON path in argument 3 to function 'json_contains_path'
|
||
error ER_INVALID_JSON_PATH
|
||
select json_contains_path('{ "a": true }', 'all', '$a.***[3]' );
|
||
json_contains_path('{ "a": true }', 'all', '$a.***[3]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 3 to function 'json_contains_path' at position 2
|
||
error ER_JSON_BAD_ONE_OR_ALL_ARG
|
||
select json_contains_path('{ "a": true }', 'foo', '$.a' );
|
||
json_contains_path('{ "a": true }', 'foo', '$.a' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4046 Argument 2 to function 'json_contains_path' must be "one" or "all".
|
||
error ER_INVALID_JSON_CHARSET
|
||
select json_contains_path('{}', 'all', cast('$' as binary));
|
||
json_contains_path('{}', 'all', cast('$' as binary))
|
||
1
|
||
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
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_length( 'abc' );
|
||
json_length( 'abc' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_length' at position 1
|
||
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
|
||
error ER_INVALID_JSON_PATH
|
||
select json_length( 'true', 'c$' );
|
||
json_length( 'true', 'c$' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 2 to function 'json_length' at position 1
|
||
|
||
# invalid json path
|
||
error ER_INVALID_JSON_PATH
|
||
select json_length( '{ "foo" : [ true, false ] }', '$.foo[bar]' );
|
||
json_length( '{ "foo" : [ true, false ] }', '$.foo[bar]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 2 to function 'json_length' at position 7
|
||
|
||
# wildcards not allowed in path expressions for this function
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_length( 'true', '$.*' );
|
||
json_length( 'true', '$.*' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_length'
|
||
|
||
# wildcards not allowed in path expressions for this function
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_length( 'true', '$.foo**.bar' );
|
||
json_length( 'true', '$.foo**.bar' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_length'
|
||
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(json_compact(null));
|
||
json_depth(json_compact(null))
|
||
NULL
|
||
select json_depth(json_compact('[]')),
|
||
json_depth(json_compact('{}')),
|
||
json_depth(json_compact('null')),
|
||
json_depth(json_quote('foo'));
|
||
json_depth(json_compact('[]')) json_depth(json_compact('{}')) json_depth(json_compact('null')) json_depth(json_quote('foo'))
|
||
1 1 1 1
|
||
select json_depth(json_compact('[[2], 3, [[[4]]]]'));
|
||
json_depth(json_compact('[[2], 3, [[[4]]]]'))
|
||
5
|
||
select json_depth(json_compact('{"a": {"a1": [3]}, "b": {"b1": {"c": {"d": [5]}}}}'));
|
||
json_depth(json_compact('{"a": {"a1": [3]}, "b": {"b1": {"c": {"d": [5]}}}}'))
|
||
6
|
||
SELECT JSON_DEPTH
|
||
(
|
||
'{}'
|
||
);
|
||
JSON_DEPTH
|
||
(
|
||
'{}'
|
||
)
|
||
1
|
||
SELECT JSON_DEPTH
|
||
(
|
||
'[]'
|
||
);
|
||
JSON_DEPTH
|
||
(
|
||
'[]'
|
||
)
|
||
1
|
||
SELECT JSON_DEPTH( '"abc"' );
|
||
JSON_DEPTH( '"abc"' )
|
||
1
|
||
SELECT JSON_DEPTH( json_compact( '"abc"') );
|
||
JSON_DEPTH( json_compact( '"abc"') )
|
||
1
|
||
error ER_INVALID_TYPE_FOR_JSON
|
||
SELECT JSON_DEPTH( 1 );
|
||
JSON_DEPTH( 1 )
|
||
1
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_DEPTH( 'abc' );
|
||
JSON_DEPTH( 'abc' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_depth' at position 1
|
||
SELECT JSON_DEPTH( json_compact( 1) );
|
||
JSON_DEPTH( json_compact( 1) )
|
||
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
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_DEPTH
|
||
(
|
||
'[ "a", true, "b" , { "e" : false }, "c" , null'
|
||
);
|
||
JSON_DEPTH
|
||
(
|
||
'[ "a", true, "b" , { "e" : false }, "c" , null'
|
||
)
|
||
NULL
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_depth'
|
||
# ----------------------------------------------------------------------
|
||
# 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
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ', '$[1]', '$[2]' );
|
||
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ', '$[1]', '$[2]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_remove'
|
||
|
||
# invalid json path
|
||
error ER_INVALID_JSON_PATH
|
||
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1', '$[2]' );
|
||
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1', '$[2]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4041 Unexpected end of JSON path in argument 2 to function 'json_remove'
|
||
|
||
# invalid json path
|
||
error ER_INVALID_JSON_PATH
|
||
select json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', '$[2' );
|
||
json_remove( '[ 1, { "a": true, "b": false, "c": null }, 5 ]', '$[1]', '$[2' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4041 Unexpected end of JSON path in argument 3 to function 'json_remove'
|
||
|
||
# Vacuous path expression
|
||
error ER_JSON_VACUOUS_PATH
|
||
select json_remove( '[ 1, 2, 3 ]', '$' );
|
||
json_remove( '[ 1, 2, 3 ]', '$' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4051 Path expression '$' is not allowed in argument 2 to function 'json_remove'.
|
||
|
||
# Vacuous path expression
|
||
error ER_JSON_VACUOUS_PATH
|
||
select json_remove( '[ 1, 2, 3 ]', '$', '$[2]' );
|
||
json_remove( '[ 1, 2, 3 ]', '$', '$[2]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4051 Path expression '$' is not allowed in argument 2 to function 'json_remove'.
|
||
|
||
# Vacuous path expression
|
||
error ER_JSON_VACUOUS_PATH
|
||
select json_remove( '[ 1, 2, 3 ]', '$[1]', '$' );
|
||
json_remove( '[ 1, 2, 3 ]', '$[1]', '$' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4051 Path expression '$' is not allowed in argument 3 to function 'json_remove'.
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ 1, 2, 3 ]', '$[*]' );
|
||
json_remove( '[ 1, 2, 3 ]', '$[*]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_remove'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ 1, 2, 3 ]', '$**[2]' );
|
||
json_remove( '[ 1, 2, 3 ]', '$**[2]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_remove'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ 1, 2, 3 ]', '$[2]', '$[*]' );
|
||
json_remove( '[ 1, 2, 3 ]', '$[2]', '$[*]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 3 to function 'json_remove'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ 1, 2, 3 ]', '$[2]', '$**[2]' );
|
||
json_remove( '[ 1, 2, 3 ]', '$[2]', '$**[2]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 3 to function 'json_remove'
|
||
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]
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ { "a": { "a": true } } ]', '$**.a' );
|
||
json_remove( '[ { "a": { "a": true } } ]', '$**.a' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_remove'
|
||
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}]
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_remove( '[ { "a": true }, { "b": [ { "c": { "a": true } } ] }, { "c": null }, { "a": null } ]', '$**.a' );
|
||
json_remove( '[ { "a": true }, { "b": [ { "c": { "a": true } } ] }, { "c": null }, { "a": null } ]', '$**.a' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_remove'
|
||
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, {"c": 456}]}
|
||
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}]}
|
||
# ----------------------------------------------------------------------
|
||
# Test of JSON_MERGE function.
|
||
# ----------------------------------------------------------------------
|
||
|
||
# not enough args
|
||
select json_merge();
|
||
ERROR 42000: Incorrect parameter count in the call to native function 'json_merge'
|
||
|
||
# not enough args
|
||
select json_merge( '[ 1, 2, 3 ]' );
|
||
ERROR 42000: Incorrect parameter count in the call to native function 'json_merge'
|
||
select json_merge( null, null );
|
||
json_merge( null, null )
|
||
NULL
|
||
select json_merge( null, '[ 1, 2, 3 ]' );
|
||
json_merge( null, '[ 1, 2, 3 ]' )
|
||
NULL
|
||
select json_merge( '[ 1, 2, 3 ]', null );
|
||
json_merge( '[ 1, 2, 3 ]', null )
|
||
NULL
|
||
select json_merge( null, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]' );
|
||
json_merge( null, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]' )
|
||
NULL
|
||
select json_merge( '[ 1, 2, 3 ]', null, '[ 4, 5, 6 ]' );
|
||
json_merge( '[ 1, 2, 3 ]', null, '[ 4, 5, 6 ]' )
|
||
NULL
|
||
select json_merge( '[ 1, 2, 3 ]', '[ 4, 5, 6 ]', null );
|
||
json_merge( '[ 1, 2, 3 ]', '[ 4, 5, 6 ]', null )
|
||
NULL
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_merge( '[1, 2]', '[3, 4' );
|
||
json_merge( '[1, 2]', '[3, 4' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 2 to function 'json_merge_preserve'
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_merge( '[1, 2', '[3, 4]' );
|
||
json_merge( '[1, 2', '[3, 4]' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_merge_preserve'
|
||
select json_merge( '1', '2' );
|
||
json_merge( '1', '2' )
|
||
[1, 2]
|
||
select json_merge( '1', '[2, 3]' );
|
||
json_merge( '1', '[2, 3]' )
|
||
[1, 2, 3]
|
||
select json_merge( '[1, 2]', '3' );
|
||
json_merge( '[1, 2]', '3' )
|
||
[1, 2, 3]
|
||
select json_merge( '1', '{ "a": 2 }' );
|
||
json_merge( '1', '{ "a": 2 }' )
|
||
[1, {"a": 2}]
|
||
select json_merge( '{ "a": 2 }', '1' );
|
||
json_merge( '{ "a": 2 }', '1' )
|
||
[{"a": 2}, 1]
|
||
select json_merge( '[1, 2]', '[3, 4]' );
|
||
json_merge( '[1, 2]', '[3, 4]' )
|
||
[1, 2, 3, 4]
|
||
select json_merge( '{ "a": 2 }', '{ "b": 3}' );
|
||
json_merge( '{ "a": 2 }', '{ "b": 3}' )
|
||
{"a": 2, "b": 3}
|
||
select json_merge( '[1, 2]', '{ "a": 2 }' );
|
||
json_merge( '[1, 2]', '{ "a": 2 }' )
|
||
[1, 2, {"a": 2}]
|
||
select json_merge( '{ "a": 2 }', '[1, 2]' );
|
||
json_merge( '{ "a": 2 }', '[1, 2]' )
|
||
[{"a": 2}, 1, 2]
|
||
select json_merge( '{"a": 1, "b": 2 }', '{"b": 3, "d": 4 }' );
|
||
json_merge( '{"a": 1, "b": 2 }', '{"b": 3, "d": 4 }' )
|
||
{"a": 1, "b": [2, 3], "d": 4}
|
||
select json_merge( '{"a": 1, "b": 2 }', '{"b": [3, 4], "d": 4 }' );
|
||
json_merge( '{"a": 1, "b": 2 }', '{"b": [3, 4], "d": 4 }' )
|
||
{"a": 1, "b": [2, 3, 4], "d": 4}
|
||
select json_merge( '{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }' );
|
||
json_merge( '{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }' )
|
||
{"a": 1, "b": [2, 3, 4], "d": 4}
|
||
select json_merge( '{"a": 1, "b": 2 }', '{"b": {"e": 7, "f": 8}, "d": 4 }' );
|
||
json_merge( '{"a": 1, "b": 2 }', '{"b": {"e": 7, "f": 8}, "d": 4 }' )
|
||
{"a": 1, "b": [2, {"e": 7, "f": 8}], "d": 4}
|
||
select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": 2 }' );
|
||
json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": 2 }' )
|
||
{"b": [{"e": 7, "f": 8}, 2], "d": 4, "a": 1}
|
||
select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": [10, 11], "d": 4 }' );
|
||
json_merge( '{"a": 1, "b": [2, 9] }', '{"b": [10, 11], "d": 4 }' )
|
||
{"a": 1, "b": [2, 9, 10, 11], "d": 4}
|
||
select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": {"e": 7, "f": 8}, "d": 4 }' );
|
||
json_merge( '{"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( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": [2, 9] }' );
|
||
json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": [2, 9] }' )
|
||
{"b": [{"e": 7, "f": 8}, 2, 9], "d": 4, "a": 1}
|
||
select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{ "a": 1, "b": {"e": 20, "g": 21 } }' );
|
||
json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{ "a": 1, "b": {"e": 20, "g": 21 } }' )
|
||
{"b": {"e": [7, 20], "f": 8, "g": 21}, "d": 4, "a": 1}
|
||
select json_merge( '1', '2', '3' );
|
||
json_merge( '1', '2', '3' )
|
||
[1, 2, 3]
|
||
select json_merge( '[1, 2 ]', '3', '[4, 5]' );
|
||
json_merge( '[1, 2 ]', '3', '[4, 5]' )
|
||
[1, 2, 3, 4, 5]
|
||
select json_merge
|
||
(
|
||
'{ "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
|
||
(
|
||
'{ "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}, "e": [1, 2, 3, 4], "d": false, "f": [1, 2], "m": true}
|
||
SELECT JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'[ 5, 6]'
|
||
);
|
||
JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'[ 5, 6]'
|
||
)
|
||
[{"a": "foo", "b": [true, {"c": 123}]}, 5, 6]
|
||
SELECT JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'{ "b": [ false, 34 ] }'
|
||
);
|
||
JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'{ "b": [ false, 34 ] }'
|
||
)
|
||
{"a": "foo", "b": [true, {"c": 123}, false, 34]}
|
||
SELECT JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'{ "b": "bar" }'
|
||
);
|
||
JSON_MERGE
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'{ "b": "bar" }'
|
||
)
|
||
{"a": "foo", "b": [true, {"c": 123}, "bar"]}
|
||
SELECT JSON_MERGE
|
||
(
|
||
'{ "a" : { "b" : 1 } }',
|
||
'{ "a" : { "c" : 1 } }'
|
||
);
|
||
JSON_MERGE
|
||
(
|
||
'{ "a" : { "b" : 1 } }',
|
||
'{ "a" : { "c" : 1 } }'
|
||
)
|
||
{"a": {"b": 1, "c": 1}}
|
||
# ----------------------------------------------------------------------
|
||
# Test of JSON_TYPE function.
|
||
# ----------------------------------------------------------------------
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_type('abc');
|
||
json_type('abc')
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_type' at position 1
|
||
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
|
||
error ER_INVALID_TYPE_FOR_JSON
|
||
select json_type(-1);
|
||
json_type(-1)
|
||
INTEGER
|
||
error ER_INVALID_TYPE_FOR_JSON
|
||
select json_type(CAST(1 AS UNSIGNED));
|
||
json_type(CAST(1 AS UNSIGNED))
|
||
INTEGER
|
||
select json_type('32767');
|
||
json_type('32767')
|
||
INTEGER
|
||
error ER_INVALID_TYPE_FOR_JSON
|
||
select json_type(PI());
|
||
json_type(PI())
|
||
DOUBLE
|
||
select json_type('3.14');
|
||
json_type('3.14')
|
||
DOUBLE
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_type(CAST(CAST('2015-01-15' AS DATE) as CHAR CHARACTER SET 'utf8'));
|
||
json_type(CAST(CAST('2015-01-15' AS DATE) as CHAR CHARACTER SET 'utf8'))
|
||
INTEGER
|
||
# ----------------------------------------------------------------------
|
||
# Test of json_compact(literal)
|
||
# ----------------------------------------------------------------------
|
||
select json_type(json_compact(cast('2014-11-25 18:00' as datetime)));
|
||
json_type(json_compact(cast('2014-11-25 18:00' as datetime)))
|
||
INTEGER
|
||
select json_type(json_compact(cast('2014-11-25' as date)));
|
||
json_type(json_compact(cast('2014-11-25' as date)))
|
||
INTEGER
|
||
select json_type(json_compact(cast('18:00:59' as time)));
|
||
json_type(json_compact(cast('18:00:59' as time)))
|
||
INTEGER
|
||
select json_type(json_compact(127));
|
||
json_type(json_compact(127))
|
||
INTEGER
|
||
select json_type(json_compact(255));
|
||
json_type(json_compact(255))
|
||
INTEGER
|
||
select json_type(json_compact(32767));
|
||
json_type(json_compact(32767))
|
||
INTEGER
|
||
select json_type(json_compact(65535));
|
||
json_type(json_compact(65535))
|
||
INTEGER
|
||
select json_type(json_compact(8388607));
|
||
json_type(json_compact(8388607))
|
||
INTEGER
|
||
select json_type(json_compact(16777215));
|
||
json_type(json_compact(16777215))
|
||
INTEGER
|
||
select json_type(json_compact(2147483647));
|
||
json_type(json_compact(2147483647))
|
||
INTEGER
|
||
select json_type(json_compact(4294967295));
|
||
json_type(json_compact(4294967295))
|
||
INTEGER
|
||
select json_type(json_compact(9223372036854775807));
|
||
json_type(json_compact(9223372036854775807))
|
||
INTEGER
|
||
select json_type(json_compact(18446744073709551615));
|
||
json_type(json_compact(18446744073709551615))
|
||
INTEGER
|
||
select json_type(json_compact(true));
|
||
json_type(json_compact(true))
|
||
INTEGER
|
||
select json_type(json_compact(b'10101'));
|
||
json_type(json_compact(b'10101'))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_type' at position 1
|
||
select json_type(json_compact(cast(3.14 as decimal(5,2))));
|
||
json_type(json_compact(cast(3.14 as decimal(5,2))))
|
||
DOUBLE
|
||
select json_type(json_compact(3.14));
|
||
json_type(json_compact(3.14))
|
||
DOUBLE
|
||
select json_type(json_compact(3.14E30));
|
||
json_type(json_compact(3.14E30))
|
||
DOUBLE
|
||
select json_type(json_compact(cast('10101abcde' as binary)));
|
||
json_type(json_compact(cast('10101abcde' as binary)))
|
||
INTEGER
|
||
select json_type(json_compact(ST_GeomFromText('POINT(1 1)')));
|
||
json_type(json_compact(ST_GeomFromText('POINT(1 1)')))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_type' at position 1
|
||
select json_type(json_compact(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)')));
|
||
json_type(json_compact(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)')))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_type' at position 1
|
||
select json_type(json_compact(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
||
(5 5,7 5,7 7,5 7, 5 5))')));
|
||
json_type(json_compact(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
||
(5 5,7 5,7 7,5 7, 5 5))')))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_type' at position 1
|
||
select json_type(json_compact(null));
|
||
json_type(json_compact(null))
|
||
NULL
|
||
select json_type(json_compact(null)) is null;
|
||
json_type(json_compact(null)) is null
|
||
1
|
||
select json_type(null) is null;
|
||
json_type(null) is null
|
||
1
|
||
select json_compact(cast('2014-11-25 18:00' as datetime));
|
||
json_compact(cast('2014-11-25 18:00' as datetime))
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 5
|
||
select json_compact(cast('2014-11-25' as date));
|
||
json_compact(cast('2014-11-25' as date))
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 5
|
||
select json_compact(cast('18:00:59' as time));
|
||
json_compact(cast('18:00:59' as time))
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 3
|
||
select json_compact(127);
|
||
json_compact(127)
|
||
127
|
||
select json_compact(255);
|
||
json_compact(255)
|
||
255
|
||
select json_compact(32767);
|
||
json_compact(32767)
|
||
32767
|
||
select json_compact(65535);
|
||
json_compact(65535)
|
||
65535
|
||
select json_compact(8388607);
|
||
json_compact(8388607)
|
||
8388607
|
||
select json_compact(16777215);
|
||
json_compact(16777215)
|
||
16777215
|
||
select json_compact(2147483647);
|
||
json_compact(2147483647)
|
||
2147483647
|
||
select json_compact(4294967295);
|
||
json_compact(4294967295)
|
||
4294967295
|
||
select json_compact(9223372036854775807);
|
||
json_compact(9223372036854775807)
|
||
9223372036854775807
|
||
select json_compact(18446744073709551615);
|
||
json_compact(18446744073709551615)
|
||
18446744073709551615
|
||
select json_compact(true);
|
||
json_compact(true)
|
||
1
|
||
select json_compact(b'10101');
|
||
json_compact(b'10101')
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_compact' at position 1
|
||
select json_compact(cast(3.14 as decimal(5,2)));
|
||
json_compact(cast(3.14 as decimal(5,2)))
|
||
3.14
|
||
select json_compact(3.14);
|
||
json_compact(3.14)
|
||
3.14
|
||
select json_compact(3.14e0);
|
||
json_compact(3.14e0)
|
||
3.14
|
||
select json_compact(cast('10101abcde' as binary));
|
||
json_compact(cast('10101abcde' as binary))
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 6
|
||
select json_compact(ST_GeomFromText('POINT(1 1)'));
|
||
json_compact(ST_GeomFromText('POINT(1 1)'))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_compact' at position 1
|
||
select json_compact(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)'));
|
||
json_compact(ST_GeomFromText('LINESTRING(0 0,1 1,2 2)'))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_compact' at position 1
|
||
select json_compact(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
||
(5 5,7 5,7 7,5 7, 5 5))'));
|
||
json_compact(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),
|
||
(5 5,7 5,7 7,5 7, 5 5))'))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_compact' at position 1
|
||
select json_compact(null);
|
||
json_compact(null)
|
||
NULL
|
||
select json_compact(null) is null;
|
||
json_compact(null) 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')
|
||
["e", "b"]
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.*.b');
|
||
json_keys('{"a": 1, "b": {"e": "foo", "b": 3}}', '$.*.b')
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_keys'
|
||
# 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
|
||
error ER_INVALID_JSON_PATH
|
||
SELECT JSON_KEYS('{"a":1}', '1010');
|
||
JSON_KEYS('{"a":1}', '1010')
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 2 to function 'json_keys' at position 1
|
||
error ER_INVALID_JSON_PATH
|
||
SELECT JSON_KEYS('{"a":1}', '1010') IS NULL;
|
||
JSON_KEYS('{"a":1}', '1010') IS NULL
|
||
1
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 2 to function 'json_keys' at 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(json_compact(1) as char);
|
||
cast(json_compact(1) 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'
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_extract('$.a', '{"a": 1, "b": {"e": "foo", "b": 3}}');
|
||
json_extract('$.a', '{"a": 1, "b": {"e": "foo", "b": 3}}')
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 2 to function 'json_extract' at position 1
|
||
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, {"e": "foo", "b": 3}]
|
||
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
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_EXTRACT('{ "a" : [ }',
|
||
'$.b[ 1 ].c');
|
||
JSON_EXTRACT('{ "a" : [ }',
|
||
'$.b[ 1 ].c')
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 11
|
||
# raises an error because the path is invalid
|
||
error ER_INVALID_JSON_PATH
|
||
SELECT JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'$.b[ 1 ].');
|
||
JSON_EXTRACT('{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'$.b[ 1 ].')
|
||
NULL
|
||
Warnings:
|
||
Warning 4041 Unexpected end of JSON path in argument 2 to function 'json_extract'
|
||
# 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 123 (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')
|
||
123
|
||
# 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]
|
||
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( '{ "a": 1 }', '$.a[0]' );
|
||
json_extract( '{ "a": 1 }', '$.a[0]' )
|
||
1
|
||
select json_extract( '{ "a": 1 }', '$**[0]' );
|
||
json_extract( '{ "a": 1 }', '$**[0]' )
|
||
[{"a": 1}, 1]
|
||
select json_extract( '{ "a": 1 }', '$[0].a' );
|
||
json_extract( '{ "a": 1 }', '$[0].a' )
|
||
1
|
||
select json_extract( '{ "a": 1 }', '$**.a' );
|
||
json_extract( '{ "a": 1 }', '$**.a' )
|
||
[1]
|
||
select json_extract( '{ "a": 1 }', '$[0].a[0]' );
|
||
json_extract( '{ "a": 1 }', '$[0].a[0]' )
|
||
1
|
||
select json_extract( '{ "a": 1 }', '$**[0]' );
|
||
json_extract( '{ "a": 1 }', '$**[0]' )
|
||
[{"a": 1}, 1]
|
||
select json_extract( '{ "a": 1 }', '$[0].a' );
|
||
json_extract( '{ "a": 1 }', '$[0].a' )
|
||
1
|
||
select json_extract( '{ "a": 1 }', '$**.a' );
|
||
json_extract( '{ "a": 1 }', '$**.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('[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
|
||
(
|
||
'{ "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
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_EXTRACT
|
||
(
|
||
'{ "a" : [ }',
|
||
'$.b[ 1 ].c'
|
||
);
|
||
JSON_EXTRACT
|
||
(
|
||
'{ "a" : [ }',
|
||
'$.b[ 1 ].c'
|
||
)
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 11
|
||
error ER_INVALID_JSON_PATH
|
||
SELECT JSON_EXTRACT
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'$.b[ 1 ].'
|
||
);
|
||
JSON_EXTRACT
|
||
(
|
||
'{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }',
|
||
'$.b[ 1 ].'
|
||
)
|
||
NULL
|
||
Warnings:
|
||
Warning 4041 Unexpected end of JSON path in argument 2 to function 'json_extract'
|
||
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'
|
||
)
|
||
123
|
||
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', json_compact(1));
|
||
json_array_append(NULL, '$.b', json_compact(1))
|
||
NULL
|
||
select json_array_append('[1,2,3]', NULL, json_compact(1));
|
||
json_array_append('[1,2,3]', NULL, json_compact(1))
|
||
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(json_compact('1'), '$', 3);
|
||
JSON_ARRAY_APPEND(json_compact('1'), '$', 3)
|
||
[1, 3]
|
||
SELECT JSON_ARRAY_APPEND(json_compact('{"a": 3}'), '$', 3);
|
||
JSON_ARRAY_APPEND(json_compact('{"a": 3}'), '$', 3)
|
||
[{"a": 3}, 3]
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_array_append(json_compact('{"a": {"b": [3]}}'), '$**[0]', 6);
|
||
json_array_append(json_compact('{"a": {"b": [3]}}'), '$**[0]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_array_append'
|
||
# 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', json_compact(4),
|
||
'$.c', json_compact('"grape"'));
|
||
JSON_ARRAY_APPEND('{"a": "foo", "b": "bar", "c": "wibble"}',
|
||
'$.b', json_compact(4),
|
||
'$.c', json_compact('"grape"'))
|
||
{"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', json_compact(4),
|
||
'$.c', json_compact('"grape"'));
|
||
JSON_ARRAY_APPEND('{"a" : "foo","b": [1, 2, 3], "c": ["apple", "pear"]}',
|
||
'$.b', json_compact(4),
|
||
'$.c', json_compact('"grape"'))
|
||
{"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"]}
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_array_append( '[[], [], []]', '$[*]', 3, '$[*]', 4);
|
||
json_array_append( '[[], [], []]', '$[*]', 3, '$[*]', 4)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_array_append'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_array_append( '[[], "not array", []]', '$[*]', 3, '$[*]', 4);
|
||
json_array_append( '[[], "not array", []]', '$[*]', 3, '$[*]', 4)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_array_append'
|
||
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', json_compact(1));
|
||
json_insert(NULL, '$.b', json_compact(1))
|
||
NULL
|
||
select json_insert('[1,2,3]', NULL, json_compact(1));
|
||
json_insert('[1,2,3]', NULL, json_compact(1))
|
||
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]', '$[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('{"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)
|
||
{"c": 4, "a": 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,2,3]', '$[2][0]', 4);
|
||
json_insert('[1,2,3]', '$[2][0]', 4)
|
||
[1, 2, 3]
|
||
select json_insert('[1,2,3]', '$[2][2]', 4);
|
||
json_insert('[1,2,3]', '$[2][2]', 4)
|
||
[1, 2, [3, 4]]
|
||
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"]}
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": [1], "b": 2}'), '$.*[1]', 6);
|
||
json_insert(json_compact('{"a": [1], "b": 2}'), '$.*[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": 1, "b": 2}'), '$.*[1]', 6);
|
||
json_insert(json_compact('{"a": 1, "b": 2}'), '$.*[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": {"b": 3}}'), '$.a.*[1]', 6);
|
||
json_insert(json_compact('{"a": {"b": 3}}'), '$.a.*[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": {"b": [3]}}'), '$.a.*[1]', 6);
|
||
json_insert(json_compact('{"a": {"b": [3]}}'), '$.a.*[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": {"b": 3}}'), '$**[1]', 6);
|
||
json_insert(json_compact('{"a": {"b": 3}}'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('{"a": {"b": [3]}}'), '$**[1]', 6);
|
||
json_insert(json_compact('{"a": {"b": [3]}}'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[1]'), '$[*][1]', 6);
|
||
json_insert(json_compact('[1]'), '$[*][1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[1]'), '$**[1]', 6);
|
||
json_insert(json_compact('[1]'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[1, [2], 3]'), '$[*][1]', 6);
|
||
json_insert(json_compact('[1, [2], 3]'), '$[*][1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[1, [2], 3]'), '$**[1]', 6);
|
||
json_insert(json_compact('[1, [2], 3]'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[[1]]'), '$[*][1]', 6);
|
||
json_insert(json_compact('[[1]]'), '$[*][1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert(json_compact('[[1]]'), '$**[1]', 6);
|
||
json_insert(json_compact('[[1]]'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
select json_insert(json_compact('{"a": 3}'), '$[1]', 6);
|
||
json_insert(json_compact('{"a": 3}'), '$[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'
|
||
error ER_INVALID_JSON_PATH_ARRAY_CELL
|
||
select json_array_insert('true', '$', 1);
|
||
json_array_insert('true', '$', 1)
|
||
NULL
|
||
error ER_INVALID_JSON_PATH_ARRAY_CELL
|
||
select json_array_insert('true', '$.a', 1);
|
||
json_array_insert('true', '$.a', 1)
|
||
NULL
|
||
error ER_INVALID_JSON_PATH_ARRAY_CELL
|
||
select json_array_insert('true', '$.a[1].b', 1);
|
||
json_array_insert('true', '$.a[1].b', 1)
|
||
NULL
|
||
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( '[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( '[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( '{ "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] }', '$.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"
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert('[]', '$.a.*[1]', 6);
|
||
json_insert('[]', '$.a.*[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert('[]', '$**[1]', 6);
|
||
json_insert('[]', '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_insert('[]', '$[*][1]', 6);
|
||
json_insert('[]', '$[*][1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_insert'
|
||
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]',
|
||
json_compact( '[ "a", "b", "c", "d" ]'), '$[1][2]', false );
|
||
json_array_insert( '[ 1, 2, 3 ]', '$[1]',
|
||
json_compact( '[ "a", "b", "c", "d" ]'), '$[1][2]', false )
|
||
[1, ["a", "b", false, "c", "d"], 2, 3]
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_ARRAY_INSERT(JSON_EXTRACT('[1', '$'), '$[0]', 1);
|
||
JSON_ARRAY_INSERT(JSON_EXTRACT('[1', '$'), '$[0]', 1)
|
||
NULL
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_extract'
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
select json_array_insert( '[ 1, 2, 3 ]', '$[1]', json_extract( '[', '$' ) );
|
||
json_array_insert( '[ 1, 2, 3 ]', '$[1]', json_extract( '[', '$' ) )
|
||
[1, null, 2, 3]
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_extract'
|
||
# ----------------------------------------------------------------------
|
||
# Test of JSON_SET function.
|
||
# ----------------------------------------------------------------------
|
||
select json_set(NULL, '$.b', json_compact(1));
|
||
json_set(NULL, '$.b', json_compact(1))
|
||
NULL
|
||
select json_set('[1,2,3]', NULL, json_compact(1));
|
||
json_set('[1,2,3]', NULL, json_compact(1))
|
||
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'
|
||
error ER_INVALID_JSON_TEXT_IN_PARAM
|
||
SELECT JSON_SET('{}', '$.name', JSON_EXTRACT('', '$'));
|
||
JSON_SET('{}', '$.name', JSON_EXTRACT('', '$'))
|
||
{"name": null}
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_extract'
|
||
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('{"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)
|
||
{"c": 4, "a": 5}
|
||
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,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('{"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"]}
|
||
error ER_INVALID_JSON_PATH_WILDCARD
|
||
select json_set(json_compact('{"a": {"b": [3]}}'), '$**[1]', 6);
|
||
json_set(json_compact('{"a": {"b": [3]}}'), '$**[1]', 6)
|
||
NULL
|
||
Warnings:
|
||
Warning 4044 Wildcards in JSON path not allowed in argument 2 to function 'json_set'
|
||
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',
|
||
json_compact('{}'));
|
||
json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
||
'$.a',
|
||
json_compact('{}'))
|
||
{"a": {}, "b": [1, 2, 3]}
|
||
select json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
||
'$.c',
|
||
json_compact('[true, false]'));
|
||
json_set('{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
||
'$.c',
|
||
json_compact('[true, false]'))
|
||
{"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_compact('{"b": false}'), '$.a.c', true);
|
||
json_set('{ "a" : "foo"}', '$.a',
|
||
json_compact('{"b": false}'), '$.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( json_compact( 'true'), json_compact( 'false') )
|
||
);
|
||
JSON_SET
|
||
(
|
||
'{ "a" : "foo", "b" : [ 1, 2, 3 ] }',
|
||
'$.c',
|
||
JSON_ARRAY( json_compact( 'true'), json_compact( 'false') )
|
||
)
|
||
{"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', json_compact(1));
|
||
json_replace(NULL, '$.b', json_compact(1))
|
||
NULL
|
||
select json_replace('[1,2,3]', NULL, json_compact(1));
|
||
json_replace('[1,2,3]', NULL, json_compact(1))
|
||
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('{"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('{ "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', json_compact(1));
|
||
json_array(NULL, '$.b', json_compact(1))
|
||
[null, "$.b", 1]
|
||
select json_array('[1,2,3]', NULL, json_compact(1));
|
||
json_array('[1,2,3]', NULL, json_compact(1))
|
||
["[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(json_compact('[1,2,3]'));
|
||
json_array(json_compact('[1,2,3]'))
|
||
[[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')
|
||
["\u0000", "\u0001", "\u0002"]
|
||
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'
|
||
error ER_JSON_DOCUMENT_NULL_KEY
|
||
select json_object( null, 1 );
|
||
json_object( null, 1 )
|
||
{"": 1}
|
||
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', json_compact( '{ "d": "wibble" }') );
|
||
json_object( 'a', 1, 'b', 'foo', 'c', json_compact( '{ "d": "wibble" }') )
|
||
{"a": 1, "b": "foo", "c": { "d": "wibble" }}
|
||
select json_object( 'a', true, 'b', false, 'c', json_compact( 'null') );
|
||
json_object( 'a', true, 'b', false, 'c', json_compact( 'null') )
|
||
{"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();
|
||
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
|
||
error ER_JSON_BAD_ONE_OR_ALL_ARG
|
||
select json_search( '{ "a": "foo" }', 'twof', 'foo' );
|
||
json_search( '{ "a": "foo" }', 'twof', 'foo' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4046 Argument 2 to function 'json_search' must be "one" or "all".
|
||
error ER_JSON_BAD_ONE_OR_ALL_ARG
|
||
select json_search( '{ "a": "foo" }', 'two', 'foo' );
|
||
json_search( '{ "a": "foo" }', 'two', 'foo' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4046 Argument 2 to function 'json_search' must be "one" or "all".
|
||
select json_search( '{ "a": "foo" }', 'one', 'foo', 'ab' );
|
||
ERROR HY000: Incorrect arguments to ESCAPE
|
||
error ER_INVALID_JSON_PATH
|
||
select json_search( '{ "a": "foo" }', 'one', 'foo', null, '$a' );
|
||
json_search( '{ "a": "foo" }', 'one', 'foo', null, '$a' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 5 to function 'json_search' at position 2
|
||
error ER_INVALID_JSON_PATH
|
||
select json_search( '{ "a": "foo" }', 'all', 'foo', null, '$.a', '$b' );
|
||
json_search( '{ "a": "foo" }', 'all', 'foo', null, '$.a', '$b' )
|
||
NULL
|
||
Warnings:
|
||
Warning 4042 Syntax error in JSON path in argument 6 to function 'json_search' at position 2
|
||
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' )
|
||
["$[0]", "$[1]"]
|
||
select json_search( '[ "abc", "ABC" ]', 'all', 'abc' );
|
||
json_search( '[ "abc", "ABC" ]', 'all', 'abc' )
|
||
["$[0]", "$[1]"]
|
||
select json_search( '[ "abc", "ABC" ]', 'all', 'ABC' );
|
||
json_search( '[ "abc", "ABC" ]', 'all', 'ABC' )
|
||
["$[0]", "$[1]"]
|
||
select json_search( '[ 10, "10", 1.0, "1.0" ]', 'all', '1%' );
|
||
json_search( '[ 10, "10", 1.0, "1.0" ]', 'all', '1%' )
|
||
["$[0]", "$[1]", "$[2]", "$[3]"]
|
||
SELECT JSON_SEARCH
|
||
(
|
||
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
||
'one',
|
||
'123'
|
||
);
|
||
JSON_SEARCH
|
||
(
|
||
'{ "a" : 123, "b" : [ 123, 456 ] }',
|
||
'one',
|
||
'123'
|
||
)
|
||
"$.a"
|
||
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[0]"
|
||
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
|
||
json_compact('null') else
|
||
json_compact('[1,2,3]') end);
|
||
json_type(case (null is null) when 1 then
|
||
json_compact('null') else
|
||
json_compact('[1,2,3]') end)
|
||
NULL
|
||
select json_type(case (null is not null) when 1 then
|
||
json_compact('null') else
|
||
json_compact('[1,2,3]') end);
|
||
json_type(case (null is not null) when 1 then
|
||
json_compact('null') else
|
||
json_compact('[1,2,3]') end)
|
||
ARRAY
|
||
select json_type( if(null is null,
|
||
json_compact('null'),
|
||
json_compact('[1,2,3]')) );
|
||
json_type( if(null is null,
|
||
json_compact('null'),
|
||
json_compact('[1,2,3]')) )
|
||
NULL
|
||
select json_type( if(null is not null,
|
||
json_compact('null'),
|
||
json_compact('[1,2,3]')));
|
||
json_type( if(null is not null,
|
||
json_compact('null'),
|
||
json_compact('[1,2,3]')))
|
||
ARRAY
|
||
select cast(json_extract(json_compact(concat('[', json_compact('["A",2]'), ']')),
|
||
'$[0][1]') as char) = 2;
|
||
cast(json_extract(json_compact(concat('[', json_compact('["A",2]'), ']')),
|
||
'$[0][1]') as char) = 2
|
||
1
|
||
# ----------------------------------------------------------------------
|
||
# Test of aggregate function MAX, MIN.
|
||
# ----------------------------------------------------------------------
|
||
select max(json_compact('[1,2,3]'));
|
||
max(json_compact('[1,2,3]'))
|
||
[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"
|
||
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
|
||
select json_unquote(convert('"abc"' using utf8mb4));
|
||
json_unquote(convert('"abc"' using utf8mb4))
|
||
abc
|
||
select json_quote('"');
|
||
json_quote('"')
|
||
"\""
|
||
select json_unquote('"');
|
||
json_unquote('"')
|
||
"
|
||
Warnings:
|
||
Warning 4037 Unexpected end of JSON text in argument 1 to function 'json_unquote'
|
||
error ER_INCORRECT_TYPE
|
||
select json_quote(123);
|
||
json_quote(123)
|
||
NULL
|
||
error ER_INCORRECT_TYPE
|
||
select json_unquote(123);
|
||
json_unquote(123)
|
||
123
|
||
select json_unquote('""');
|
||
json_unquote('""')
|
||
|
||
select char_length(json_unquote('""'));
|
||
char_length(json_unquote('""'))
|
||
0
|
||
select json_unquote('"" ');
|
||
json_unquote('"" ')
|
||
|
||
select json_unquote(json_compact(json_quote('abc')));
|
||
json_unquote(json_compact(json_quote('abc')))
|
||
abc
|
||
select json_compact('{"abc": "foo"}');
|
||
json_compact('{"abc": "foo"}')
|
||
{"abc":"foo"}
|
||
select json_unquote(json_compact('{"abc": "foo"}'));
|
||
json_unquote(json_compact('{"abc": "foo"}'))
|
||
{"abc": "foo"}
|
||
select json_extract(json_compact('{"abc": "foo"}'), '$.abc');
|
||
json_extract(json_compact('{"abc": "foo"}'), '$.abc')
|
||
"foo"
|
||
select json_unquote(json_extract(json_compact('{"abc": "foo"}'), '$.abc'));
|
||
json_unquote(json_extract(json_compact('{"abc": "foo"}'), '$.abc'))
|
||
foo
|
||
select json_unquote('["a", "b", "c"]');
|
||
json_unquote('["a", "b", "c"]')
|
||
["a", "b", "c"]
|
||
select json_unquote(json_compact('["a", "b", "c"]'));
|
||
json_unquote(json_compact('["a", "b", "c"]'))
|
||
["a", "b", "c"]
|
||
select charset(json_unquote('"abc"'));
|
||
charset(json_unquote('"abc"'))
|
||
utf8mb3
|
||
select json_quote(convert(X'e68891' using utf8));
|
||
json_quote(convert(X'e68891' using utf8))
|
||
"我"
|
||
select json_quote(convert(X'e68891' using utf8mb4));
|
||
json_quote(convert(X'e68891' using utf8mb4))
|
||
"我"
|
||
select json_compact(json_quote(convert(X'e68891' using utf8)));
|
||
json_compact(json_quote(convert(X'e68891' using utf8)))
|
||
"我"
|
||
select json_unquote(convert(X'e68891' using utf8));
|
||
json_unquote(convert(X'e68891' using utf8))
|
||
我
|
||
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 json_compact(cast('2015-01-15 23:24:25' as datetime));
|
||
json_compact(cast('2015-01-15 23:24:25' as datetime))
|
||
NULL
|
||
Warnings:
|
||
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_compact' at position 5
|
||
select json_unquote(json_compact(cast('2015-01-15 23:24:25' as datetime)));
|
||
json_unquote(json_compact(cast('2015-01-15 23:24:25' as datetime)))
|
||
2015-01-15 23:24:25
|
||
select json_compact(st_geomfromtext('point(1 1)'));
|
||
json_compact(st_geomfromtext('point(1 1)'))
|
||
NULL
|
||
Warnings:
|
||
Warning 4036 Character disallowed in JSON in argument 1 to function 'json_compact' at position 1
|
||
select json_unquote(json_compact(st_geomfromtext('point(1 1)')));
|
||
json_unquote(json_compact(st_geomfromtext('point(1 1)')))
|
||
|