File: json_schema_validation_report.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (102 lines) | stat: -rw-r--r-- 3,451 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
--echo # See that NULL-handling is correct
SELECT JSON_SCHEMA_VALIDATION_REPORT(NULL, NULL);
SELECT JSON_SCHEMA_VALIDATION_REPORT(JSON_OBJECT(), NULL);
SELECT JSON_SCHEMA_VALIDATION_REPORT(NULL, JSON_OBJECT());

--echo # A few "happy" cases
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type": "object"}', '{}');
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type": "array"}', '[]');

--echo # Cases where the JSON document is invalid
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type": "object"}', '[]');
SELECT JSON_SCHEMA_VALIDATION_REPORT('{
  "type": "object",
  "properties": {
    "geometry": {
      "type": "object",
      "properties": {
        "latitude": {
          "minimum": -90
        }
      }
    }
 }
}',
'{
  "geometry": {
    "longitude": -90,
    "latitude": -180
  }
}');

--echo # A case where the JSON Schema is invalid
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type": "object-object"}', '{}');

--echo # Non-json JSON Schema input
--error ER_INVALID_TYPE_FOR_JSON
SELECT JSON_SCHEMA_VALIDATION_REPORT(POINT(1, 1), '{}');
--error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_SCHEMA_VALIDATION_REPORT('{ bar', '{}');

--echo # Non-object JSON Schema input
--error ER_INVALID_JSON_TYPE
SELECT JSON_SCHEMA_VALIDATION_REPORT('[]', '{}');

--echo # Non-json JSON document input
--error ER_INVALID_TYPE_FOR_JSON
SELECT JSON_SCHEMA_VALIDATION_REPORT('{}', POINT(1, 1));
--error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_SCHEMA_VALIDATION_REPORT('{}', '{ bar');

--echo # Wrong argument count
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT JSON_SCHEMA_VALIDATION_REPORT();
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT JSON_SCHEMA_VALIDATION_REPORT(NULL);
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT JSON_SCHEMA_VALIDATION_REPORT(NULL, NULL, NULL);


--echo # Ensure that our item tree transformation doesn't get stuck forever when
--echo # using prepared statements.
PREPARE stmt FROM 'SELECT JSON_SCHEMA_VALIDATION_REPORT(?, ''{}'') FROM DUAL';
SET @json_schema = '{"type":"object"}';
SET @null = NULL;
EXECUTE stmt USING @json_schema;
EXECUTE stmt USING @null;
EXECUTE stmt USING @json_schema;

--echo #
--echo # Bug#29529220: WL#13005: ASSERTION FAILURE: `!ARGS[0]->CONST_ITEM()'
--echo # Bug#29528888: WL#11999: SIG6 IN ITEM_FUNC_JSON_SCHEMA_VALID::VAL_BOOL()
--echo #               AT ITEM_JSON_FUNC.CC
--echo #
CREATE TABLE t1 (pk INT PRIMARY KEY, j JSON);
INSERT INTO t1 VALUES (1, '{"key": "foobar"}' );
SELECT JSON_SCHEMA_VALIDATION_REPORT(j, j) FROM t1 WHERE pk = 1;
SELECT JSON_SCHEMA_VALIDATION_REPORT(t2.j, t2.j)
FROM t1, (SELECT * FROM t1 WHERE pk = 1) t2;
DROP TABLE t1;

--echo #
--echo # Bug#30622327: JSON SCHEMA FUNCTIONS SHOULD CHECK ARGUMENT TYPES
--echo #               AT RESOLVE TIME
--echo #
CREATE TABLE t(j JSON, g GEOMETRY);
--error ER_INVALID_TYPE_FOR_JSON
PREPARE ps FROM 'SELECT * FROM t WHERE JSON_SCHEMA_VALIDATION_REPORT(j, g)';
--error ER_INVALID_TYPE_FOR_JSON
PREPARE ps FROM 'SELECT * FROM t WHERE JSON_SCHEMA_VALIDATION_REPORT(g, j)';
DROP TABLE t;

--echo #
--echo # Bug#32047630: MISSING ERROR PROPAGATION IN JSON FUNCTIONS
--echo #

--error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_ARRAY(JSON_SCHEMA_VALIDATION_REPORT('{}', '{'), 1);
--error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_ARRAY(JSON_SCHEMA_VALIDATION_REPORT('{}', CAST('{' AS JSON)), 1);
--error ER_INVALID_JSON_TEXT_IN_PARAM
SELECT JSON_ARRAY(JSON_SCHEMA_VALIDATION_REPORT(
                  CAST(CONCAT('{', RAND()) AS JSON), '{}'), 1);