[MDEV-26084] Invalid (old?) table or database name, Assertion `false' failed in handler::get_foreign_dup_key, unexpected FK errors Created: 2021-07-02  Updated: 2023-11-28

Status: Open
Project: MariaDB Server
Component/s: Partitioning, Versioned Tables
Affects Version/s: 10.4, 10.5, 10.6, 10.10, 10.11, 11.0, 11.1
Fix Version/s: 10.4, 10.5, 10.6, 10.11, 11.0, 11.1

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Nikita Malyavin
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Note that the test case uses WITHOUT OVERLAPS (through a versioned executable comment), maybe that's why the effect is different on 10.4 and 10.5+.

--source include/have_innodb.inc
--source include/have_partition.inc
 
CREATE TABLE t (id INT, f INT, s DATE DEFAULT '2000-01-01', e DATE, PERIOD FOR p(s,e), PRIMARY KEY(id /*!100503, p WITHOUT OVERLAPS*/)) ENGINE=InnoDB WITH SYSTEM VERSIONING PARTITION BY KEY(id);
INSERT INTO t (id, e) VALUES (128,'2020-01-01');
INSERT INTO t (id, e) VALUES (129,'2021-01-01');
INSERT INTO t (id, e) VALUES (130,'2021-01-01');
UPDATE t SET f = 1;
 
SET STATEMENT system_versioning_alter_history= KEEP FOR ALTER IGNORE TABLE t MODIFY id TINYINT;

10.4 c7443a09

mysqltest: At line 10: query 'SET STATEMENT system_versioning_alter_history= KEEP FOR ALTER IGNORE TABLE t MODIFY id TINYINT' failed: 1761: Foreign key constraint for table 't', record '127' would lead to a duplicate entry in table '#mysql50##sql-2116b1_9#P#p0', key 'PRIMARY'
 
2021-07-03  0:57:05 9 [ERROR] Invalid (old?) table or database name '#sql-2116b1_9#P#p0'

10.5 617dee34 non-debug

mysqltest: At line 10: query 'SET STATEMENT system_versioning_alter_history= KEEP FOR ALTER IGNORE TABLE t MODIFY id TINYINT' failed: 1762: Foreign key constraint for table 't', record '127-2021-01-01-2000-01-01' would lead to a duplicate entry in a child table

(Note that the error is different from the previous one, ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO vs ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO)

10.5 617dee34 debug

mariadbd: /data/src/10.5/sql/handler.h:3521: virtual bool handler::get_foreign_dup_key(char*, uint, char*, uint): Assertion `false' failed.
210703  1:00:23 [ERROR] mysqld got signal 6 ;
 
#7  0x00007f9790a2ef36 in __GI___assert_fail (assertion=0x55c60dd39f51 "false", file=0x55c60dd39c16 "/data/src/10.5/sql/handler.h", line=3521, function=0x55c60dd39f58 "virtual bool handler::get_foreign_dup_key(char*, uint, char*, uint)") at assert.c:101
#8  0x000055c60d10d9d3 in handler::get_foreign_dup_key (this=0x7f975c0674b0, child_table_name=0x7f9785c57fc0 "\340\177\305\205\227\177", child_table_name_len=193, child_key_name=0x7f9785c58090 "", child_key_name_len=193) at /data/src/10.5/sql/handler.h:3521
#9  0x000055c60d0ff272 in handler::print_error (this=0x7f975c0674b0, error=163, errflag=0) at /data/src/10.5/sql/handler.cc:4036
#10 0x000055c60d488e9f in ha_partition::print_error (this=0x7f975c0674b0, error=163, errflag=0) at /data/src/10.5/sql/ha_partition.cc:10051
#11 0x000055c60ce93d34 in copy_data_between_tables (thd=0x7f975c000db8, from=0x7f975c215b98, to=0x7f975c066bb8, create=..., ignore=true, order_num=0, order=0x0, copied=0x7f9785c5a7a0, deleted=0x7f9785c5a7a8, keys_onoff=Alter_info::LEAVE_AS_IS, alter_ctx=0x7f9785c5b820) at /data/src/10.5/sql/sql_table.cc:11532
#12 0x000055c60ce916f0 in mysql_alter_table (thd=0x7f975c000db8, new_db=0x7f975c005828, new_name=0x7f975c005c48, create_info=0x7f9785c5c430, table_list=0x7f975c0156d0, alter_info=0x7f9785c5c360, order_num=0, order=0x0, ignore=true, if_exists=false) at /data/src/10.5/sql/sql_table.cc:10870
#13 0x000055c60cf39b30 in Sql_cmd_alter_table::execute (this=0x7f975c015ec0, thd=0x7f975c000db8) at /data/src/10.5/sql/sql_alter.cc:539
#14 0x000055c60cd8e711 in mysql_execute_command (thd=0x7f975c000db8) at /data/src/10.5/sql/sql_parse.cc:6052
#15 0x000055c60cd94922 in mysql_parse (thd=0x7f975c000db8, rawbuf=0x7f975c015310 "SET STATEMENT system_versioning_alter_history= KEEP FOR ALTER IGNORE TABLE t MODIFY id TINYINT", length=94, parser_state=0x7f9785c5d490, is_com_multi=false, is_next_command=false) at /data/src/10.5/sql/sql_parse.cc:8096
#16 0x000055c60cd808cb in dispatch_command (command=COM_QUERY, thd=0x7f975c000db8, packet=0x7f975c00b5c9 "SET STATEMENT system_versioning_alter_history= KEEP FOR ALTER IGNORE TABLE t MODIFY id TINYINT", packet_length=94, is_com_multi=false, is_next_command=false) at /data/src/10.5/sql/sql_parse.cc:1891
#17 0x000055c60cd7f0bd in do_command (thd=0x7f975c000db8) at /data/src/10.5/sql/sql_parse.cc:1370
#18 0x000055c60cf2ef52 in do_handle_one_connection (connect=0x55c60f7a8368, put_in_cache=true) at /data/src/10.5/sql/sql_connect.cc:1410
#19 0x000055c60cf2ecb5 in handle_one_connection (arg=0x55c60f7a8288) at /data/src/10.5/sql/sql_connect.cc:1312
#20 0x000055c60d493ea7 in pfs_spawn_thread (arg=0x55c60f8a10d8) at /data/src/10.5/storage/perfschema/pfs.cc:2201
#21 0x00007f9790f47609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#22 0x00007f9790b1a293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

10.6 fails the same way as 10.5.



 Comments   
Comment by Elena Stepanova [ 2023-08-30 ]

A simpler test case without application periods

CREATE TABLE t (f VARCHAR(8), UNIQUE(f)) ENGINE=InnoDB WITH SYSTEM VERSIONING;
INSERT INTO t VALUES ('foo'),('bar');
DELETE FROM t;
SET system_versioning_alter_history=KEEP;
ALTER IGNORE TABLE t MODIFY f INT;
 
# Cleanup
DROP TABLE t;

11.2 9ad7c899

mysqltest: At line 7: query 'ALTER IGNORE TABLE t MODIFY f INT' failed: ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO (1761): Foreign key constraint for table 't', record '0' would lead to a duplicate entry in table '#mysql50##sql-alter-24d036-4', key 'f'

Generated at Thu Feb 08 09:42:37 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.