[MDEV-14434] Wrong result for CHARSET(CONCAT(?,const)) Created: 2017-11-17  Updated: 2017-11-17  Resolved: 2017-11-17

Status: Closed
Project: MariaDB Server
Component/s: Character Sets, Prepared Statements
Affects Version/s: 10.2, 10.3
Fix Version/s: 10.2.11, 10.3.3

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


 Description   

This script correctly returns latin1:

SET NAMES utf8;
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(5,_latin1'a'))";

+-------------------------------+
| CHARSET(CONCAT(5,_latin1'a')) |
+-------------------------------+
| latin1                        |
+-------------------------------+

If I use a similar query, but pass the number as a parameter, it erroneously returns binary:

EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING 5;

+-------------------------------+
| CHARSET(CONCAT(?,_latin1'a')) |
+-------------------------------+
| binary                        |
+-------------------------------+

The expected result is to return _latin1.

The problem happens because Item_param does not set its DTCollation properly. These queries erroneously return 4 (DERIVATION_COERCIBLE), instead of 5 (DERIVATION_NUMERIC).

EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5;
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5.5;
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5.5e0;
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING TIME'10:20:30';
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING TIMESTAMP'2001-01-01 10:20:30';


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