1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

MDEV-9167: COLUMN_CHECK fails on valid decimal data

Check now allows zero length decimals too.

(backporting Adam Chainz patch to 10.0)
This commit is contained in:
Oleksandr Byelkin
2015-12-16 11:09:54 +01:00
parent bd69d7b3f3
commit 71eee693b2
3 changed files with 29 additions and 1 deletions

View File

@@ -1858,5 +1858,20 @@ SELECT COLUMN_GET(COLUMN_CREATE(1, 0xC2A2 AS CHAR CHARACTER SET utf8), 1 AS CHAR
a
¢
#
# MDEV-9167: COLUMN_CHECK fails on valid decimal data
#
SELECT COLUMN_CHECK(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL));
COLUMN_CHECK(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL))
1
SELECT COLUMN_CHECK(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL));
COLUMN_CHECK(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL))
1
SELECT COLUMN_JSON(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL));
COLUMN_JSON(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL))
{"a":0,"b":1}
SELECT COLUMN_JSON(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL));
COLUMN_JSON(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL))
{"a":1,"b":1}
#
# end of 10.0 tests
#

View File

@@ -908,6 +908,18 @@ SET NAMES utf8;
SELECT COLUMN_GET(COLUMN_CREATE(1, 0xC2A2 AS CHAR CHARACTER SET latin1), 1 AS CHAR CHARACTER SET utf8) AS a;
SELECT COLUMN_GET(COLUMN_CREATE(1, 0xC2A2 AS CHAR CHARACTER SET utf8), 1 AS CHAR CHARACTER SET utf8) AS a;
--echo #
--echo # MDEV-9167: COLUMN_CHECK fails on valid decimal data
--echo #
SELECT COLUMN_CHECK(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL));
SELECT COLUMN_CHECK(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL));
SELECT COLUMN_JSON(COLUMN_CREATE('a',0 AS DECIMAL,'b',1 AS DECIMAL));
SELECT COLUMN_JSON(COLUMN_CREATE('a',1 AS DECIMAL,'b',1 AS DECIMAL));
--echo #
--echo # end of 10.0 tests
--echo #

View File

@@ -3725,7 +3725,8 @@ mariadb_dyncol_check(DYNAMIC_COLUMN *str)
/* It is not first entry */
if (prev_data_offset > data_offset ||
((prev_type != DYN_COL_INT &&
prev_type != DYN_COL_UINT) && prev_data_offset == data_offset))
prev_type != DYN_COL_UINT &&
prev_type != DYN_COL_DECIMAL) && prev_data_offset == data_offset))
{
DBUG_PRINT("info", ("Field order: %u Previous data offset: %u"
" >(=) Current data offset: %u",