Skip to content

Commit

Permalink
MDEV-15561 json_extract returns NULL with numbers in scientific notat…
Browse files Browse the repository at this point in the history
…ion.

Scientific notation handling fixed.
  • Loading branch information
Alexey Botchkov committed Mar 24, 2018
1 parent 7003067 commit d702e46
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 32 deletions.
3 changes: 3 additions & 0 deletions mysql-test/r/func_json.result
Original file line number Diff line number Diff line change
Expand Up @@ -736,3 +736,6 @@ insert into t1 values (2),(1);
select 1 from t1 where json_extract(a,'$','$[81]');
1
drop table t1;
select json_extract('{"test":8.437e-5}','$.test');
json_extract('{"test":8.437e-5}','$.test')
8.437e-5
40 changes: 10 additions & 30 deletions mysql-test/suite/json/r/json_no_table.result
Original file line number Diff line number Diff line change
Expand Up @@ -1061,9 +1061,7 @@ json_type(json_compact(3.14))
DOUBLE
select json_type(json_compact(3.14E30));
json_type(json_compact(3.14E30))
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_type' at position 7
DOUBLE
select json_type(json_compact(cast('10101abcde' as binary)));
json_type(json_compact(cast('10101abcde' as binary)))
INTEGER
Expand Down Expand Up @@ -3445,52 +3443,34 @@ JSON_ARRAY(CASE WHEN 1 THEN NULL ELSE NULL END)
#
SELECT JSON_EXTRACT('-1E-36181012216111515851075235238', '$');
JSON_EXTRACT('-1E-36181012216111515851075235238', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 33
-1E-36181012216111515851075235238
SELECT JSON_EXTRACT('1E-36181012216111515851075235238', '$');
JSON_EXTRACT('1E-36181012216111515851075235238', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 32
1E-36181012216111515851075235238
SELECT JSON_EXTRACT('1E-325', '$');
JSON_EXTRACT('1E-325', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 6
1E-325
SELECT JSON_EXTRACT('1E-324', '$');
JSON_EXTRACT('1E-324', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 6
1E-324
SELECT JSON_EXTRACT('1E-323', '$');
JSON_EXTRACT('1E-323', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 6
1E-323
SELECT JSON_EXTRACT('1E+308', '$');
JSON_EXTRACT('1E+308', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 6
1E+308
error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_EXTRACT('1E+309', '$');
JSON_EXTRACT('1E+309', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 6
1E+309
error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_EXTRACT('1E+36181012216111515851075235238', '$');
JSON_EXTRACT('1E+36181012216111515851075235238', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 32
1E+36181012216111515851075235238
error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_EXTRACT('-1E+36181012216111515851075235238', '$');
JSON_EXTRACT('-1E+36181012216111515851075235238', '$')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 33
-1E+36181012216111515851075235238
#
# Bug#21383284: ASSERTION IN SELECT_LEX::SETUP_CONDS
#
Expand Down
6 changes: 6 additions & 0 deletions mysql-test/t/func_json.test
Original file line number Diff line number Diff line change
Expand Up @@ -392,3 +392,9 @@ insert into t1 values (2),(1);
select 1 from t1 where json_extract(a,'$','$[81]');
drop table t1;

#
# MDEV-15561 json_extract returns NULL with numbers in scientific notation.
#

select json_extract('{"test":8.437e-5}','$.test');

4 changes: 2 additions & 2 deletions strings/json_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,8 +475,8 @@ static int json_num_states[NS_NUM_STATES][N_NUM_CLASSES]=
/*ZE1*/ { JE_SYN, JE_SYN, JE_SYN, JE_SYN, NS_FRAC, JE_SYN, NS_OK, JE_BAD_CHR },
/*INT*/ { JE_SYN, JE_SYN, NS_INT, NS_INT, NS_FRAC, NS_EX, NS_OK, JE_BAD_CHR },
/*FRAC*/ { JE_SYN, JE_SYN, NS_FRAC, NS_FRAC,JE_SYN, NS_EX, NS_OK, JE_BAD_CHR },
/*EX*/ { NS_EX1, NS_EX1, NS_EX1, NS_EX1, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },
/*EX1*/ { JE_SYN, JE_SYN, NS_EX1, NS_EX1, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR }
/*EX*/ { NS_EX, NS_EX, NS_EX1, NS_EX1, JE_SYN, JE_SYN, JE_SYN, JE_BAD_CHR },
/*EX1*/ { JE_SYN, JE_SYN, NS_EX1, NS_EX1, JE_SYN, JE_SYN, NS_OK, JE_BAD_CHR }
};


Expand Down

0 comments on commit d702e46

Please sign in to comment.