Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
5.2.14, 5.3.12, 5.5.40, 10.0.10, 10.1.1
-
None
Description
I thought it would be neat to combine dynamic columns and virtual columns, but it isn't going so well.
create table assets (
|
item_name varchar(32) primary key, -- A common attribute for all items
|
dynamic_cols blob -- Dynamic columns will be stored here
|
);
|
INSERT INTO assets VALUES
|
('MariaDB T-shirt', COLUMN_CREATE('color', 'blue', 'size', 'XL'));
|
INSERT INTO assets VALUES
|
('Thinkpad Laptop', COLUMN_CREATE('color', 'black', 'price', 500));
|
|
alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent;
|
It seems that it ignores the char(32) that I specify and instead uses char(0), thus truncating everything it tries to enter into the column.
mysql 10.0.10-MariaDB (root) [test]> alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent;
|
Query OK, 2 rows affected, 2 warnings (0.03 sec)
|
Records: 2 Duplicates: 0 Warnings: 2
|
|
mysql 10.0.10-MariaDB (root) [test]> show warnings;
|
+---------+------+--------------------------------------------+
|
| Level | Code | Message |
|
+---------+------+--------------------------------------------+
|
| Warning | 1265 | Data truncated for column 'color' at row 1 |
|
| Warning | 1265 | Data truncated for column 'color' at row 2 |
|
+---------+------+--------------------------------------------+
|
2 rows in set (0.00 sec)
|
|
mysql 10.0.10-MariaDB (root) [test]> show create table assets\G
|
*************************** 1. row ***************************
|
Table: assets
|
Create Table: CREATE TABLE `assets` (
|
`item_name` varchar(32) NOT NULL,
|
`dynamic_cols` blob,
|
`color` char(0) AS (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) PERSISTENT,
|
PRIMARY KEY (`item_name`)
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
1 row in set (0.00 sec)
|
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Description |
I thought it would be neat to combine dynamic columns and virtual columns, but it isn't going so well. create table assets ( item_name varchar(32) primary key, -- A common attribute for all items dynamic_cols blob -- Dynamic columns will be stored here ); INSERT INTO assets VALUES ('MariaDB T-shirt', COLUMN_CREATE('color', 'blue', 'size', 'XL')); INSERT INTO assets VALUES ('Thinkpad Laptop', COLUMN_CREATE('color', 'black', 'price', 500)); alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent; It seems that it ignores the char(32) that I specify and instead uses char(0), thus truncating everything it tries to enter into the column. mysql 10.0.10-MariaDB (root) [test]> alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent; Query OK, 2 rows affected, 2 warnings (0.03 sec) Records: 2 Duplicates: 0 Warnings: 2 mysql 10.0.10-MariaDB (root) [test]> show warnings; +---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1265 | Data truncated for column 'color' at row 1 | | Warning | 1265 | Data truncated for column 'color' at row 2 | +---------+------+--------------------------------------------+ 2 rows in set (0.00 sec) mysql 10.0.10-MariaDB (root) [test]> show create table assets\G *************************** 1. row *************************** Table: assets Create Table: CREATE TABLE `assets` ( `item_name` varchar(32) NOT NULL, `dynamic_cols` blob, `color` char(0) AS (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) PERSISTENT, PRIMARY KEY (`item_name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) |
I thought it would be neat to combine dynamic columns and virtual columns, but it isn't going so well. {noformat} create table assets ( item_name varchar(32) primary key, -- A common attribute for all items dynamic_cols blob -- Dynamic columns will be stored here ); INSERT INTO assets VALUES ('MariaDB T-shirt', COLUMN_CREATE('color', 'blue', 'size', 'XL')); INSERT INTO assets VALUES ('Thinkpad Laptop', COLUMN_CREATE('color', 'black', 'price', 500)); alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent; {noformat} It seems that it ignores the char(32) that I specify and instead uses char(0), thus truncating everything it tries to enter into the column. {noformat} mysql 10.0.10-MariaDB (root) [test]> alter table assets add column color char(32) as (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) persistent; Query OK, 2 rows affected, 2 warnings (0.03 sec) Records: 2 Duplicates: 0 Warnings: 2 mysql 10.0.10-MariaDB (root) [test]> show warnings; +---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1265 | Data truncated for column 'color' at row 1 | | Warning | 1265 | Data truncated for column 'color' at row 2 | +---------+------+--------------------------------------------+ 2 rows in set (0.00 sec) mysql 10.0.10-MariaDB (root) [test]> show create table assets\G *************************** 1. row *************************** Table: assets Create Table: CREATE TABLE `assets` ( `item_name` varchar(32) NOT NULL, `dynamic_cols` blob, `color` char(0) AS (left(COLUMN_GET(dynamic_cols, 'color' as char),32)) PERSISTENT, PRIMARY KEY (`item_name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) {noformat} |
Fix Version/s | 10.0.12 [ 15201 ] | |
Assignee | Igor Babaev [ igor ] |
Priority | Major [ 3 ] | Critical [ 2 ] |
Summary | get_columns() doesn't play nice with virtual columns | get_columns() doesn't play nice with dynamic columns |
Assignee | Igor Babaev [ igor ] | Oleksandr Byelkin [ sanja ] |
Workflow | defaullt [ 39825 ] | MariaDB v2 [ 42998 ] |
Status | Open [ 1 ] | In Progress [ 3 ] |
Status | In Progress [ 3 ] | Stalled [ 10000 ] |
Fix Version/s | 10.0.13 [ 16000 ] | |
Fix Version/s | 10.0.12 [ 15201 ] |
Fix Version/s | 10.0.13 [ 16300 ] | |
Fix Version/s | 10.0 [ 16000 ] |
Status | Stalled [ 10000 ] | In Progress [ 3 ] |
Fix Version/s | 10.0.14 [ 17101 ] | |
Fix Version/s | 10.0.13 [ 16300 ] |
Fix Version/s | 10.0 [ 16000 ] | |
Fix Version/s | 10.0.14 [ 17101 ] |
Status | In Progress [ 3 ] | Stalled [ 10000 ] |
Status | Stalled [ 10000 ] | In Progress [ 3 ] |
Status | In Progress [ 3 ] | Stalled [ 10000 ] |
Status | Stalled [ 10000 ] | In Progress [ 3 ] |
Affects Version/s | 5.5.40 [ 17100 ] |
Summary | get_columns() doesn't play nice with dynamic columns | get_columns()/cast()/convert() doesn't play nice with CREATE/ALTER TABLE |
Summary | get_columns()/cast()/convert() doesn't play nice with CREATE/ALTER TABLE | dynamic columns functions/cast()/convert() doesn't play nice with CREATE/ALTER TABLE |
Fix Version/s | 10.1.2 [ 15801 ] | |
Fix Version/s | 10.0.15 [ 17300 ] | |
Fix Version/s | 5.5.41 [ 17600 ] | |
Fix Version/s | 10.0 [ 16000 ] |
Affects Version/s | 5.3.12 [ 12000 ] | |
Affects Version/s | 5.2.14 [ 12101 ] |
Affects Version/s | 10.1.1 [ 16801 ] |
Assignee | Oleksandr Byelkin [ sanja ] | Sergei Golubchik [ serg ] |
Status | In Progress [ 3 ] | In Review [ 10002 ] |
Assignee | Sergei Golubchik [ serg ] | Oleksandr Byelkin [ sanja ] |
Assignee | Oleksandr Byelkin [ sanja ] | Sergei Golubchik [ serg ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Status | Stalled [ 10000 ] | In Progress [ 3 ] |
Fix Version/s | 10.1.2 [ 15801 ] |
Component/s | Dynamic Columns [ 10103 ] | |
Component/s | Virtual Columns [ 10803 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Workflow | MariaDB v2 [ 42998 ] | MariaDB v3 [ 65335 ] |
Workflow | MariaDB v3 [ 65335 ] | MariaDB v4 [ 147844 ] |
If it's really not supported, it would be safer to produce an error, and it should also be documented.
I'm not sure whether it's a vcol issue or dyncol issue, assigned to Igor assuming it's the former. Please reassign as needed.