1
0
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:
Alexander Barkov
2018-05-31 18:52:32 +04:00
parent 3ceb4a54a1
commit ffe83e8e7b
15 changed files with 277 additions and 14 deletions

View File

@@ -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
#