mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-16351 JSON_OBJECT() treats hybrid functions with boolean arguments as numbers
Now the boolean data type is preserved in hybrid functions and MIN/MAX, so COALESCE(bool_expr,bool_expr) and MAX(bool_expr) are correctly detected by JSON_OBJECT() as being boolean rather than numeric expressions.
This commit is contained in:
@@ -768,3 +768,91 @@ json_length json_depnth
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.4 tests
|
||||
#
|
||||
#
|
||||
# MDEV-16351 JSON_OBJECT() treats hybrid functions with boolean arguments as numbers
|
||||
#
|
||||
SELECT
|
||||
JSON_OBJECT("cond", true) AS j1,
|
||||
JSON_OBJECT("cond", COALESCE(true, false)) j2,
|
||||
JSON_OBJECT("cond", COALESCE(COALESCE(true, false))) j3;
|
||||
j1 {"cond": true}
|
||||
j2 {"cond": true}
|
||||
j3 {"cond": true}
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a)=4 FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a)=4 FROM t1))
|
||||
{"x": false}
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a)=3 FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a)=3 FROM t1))
|
||||
{"x": true}
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a)=2 FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a)=2 FROM t1))
|
||||
{"x": false}
|
||||
SELECT JSON_OBJECT('x',MAX(a=4)) FROM t1;
|
||||
JSON_OBJECT('x',MAX(a=4))
|
||||
{"x": false}
|
||||
SELECT JSON_OBJECT('x',MAX(a=3)) FROM t1;
|
||||
JSON_OBJECT('x',MAX(a=3))
|
||||
{"x": true}
|
||||
SELECT JSON_OBJECT('x',MAX(a=2)) FROM t1;
|
||||
JSON_OBJECT('x',MAX(a=2))
|
||||
{"x": true}
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a=4) FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a=4) FROM t1))
|
||||
{"x": false}
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a=3) FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a=3) FROM t1))
|
||||
{"x": true}
|
||||
SELECT JSON_OBJECT('x',(SELECT MAX(a=2) FROM t1));
|
||||
JSON_OBJECT('x',(SELECT MAX(a=2) FROM t1))
|
||||
{"x": true}
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=4 FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=4 FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=3 FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=3 FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=2 FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a)=2 FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=4) FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=4) FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=3) FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=3) FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=2) FROM t1))='{"x": true}' THEN a END;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 WHERE CASE WHEN JSON_OBJECT('x', (SELECT MAX(a=2) FROM t1))='{"x": false}' THEN a END;
|
||||
a
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
|
Reference in New Issue
Block a user