[MDEV-12421] Check constraint with query crashes server and renders DB unusable Created: 2017-03-31  Updated: 2017-04-03  Resolved: 2017-04-02

Status: Closed
Project: MariaDB Server
Component/s: Parser
Affects Version/s: 10.2.4
Fix Version/s: 10.2.5

Type: Bug Priority: Major
Reporter: Jessie Potts Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: 10.2-rc, check_constraints, create_table, innodb
Environment:

Windows 10 64bit


Attachments: File MariaDB.err    

 Description   

I'm evaluating the possibility of migrating and existing SQL Anywhere database to MariaDB. While trying to port the existing tables, I've come across a scenario which crashes the mysqld server and renders the database useless. I can restart the server but when I attempt to do anything with the database, it crashes again (error log attached).

Here is SQL that that will reproduce this problem:

CREATE TABLE column_code
( column_name varchar(50)
, code        char(2)
, description varchar(255)
, primary key (column_name, code asc)
);
CREATE TABLE sample_table
( id          integer  NOT NULL AUTO_INCREMENT PRIMARY KEY
, value1      integer
, value2      char(1)
, some_code   char(2)  NOT NULL CHECK(@column in (select code from column_code where column_name = 'sample_table.some_code'))
);

I'm not defending the way this was implemented, but it is what it is. I haven't found any documentation stating this shouldn't work. Please let me know if that's the case.

Thanks!



 Comments   
Comment by Jessie Potts [ 2017-03-31 ]

Here's the results of --print-defaults, as recommend by the bug reporting guidelines.

c:\Program Files\MariaDB 10.2\bin>mysqld --print-defaults
mysqld would have been started with the following arguments:
--datadir=C:/Program Files/MariaDB 10.2/data --port=3333 --sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION --default_storage_engine=innodb --innodb_buffer_pool_size=3070M --innodb_log_file_size=50M --feedback=ON

Comment by Sergei Golubchik [ 2017-04-02 ]

It shouldn't work. There was a test in the code to disallow user variables and subqueries in CHECK, but it was misplaced. I fixed that.

Comment by Jessie Potts [ 2017-04-03 ]

Thanks Sergei! I'd prefer being able to do this but having the engine tell me I can't is much better than letting me do it and then crashing.

Generated at Thu Feb 08 07:57:35 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.