--source ../include/have_columnstore.inc --disable_warnings DROP DATABASE IF EXISTS json_valid_db; --enable_warnings CREATE DATABASE json_valid_db; USE json_valid_db; --echo # ---------------------------------------------------------------------- --echo # Test of JSON_VALID function. --echo # ---------------------------------------------------------------------- --echo # --echo # String literal - valid JSON --echo # CREATE TABLE t1(l LONGTEXT) ENGINE = COLUMNSTORE; INSERT INTO t1 VALUES ('123'); INSERT INTO t1 VALUES ('-123'); INSERT INTO t1 VALUES ('5000000000'); INSERT INTO t1 VALUES ('-5000000000'); INSERT INTO t1 VALUES ('1.23'); INSERT INTO t1 VALUES ('"123"'); INSERT INTO t1 VALUES ('true'); INSERT INTO t1 VALUES ('false'); INSERT INTO t1 VALUES ('null'); INSERT INTO t1 VALUES ('{"address": "Trondheim"}'); INSERT INTO t1 VALUES (JSON_OBJECT()); INSERT INTO t1 VALUES (JSON_OBJECT(1, 2)); INSERT INTO t1 VALUES (JSON_ARRAY()); INSERT INTO t1 VALUES (JSON_ARRAY(1, 2)); SELECT l AS raw, JSON_VALID(l) AS is_valid, JSON_VALID(JSON_COMPACT(l)) AS compact FROM t1; --echo # --echo # String literal - invalid JSON --echo # TRUNCATE t1; INSERT INTO t1 VALUES ('12 3'); INSERT INTO t1 VALUES ('{key:value}'); INSERT INTO t1 VALUES ('{key:value'); INSERT INTO t1 VALUES ('[1,2,]'); INSERT INTO t1 VALUES ('[1,2'); SELECT l AS raw, JSON_VALID(l) AS is_valid, JSON_VALID(JSON_COMPACT(l)) AS compact FROM t1; --echo # --echo # String literal - not in UTF-8 --echo # TRUNCATE t1; SET NAMES 'ascii'; INSERT INTO t1 VALUES ('123'); SELECT l AS raw, JSON_VALID(l) AS is_valid, JSON_VALID(JSON_COMPACT(l)) AS compact FROM t1; SET NAMES 'utf8'; --echo # --echo # Bare NULL --echo # TRUNCATE t1; INSERT INTO t1 VALUES (NULL); SELECT JSON_VALID(l) FROM t1; --echo # --echo # Function result - string --echo # TRUNCATE t1; INSERT INTO t1 VALUES (UPPER('"abc"')); SELECT JSON_VALID(l) FROM t1; --echo # --echo # Function result - string not in UTF-8 --echo # TRUNCATE t1; SET NAMES 'latin1'; INSERT INTO t1 VALUES (UPPER('"abc"')); SELECT JSON_VALID(l) FROM t1; SET NAMES 'utf8'; --echo # --echo # Function result - date, not valid as JSON without CAST --echo # TRUNCATE t1; INSERT INTO t1 VALUES (CAST('2015-01-15' AS DATE)); SELECT JSON_VALID(l) FROM t1; --echo # --echo # The date string doesn't parse as JSON text, so wrong: --echo # TRUNCATE t1; INSERT INTO t1 VALUES ( CAST( CAST('2015-01-15' AS DATE) AS CHAR CHARACTER SET 'utf8' ) ); SELECT JSON_VALID(l) FROM t1; --echo # --echo # Function result - NULL --echo # TRUNCATE t1; INSERT INTO t1 VALUES (UPPER(NULL)); INSERT INTO t1 VALUES (UPPER(CAST(NULL AS CHAR))); SELECT JSON_VALID(l) FROM t1; DROP TABLE t1; DROP DATABASE json_valid_db;