Precision loss on a DECIMAL column in complex queries involving INTERSECT and functions in the ON clause
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
Please answer these questions before submitting your issue. Thanks!
### 1. Minimal reproduce step (Required)
-------------------------------------------------------------
DROP DATABASE IF EXISTS database8;
CREATE DATABASE database8;
USE database8;
CREATE TABLE t0(c0 BLOB(161) NOT NULL );
REPLACE INTO t0(c0) VALUES ('gj');
INSERT INTO t0 VALUES ('');
ALTER TABLE t0 CHANGE c0 c0 BLOB NOT NULL ;
INSERT IGNORE INTO t0 VALUES ('4X.!,'), ('ITv') ON DUPLICATE KEY UPDATE c0=t0.c0;
INSERT IGNORE INTO t0(c0) VALUES ('');
INSERT INTO t0 VALUES ('0.04441453786415084');
INSERT INTO t0(c0) VALUES ('0.5813812894226846'), ('665530429');
REPLACE INTO t0 VALUES ('0.30451699725921866'), ('');
ALTER TABLE t0 DISABLE KEYS;
ALTER TABLE t0 CHANGE c0 c0 BLOB NOT NULL ;
INSERT IGNORE INTO t0 VALUES (''), ('+7');
INSERT IGNORE INTO t0 VALUES (''), ('pv䙻pg旔q+') ON DUPLICATE KEY UPDATE c0=0.0739989572977412;
REPLACE DELAYED INTO t0 VALUES ('0.772566298767782');
INSERT IGNORE INTO t0 VALUES ('\rn^횊_C곙/');
INSERT IGNORE INTO t0 VALUES ('W/{'), (NULL), (NULL);
UPDATE t0 SET c0=8.79619819E8;
REPLACE INTO t0(c0) VALUES ('');
INSERT IGNORE INTO t0(c0) VALUES ('101827517'), ('VJs?');
REPLACE INTO t0 VALUES ('|Bꇋ');
INSERT INTO t0 VALUES (',A'), ('0.46929569473009547');
INSERT INTO t0(c0) VALUES ('') ON DUPLICATE KEY UPDATE c0=t0.c0;
REPLACE INTO t0(c0) VALUES ('2');
REPLACE INTO t0 VALUES ('');
INSERT INTO t0 VALUES ('-1841166036') ON DUPLICATE KEY UPDATE c0=true;
REPLACE INTO t0(c0) VALUES ('CबA');
CREATE VIEW v0(c0) AS SELECT DISTINCT 0.04095031191142484 FROM t0;
INSERT IGNORE INTO t0 VALUES ('0.9828883654231908') ON DUPLICATE KEY UPDATE c0=EXPORT_SET(((t0.c0) IS NULL), INET_ATON(t0.c0), '');
INSERT INTO t0(c0) VALUES ('K/GxE\\ENd');
ANALYZE TABLE t0;
INSERT INTO t0 VALUES ('\\uo On&R⊗'), (']'), ('') ON DUPLICATE KEY UPDATE c0=t0.c0;
-- Query 1
SELECT DISTINCT v0.c0, t0.c0 FROM t0 INNER JOIN v0 ON SQRT(v0.c0);
-- Query 2 (Theoretical semantic equivalence)
(SELECT DISTINCT v0.c0, t0.c0 FROM t0 LEFT JOIN v0 ON SQRT(v0.c0))
INTERSECT
(SELECT DISTINCT v0.c0, t0.c0 FROM t0 RIGHT JOIN v0 ON SQRT(v0.c0));
### 2. What did you expect to see? (Required)
same output (Precision is also identical)
### 3. What did you see instead (Required)
mysql> SELECT DISTINCT v0.c0, t0.c0 FROM t0 INNER JOIN v0 ON SQRT(v0.c0);
+----------------------------------+------------------------------------------+
| c0 | c0 |
+----------------------------------+------------------------------------------+
| 0.040950311911424840000000000000 | 0x564A733F |
| 0.040950311911424840000000000000 | 0x302E39383238383833363534323331393038 |
| 0.040950311911424840000000000000 | 0x7C42EA878B |
| 0.040950311911424840000000000000 | 0x302E3436393239353639343733303039353437 |
| 0.040950311911424840000000000000 | 0x2D31383431313636303336 |
| 0.040950311911424840000000000000 | 0x |
| 0.040950311911424840000000000000 | 0x4B2F4778455C454E64 |
| 0.040950311911424840000000000000 | 0x5C756F4F6E2652E28A97 |
| 0.040950311911424840000000000000 | 0x313031383237353137 |
| 0.040950311911424840000000000000 | 0x383739363139383139 |
| 0.040950311911424840000000000000 | 0x43E0A4AC41 |
| 0.040950311911424840000000000000 | 0x2C41 |
| 0.040950311911424840000000000000 | 0x5D |
| 0.040950311911424840000000000000 | 0x32 |
+----------------------------------+------------------------------------------+
14 rows in set (0.01 sec)
mysql>
mysql> (SELECT DISTINCT v0.c0, t0.c0 FROM t0 LEFT JOIN v0 ON SQRT(v0.c0))
-> INTERSECT
-> (SELECT DISTINCT v0.c0, t0.c0 FROM t0 RIGHT JOIN v0 ON SQRT(v0.c0));
+---------------------+------------------------------------------+
| c0 | c0 |
+---------------------+------------------------------------------+
| 0.04095031191142484 | 0x2D31383431313636303336 |
| 0.04095031191142484 | 0x302E3436393239353639343733303039353437 |
| 0.04095031191142484 | 0x7C42EA878B |
| 0.04095031191142484 | 0x5D |
| 0.04095031191142484 | 0x32 |
| 0.04095031191142484 | 0x302E39383238383833363534323331393038 |
| 0.04095031191142484 | 0x564A733F |
| 0.04095031191142484 | 0x4B2F4778455C454E64 |
| 0.04095031191142484 | 0x5C756F4F6E2652E28A97 |
| 0.04095031191142484 | 0x |
| 0.04095031191142484 | 0x313031383237353137 |
| 0.04095031191142484 | 0x2C41 |
| 0.04095031191142484 | 0x43E0A4AC41 |
| 0.04095031191142484 | 0x383739363139383139 |
+---------------------+------------------------------------------+
14 rows in set (0.01 sec)
### 4. What is your TiDB version? (Required)
mysql> select version();
+--------------------+
| version() |
+--------------------+
| 8.0.11-TiDB-v7.5.1 |
+--------------------+
I use docker images for quick deployments.
IMAGE ID: bd253ee807c6
Contributor guide
Assessment
This issue has not been assessed yet.