[MDEV-16324] CHAR creates different data types in hybrid functions vs UNION Created: 2018-05-30  Updated: 2019-11-18

Status: Open
Project: MariaDB Server
Component/s: Data types
Affects Version/s: 5.5, 10.0, 10.1, 10.2, 10.3, 10.4
Fix Version/s: 10.4

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Unresolved Votes: 0
Labels: None

Epic Link: Data type cleanups

 Description   

I run this script:

DROP TABLE IF EXISTS t1,t2,t3;
CREATE TABLE t1 (a CHAR(1), b CHAR(2));
CREATE TABLE t2 AS SELECT COALESCE(a,b) AS c FROM t1;
CREATE TABLE t3 AS SELECT a FROM t1 UNION SELECT b FROM t1;
DESC t2;
DESC t3;

It produces these two result sets:

+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | varchar(2) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a     | char(2) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

Notice:

  • CHAR + CHAR gives VARCHAR in COALESCE
  • CHAR + CHAR gives CHAR in UNION

The latter looks more correct.
Hybrid functions should be fixed to preserve the data type.


Generated at Thu Feb 08 08:28:03 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.