summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2022-12-29 17:34:53 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2022-12-29 17:34:53 +0530
commit1be914eebd3643ef7f428cf27434675e757ec35f (patch)
treeb21cc5223d546b07406a62ede1e9f247d69695d3
parent5bb2cc8dbcfba3aa1e19a0b0d7ffcf27eed3290e (diff)
downloadmariadb-git-bb-10.9-MDEV-29381.tar.gz
MDEV-29381: JSON paths containing dashes are reported as syntax errors inbb-10.9-MDEV-29381
procedures Analysis: While scanning json path, when '-' is encountered while scanning a key, the the json_path_transition reports incorrect state that denotes syntax error. Hence it incorrectly reports error. Fix: Change JE_SYN to PS_KNMX to keep scanning the key.
-rw-r--r--mysql-test/main/func_json.result14
-rw-r--r--mysql-test/main/func_json.test20
-rw-r--r--strings/json_lib.c2
3 files changed, 35 insertions, 1 deletions
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result
index 02f044be479..043b2ea375b 100644
--- a/mysql-test/main/func_json.result
+++ b/mysql-test/main/func_json.result
@@ -2348,5 +2348,19 @@ SELECT JSON_OVERLAPS(@json1, @json2);
JSON_OVERLAPS(@json1, @json2)
0
#
+# MDEV-29381: JSON paths containing dashes are reported as
+# syntax errors in procedures
+#
+DROP PROCEDURE IF EXISTS my_proc;
+Warnings:
+Note 1305 PROCEDURE test.my_proc does not exist
+CREATE PROCEDURE my_proc()
+BEGIN
+DECLARE result TEXT;
+SET result = JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
+END $$
+CALL my_proc();
+DROP PROCEDURE IF EXISTS my_proc;
+#
# End of 10.9 Test
#
diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test
index 8123ab4be8a..88d9eb4e775 100644
--- a/mysql-test/main/func_json.test
+++ b/mysql-test/main/func_json.test
@@ -1605,6 +1605,26 @@ SET @json2 = '{"kk":{"k1":"v1","k2":"v2","k3":"v3"}}';
SELECT JSON_OVERLAPS(@json2, @json1);
SELECT JSON_OVERLAPS(@json1, @json2);
+
+--echo #
+--echo # MDEV-29381: JSON paths containing dashes are reported as
+--echo # syntax errors in procedures
+--echo #
+
+DROP PROCEDURE IF EXISTS my_proc;
+
+DELIMITER $$;
+CREATE PROCEDURE my_proc()
+BEGIN
+DECLARE result TEXT;
+SET result = JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
+END $$
+DELIMITER ;$$
+
+CALL my_proc();
+
+DROP PROCEDURE IF EXISTS my_proc;
+
--echo #
--echo # End of 10.9 Test
--echo #
diff --git a/strings/json_lib.c b/strings/json_lib.c
index 380959cf204..8febbe75e4c 100644
--- a/strings/json_lib.c
+++ b/strings/json_lib.c
@@ -1111,7 +1111,7 @@ static int json_path_transitions[N_PATH_STATES][N_PATH_CLASSES]=
/* KEYX*/ { JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, JE_SYN,
PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_ESCX, PS_EKYX, PS_KNMX,
JE_NOT_JSON_CHR, JE_BAD_CHR},
-/* KNMX */{ JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, JE_SYN,
+/* KNMX */{ JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX,
PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_ESCX, PS_EKYX, PS_KNMX,
JE_NOT_JSON_CHR, JE_BAD_CHR},
/* LAST */{ JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_SYN, PS_PT, JE_SYN, PS_NEG,