-
Notifications
You must be signed in to change notification settings - Fork 5.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JSON_EXTRACT fails to cast as bool #12233
Comments
I tested this against master. The behavior has changed to return zero results instead of an error. This is worse, as it means wrong results according to MySQL type conversion rules. Here is a simplified test case: DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (id int auto_increment not null primary key, j json);
INSERT INTO t1 SET j='{"test":1}';
SELECT * FROM t1 WHERE json_extract(j, '$.test');
SELECT * FROM t1 WHERE json_extract(j, '$.test') = 1;
..
mysql> SELECT * FROM t1 WHERE json_extract(j, '$.test');
Empty set (0.00 sec)
mysql> SELECT * FROM t1 WHERE json_extract(j, '$.test') = 1;
+----+-------------+
| id | j |
+----+-------------+
| 1 | {"test": 1} |
+----+-------------+
1 row in set (0.00 sec)
mysql> SELECT tidb_version()\G
*************************** 1. row ***************************
tidb_version(): Release Version: v4.0.0-beta.2-771-gca41972fb
Edition: Community
Git Commit Hash: ca41972fbac068c8a5de107d9075f09ac68842ac
Git Branch: master
UTC Build Time: 2020-07-14 02:41:21
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
1 row in set (0.00 sec) |
@lzmhhh123 PTAL if free. Thanks. |
I've investigated this difference. It is because of the different behaviors of TiKV Coprocessor and mocktikv Coprocessor. W/ TiKV, mysql> SELECT * FROM t1 WHERE json_extract(j, '$.test');
Empty set (0.00 sec) W/ mocktikv, mysql> SELECT * FROM t1 WHERE json_extract(j, '$.test');
ERROR 1105 (HY000): cannot convert type json.BinaryJSON to bool We should fix them both. |
Coprocessor part is still needed to be fix. |
@iosmanthus PTAL |
In master: mysql> select id from testjson where json_extract(j, '$.test');
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec) But using TiKV: mysql> select id from testjson where json_extract(j, '$.test');
Empty set (0.00 sec) |
Please edit this comment or add a new comment to complete the following informationNot a bug
Duplicate bug
BugNote: Make Sure that 'component', and 'severity' labels are added 1. Root Cause Analysis (RCA) (optional)2. Symptom (optional)3. All Trigger Conditions (optional)4. Workaround (optional)5. Affected versions6. Fixed versions |
Bug Report
Please answer these questions before submitting your issue. Thanks!
in both MySQL and TiDB, run the following:
MySQL returns this:
TiDB returns this:
tidb-server -V
or runselect tidb_version();
on TiDB)?v3.0.0-rc.1-256-g1ddb31720
The text was updated successfully, but these errors were encountered: