[MDEV-29540] Incorrect sequence values in INSERT SELECT Created: 2022-09-14  Updated: 2023-01-09  Resolved: 2022-10-19

Status: Closed
Project: MariaDB Server
Component/s: Sequences, Server
Affects Version/s: 10.3.36, 10.4.26, 10.5.17, 10.6.9
Fix Version/s: 10.3.37, 10.4.27, 10.5.18, 10.6.11, 10.7.7, 10.8.6, 10.9.4, 10.10.2, 10.11.1

Type: Bug Priority: Major
Reporter: William Chiquito Assignee: Daniel Black
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Problem/Incident
causes MDEV-30342 Wrong "Truncated incorrect DECIMAL va... Closed

 Description   

The sequence used as the default value in the table ('t1' in my example) produces incorrect values when the data is inserted from INSERT SELECT.

Example:

SELECT VERSION();
 
DROP TABLE IF EXISTS `t1`;
DROP SEQUENCE IF EXISTS `s1`;
 
CREATE SEQUENCE IF NOT EXISTS `s1`;
 
CREATE TABLE IF NOT EXISTS `t1` (
  `a` BIGINT UNSIGNED NOT NULL PRIMARY KEY
      DEFAULT (NEXT VALUE FOR `s1`),
  `b` CHAR(1) NOT NULL
) ENGINE=InnoDB;
 
SHOW CREATE TABLE `s1`;
 
INSERT INTO `t1` (`b`) VALUES ('a');
INSERT INTO `t1` (`b`) VALUES ('b'), ('c');
INSERT INTO `t1` (`b`) VALUES ('d');
INSERT INTO `t1` (`b`)
SELECT `c`
FROM (
  SELECT 'e' `c`
  UNION
  SELECT 'f' `c`
  UNION
  SELECT 'g' `c`
) `der`;
  
SELECT
  `a`, `b`
FROM
  `t1`;

Result:

VERSION()
10.6.9-MariaDB-1:10.6.9+maria~deb11
Table Create Table
s1 CREATE TABLE `s1` (
`next_not_cached_value` bigint(21) NOT NULL,
`minimum_value` bigint(21) NOT NULL,
`maximum_value` bigint(21) NOT NULL,
`start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used',
`increment` bigint(21) NOT NULL COMMENT 'increment value',
`cache_size` bigint(21) unsigned NOT NULL,
`cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed',
`cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done'
) ENGINE=InnoDB SEQUENCE=1
a b
1 a
2 b
3 c
4 d
6 e
8 f
10 g

See dbfiddle.

Related bug: MDEV-17037.



 Comments   
Comment by Daniel Black [ 2022-09-16 ]

Tracing the SO problem by executing the INSERT SELECT at the end a second time.

test on mariadb-10.3-32bab2ce0518d829b4f97a272fc2431169744c75

first retrieval breakpoint SEQUENCE::next_value

Thread 31 "mysqld" hit Breakpoint 1, SEQUENCE::next_value (this=0x7f1af003dcd0, table=0x7f1af0042658, second_round=false, error=0x7f1b5c134dac) at /home/dan/repos/mariadb-server-10.3/sql/sql_sequence.cc:707
707	  THD *thd= table->in_use;
(gdb) bt full
#0  SEQUENCE::next_value (this=0x7f1af003dcd0, table=0x7f1af0042658, second_round=false, error=0x7f1b5c134dac) at /home/dan/repos/mariadb-server-10.3/sql/sql_sequence.cc:707
        thd = <optimized out>
        res_value = <optimized out>
        org_reserved_until = <optimized out>
        add_to = <optimized out>
        out_of_values = <optimized out>
#1  0x000000000091dcc3 in Item_func_nextval::val_int (this=0x7f1af0058010) at /home/dan/repos/mariadb-server-10.3/sql/item_func.cc:6842
        buff = "\000\000\000\000\000\000\000\000~Ë\000\000\000\000\000 N\001\360\032\177\000\000\320\350p\000\000\000\000\000\310v\004\360\032\177\000\000(\b\006\360\032\177\000\000\250\005\006\360\032\177\000\000\235\230z\000\000\000\000\000\340*\001\360\032\177\000\000S\022{\000\000\000\000"
        key_buff = {<Sql_alloc> = {<No data fields>}, Ptr = 0x7f1b5c134dc0 "", str_length = 80, Alloced_length = 80, extra_alloc = 0, alloced = false, thread_specific = false, str_charset = 0x153caa0 <my_charset_bin>}
        length = 8
        thd = <optimized out>
        key = <optimized out>
        entry = 0x7f1af004ec10
        value = <optimized out>
        error = <optimized out>
#2  0x00000000007e5729 in Item::save_int_in_field (this=0x7f1af0042658, field=0x0, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/item.cc:7002
        nr = <optimized out>
#3  Type_handler_int_result::Item_save_in_field (this=<optimized out>, item=0x7f1af0042658, field=0x0, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_type.cc:2596
No locals.
#4  0x00000000008acf2e in Item::save_in_field (this=0x7f1af0058010, field=0x7f1af00554e8, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/item.cc:7012
        error = <optimized out>
#5  0x00000000007551fe in TABLE::update_default_fields (this=0x7f1af0056888, ignore_errors=true) at /home/dan/repos/mariadb-server-10.3/sql/table.cc:8226
        field = 0x7f1af00554e8
        res = 0
        backup_arena = {_vptr$Query_arena = <optimized out>, free_list = 0x7f1af0060440, mem_root = 0x7f1af0006000, state = Query_arena::STMT_CONVENTIONAL_EXECUTION}
        field_ptr = 0x7f1af00555c8
#6  0x000000000061c924 in fill_record (thd=0x7f1af0000c58, table_arg=0x7f1af0056888, fields=@0x7f1af0005720: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x7f1af0012040, last = 0x7f1af0012168, elements = 2}, <No data fields>}, values=<optimized out>, ignore_errors=true, update=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_base.cc:8497
        f = {<base_list_iterator> = {list = <optimized out>, el = 0x1538fe0 <end_of_list>, prev = <synthetic pointer>, current = <synthetic pointer>}, <No data fields>}
        v = {<base_list_iterator> = {list = <optimized out>, el = 0x7f1af00123c8, prev = <synthetic pointer>, current = <synthetic pointer>}, <No data fields>}
        only_unvers_fields = <optimized out>
        save_no_errors = false
        save_abort_on_warning = true
        fld = <optimized out>
        value = <optimized out>
        rfield = <optimized out>
        table = <optimized out>
        field = <optimized out>
#7  0x000000000061cbde in fill_record_n_invoke_before_triggers (thd=0x7f1af003dcd0, table=0x7f1af0042658, fields=<error reading variable: Cannot access memory at address 0x0>, values=@0x7f1b5c134dac: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x0, last = 0x0, elements = 0}, <No data fields>}, ignore_errors=true, event=TRG_EVENT_INSERT) at /home/dan/repos/mariadb-server-10.3/sql/sql_base.cc:8632
        triggers = 0x0
        result = <optimized out>
#8  0x000000000064f443 in select_insert::send_data (this=0x7f1af0014368, values=@0x7f1af0042658: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x7f1af003c3b0, last = 0x7f1af0043530, elements = 4026824392}, <No data fields>}) at /home/dan/repos/mariadb-server-10.3/sql/sql_insert.cc:3931
        error = false
#9  0x00000000006b027e in end_send (join=0x7f1af0014418, join_tab=0x7f1af0016eb0, end_of_records=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:21118
        error = <optimized out>
        fields = 0x7f1af0005208
#10 0x00000000007b0e40 in JOIN_CACHE::generate_full_extensions (this=0x7f1af00606f8, rec_ptr=0x7f1af00642ce "\374\001a\001") at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2470
        res = 0
        rc = NESTED_LOOP_OK
#11 0x00000000007b0cc7 in JOIN_CACHE::join_matching_records (this=0x7f1af00606f8, skip_last=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2362
        rec_ptr = <optimized out>
        rc = <optimized out>
        check_only_first_match = <optimized out>
        outer_join_first_inner = false
        error = <optimized out>
#12 0x00000000007b09be in JOIN_CACHE::join_records (this=0x7f1af00606f8, skip_last=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2147
        rc = NESTED_LOOP_OK
        outer_join_first_inner = false
        tab = <optimized out>
#13 0x00000000006d4964 in sub_select_cache (join=0x7f1af0014418, join_tab=0x7f1af0016b20, end_of_records=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:19712
        cache = 0x7f1af00606f8
        rc = <optimized out>
#14 0x00000000006afea6 in do_select (join=0x7f1af0014418, procedure=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:19472
        join_tab = 0x7f1af0016790
        rc = 0
        error = <optimized out>
#15 0x00000000006af733 in JOIN::exec_inner (this=0x7f1af0014418) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:4171
        columns_list = 0x7f1af0005208
#16 0x00000000006ab87d in JOIN::exec (this=0x7f1af0014418) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:3965
No locals.
#17 mysql_select (thd=0x7f1af0000c58, tables=<optimized out>, wild_num=<optimized out>, fields=<optimized out>, conds=<optimized out>, og_num=<optimized out>, order=<optimized out>, group=<optimized out>, having=<optimized out>, proc_param=<optimized out>, select_options=<optimized out>, result=<optimized out>, unit=<optimized out>, select_lex=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:4374
        err = <optimized out>
        free_join = true
        join = 0x7f1af0014418
#18 0x00000000006ab240 in handle_select (thd=0x7f1af0000c58, lex=0x7f1af0004888, result=0x7f1af0014368, setup_tables_done_option=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:372
        unit = <optimized out>
        select_lex = 0x7f1af00050e0
        res = <optimized out>
#19 0x000000000067edae in mysql_execute_command (thd=0x7f1af0000c58) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:4621
        second_table = <optimized out>
        sel_result = 0x7f1af0014368
        explain = <optimized out>
        res = <optimized out>
        up_result = 0
        lex = 0x7f1af0004888
        select_lex = <optimized out>
        first_table = 0x7f1af00118c0
        unit = 0x7f1af0004948
        have_table_map_for_update = <optimized out>
        all_tables = <optimized out>
        rpl_filter = <optimized out>
        orig_binlog_format = <optimized out>
        orig_current_stmt_binlog_format = <optimized out>
        error = <optimized out>
        wsrep_error_label = <optimized out>
#20 0x0000000000679637 in mysql_parse (thd=0x7f1af0000c58, rawbuf=0x7f1af0011720 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", length=123, parser_state=0x7f1b5c135680, is_com_multi=<optimized out>, is_next_command=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:7871
        found_semicolon = <optimized out>
        error = <optimized out>
        lex = 0x7f1af0004888
        err = false
#21 0x0000000000676cda in dispatch_command (command=COM_QUERY, thd=0x7f1af0000c58, packet=0x7f1af0007399 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", packet_length=123, is_com_multi=false, is_next_command=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:1852
        parser_state = {m_lip = {lookahead_token = -1, lookahead_yylval = 0x0, m_thd = 0x7f1af0000c58, m_ptr = 0x7f1af001179c "\004", m_tok_start = 0x7f1af001179c "\004", m_tok_end = 0x7f1af001179c "\004", m_end_of_query = 0x7f1af001179b "", m_tok_start_prev = 0x7f1af001179b "", m_buf = 0x7f1af0011720 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", m_buf_length = 123, m_echo = true, m_echo_saved = false, m_cpp_buf = 0x7f1af00117f8 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", m_cpp_ptr = 0x7f1af0011873 "", m_cpp_tok_start = 0x7f1af0011873 "", m_cpp_tok_start_prev = 0x7f1af0011873 "", m_cpp_tok_end = 0x7f1af0011873 "", m_body_utf8 = 0x0, m_body_utf8_ptr = 0x0, m_cpp_utf8_processed_ptr = 0x0, next_state = MY_LEX_END, found_semicolon = 0x0, ignore_space = false, stmt_prepare_mode = false, multi_statements = true, yylineno = 1, m_digest = 0x0, in_comment = NO_COMMENT, in_comment_saved = NO_COMMENT, m_cpp_text_start = 0x7f1af0011869 "SHORT_NAME", m_cpp_text_end = 0x7f1af0011873 "", m_underscore_cs = 0x0}, m_yacc = {yacc_yyss = 0x0, yacc_yyvs = 0x0, m_set_signal_info = {m_item = {0x0 <repeats 12 times>}}, m_lock_type = TL_READ_DEFAULT, m_mdl_type = MDL_SHARED_READ}, m_digest_psi = 0x0}
        packet_end = <optimized out>
        net = <optimized out>
        error = false
        do_end_of_statement = true
        drop_more_results = false
#22 0x0000000000684cd7 in do_command (thd=0x7f1af0000c58) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:1398
        packet = <optimized out>
        packet_length = <optimized out>
        net = <optimized out>
        command = COM_QUERY
        return_value = <optimized out>
#23 0x00000000007855b2 in do_handle_one_connection (connect=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_connect.cc:1403
        create_user = true
        thr_create_utime = <optimized out>
        thd = <optimized out>
#24 0x0000000000785383 in handle_one_connection (arg=0x2a5d538) at /home/dan/repos/mariadb-server-10.3/sql/sql_connect.cc:1308
        connect = 0x2a5d538
#25 0x00007f1b5d68ce2d in start_thread () from /lib64/libc.so.6
No symbol table info available.
#26 0x00007f1b5d7121b0 in clone3 () from /lib64/libc.so.6
No symbol table info available.
(gdb) p *this
$1 = {<sequence_definition> = {<Sql_alloc> = {<No data fields>}, reserved_until = 1001, min_value = 1, max_value = 9223372036854775806, start = 1, increment = 1, cache = 1000, round = 0, restart = 0, cycle = false, used_fields = 63, real_increment = 1, next_free_value = 7}, all_values_used = false, initialized = SEQUENCE::SEQ_READY_TO_USE, mutex = {m_rwlock = {__data = {__readers = 1, __writers = 0, __wrphase_futex = 1, __writers_futex = 0, __pad3 = 0, __pad4 = 0, __cur_writer = 0, __shared = 0, __rwelision = 0 '\000', __pad1 = "\000\000\000\000\000\000", __pad2 = 0, __flags = 0}, __size = "\001\000\000\000\000\000\000\000\001", '\000' <repeats 46 times>, __align = 1}, m_psi = 0x0}}
(gdb) c
Continuing.

sql/sql_insert.cc:3931 (select_insert::send_data) invokes fill_record_n_invoke_before_triggers which populates defaults.

second occurance on breakpoint breakpoint SEQUENCE::next_value

Thread 31 "mysqld" hit Breakpoint 1, SEQUENCE::next_value (this=0x7f1af003dcd0, table=0x7f1af0042658, second_round=false, error=0x7f1b5c134e4c) at /home/dan/repos/mariadb-server-10.3/sql/sql_sequence.cc:707
707	  THD *thd= table->in_use;
(gdb) bt full
#0  SEQUENCE::next_value (this=0x7f1af003dcd0, table=0x7f1af0042658, second_round=false, error=0x7f1b5c134e4c) at /home/dan/repos/mariadb-server-10.3/sql/sql_sequence.cc:707
        thd = <optimized out>
        res_value = <optimized out>
        org_reserved_until = <optimized out>
        add_to = <optimized out>
        out_of_values = <optimized out>
#1  0x000000000091dcc3 in Item_func_nextval::val_int (this=0x7f1af0058010) at /home/dan/repos/mariadb-server-10.3/sql/item_func.cc:6842
        buff = "\350T\005\360\032\177\000\000.ϊ\000\000\000\000\000h\214\a\001\000\000\000\000\210h\005\360\032\177\000\000\001\000\000\000\000\000\000\000\320U\005\360\032\177\000\000\350T\005\360\032\177\000\000\376Qu\000\000\000\000\000\000`\000\360\032\177\000\000\310#\001\360\032\177\000"
        key_buff = {<Sql_alloc> = {<No data fields>}, Ptr = 0x7f1b5c134e60 "\350T\005\360\032\177", str_length = 80, Alloced_length = 80, extra_alloc = 0, alloced = false, thread_specific = false, str_charset = 0x153caa0 <my_charset_bin>}
        length = 8
        thd = <optimized out>
        key = <optimized out>
        entry = 0x7f1af004ec10
        value = <optimized out>
        error = <optimized out>
#2  0x00000000007e5729 in Item::save_int_in_field (this=0x7f1af0042658, field=0x0, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/item.cc:7002
        nr = <optimized out>
#3  Type_handler_int_result::Item_save_in_field (this=<optimized out>, item=0x7f1af0042658, field=0x0, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_type.cc:2596
No locals.
#4  0x00000000008acf2e in Item::save_in_field (this=0x7f1af0058010, field=0x7f1af00554e8, no_conversions=false) at /home/dan/repos/mariadb-server-10.3/sql/item.cc:7012
        error = <optimized out>
#5  0x00000000007551fe in TABLE::update_default_fields (this=0x7f1af0056888, ignore_errors=false) at /home/dan/repos/mariadb-server-10.3/sql/table.cc:8226
        field = 0x7f1af00554e8
        res = 0
        backup_arena = {_vptr$Query_arena = <optimized out>, free_list = 0x7f1af0060440, mem_root = 0x7f1af0006000, state = Query_arena::STMT_CONVENTIONAL_EXECUTION}
        field_ptr = 0x7f1af00555c8
#6  0x000000000064f460 in select_insert::send_data (this=0x7f1af0014368, values=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_insert.cc:3933
        error = false
#7  0x00000000006b027e in end_send (join=0x7f1af0014418, join_tab=0x7f1af0016eb0, end_of_records=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:21118
        error = <optimized out>
        fields = 0x7f1af0005208
#8  0x00000000007b0e40 in JOIN_CACHE::generate_full_extensions (this=0x7f1af00606f8, rec_ptr=0x7f1af00642ce "\374\001a\001") at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2470
        res = 0
        rc = NESTED_LOOP_OK
#9  0x00000000007b0cc7 in JOIN_CACHE::join_matching_records (this=0x7f1af00606f8, skip_last=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2362
        rec_ptr = <optimized out>
        rc = <optimized out>
        check_only_first_match = <optimized out>
        outer_join_first_inner = false
        error = <optimized out>
#10 0x00000000007b09be in JOIN_CACHE::join_records (this=0x7f1af00606f8, skip_last=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_join_cache.cc:2147
        rc = NESTED_LOOP_OK
        outer_join_first_inner = false
        tab = <optimized out>
#11 0x00000000006d4964 in sub_select_cache (join=0x7f1af0014418, join_tab=0x7f1af0016b20, end_of_records=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:19712
        cache = 0x7f1af00606f8
        rc = <optimized out>
#12 0x00000000006afea6 in do_select (join=0x7f1af0014418, procedure=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:19472
        join_tab = 0x7f1af0016790
        rc = 0
        error = <optimized out>
#13 0x00000000006af733 in JOIN::exec_inner (this=0x7f1af0014418) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:4171
        columns_list = 0x7f1af0005208
#14 0x00000000006ab87d in JOIN::exec (this=0x7f1af0014418) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:3965
No locals.
#15 mysql_select (thd=0x7f1af0000c58, tables=<optimized out>, wild_num=<optimized out>, fields=<optimized out>, conds=<optimized out>, og_num=<optimized out>, order=<optimized out>, group=<optimized out>, having=<optimized out>, proc_param=<optimized out>, select_options=<optimized out>, result=<optimized out>, unit=<optimized out>, select_lex=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:4374
        err = <optimized out>
        free_join = true
        join = 0x7f1af0014418
#16 0x00000000006ab240 in handle_select (thd=0x7f1af0000c58, lex=0x7f1af0004888, result=0x7f1af0014368, setup_tables_done_option=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_select.cc:372
        unit = <optimized out>
        select_lex = 0x7f1af00050e0
        res = <optimized out>
#17 0x000000000067edae in mysql_execute_command (thd=0x7f1af0000c58) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:4621
        second_table = <optimized out>
        sel_result = 0x7f1af0014368
        explain = <optimized out>
        res = <optimized out>
        up_result = 0
        lex = 0x7f1af0004888
        select_lex = <optimized out>
        first_table = 0x7f1af00118c0
        unit = 0x7f1af0004948
        have_table_map_for_update = <optimized out>
        all_tables = <optimized out>
        rpl_filter = <optimized out>
        orig_binlog_format = <optimized out>
        orig_current_stmt_binlog_format = <optimized out>
        error = <optimized out>
        wsrep_error_label = <optimized out>
#18 0x0000000000679637 in mysql_parse (thd=0x7f1af0000c58, rawbuf=0x7f1af0011720 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", length=123, parser_state=0x7f1b5c135680, is_com_multi=<optimized out>, is_next_command=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:7871
        found_semicolon = <optimized out>
        error = <optimized out>
        lex = 0x7f1af0004888
        err = false
#19 0x0000000000676cda in dispatch_command (command=COM_QUERY, thd=0x7f1af0000c58, packet=0x7f1af0007399 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", packet_length=123, is_com_multi=false, is_next_command=false) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:1852
        parser_state = {m_lip = {lookahead_token = -1, lookahead_yylval = 0x0, m_thd = 0x7f1af0000c58, m_ptr = 0x7f1af001179c "\004", m_tok_start = 0x7f1af001179c "\004", m_tok_end = 0x7f1af001179c "\004", m_end_of_query = 0x7f1af001179b "", m_tok_start_prev = 0x7f1af001179b "", m_buf = 0x7f1af0011720 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", m_buf_length = 123, m_echo = true, m_echo_saved = false, m_cpp_buf = 0x7f1af00117f8 "INSERT INTO T2(T1_ID,NAME) SELECT  t1.T1_ID , t2.NAME FROM TEMP_T2 AS t2 INNER JOIN T1 AS t1   ON t2.T1_NAME =t1.SHORT_NAME", m_cpp_ptr = 0x7f1af0011873 "", m_cpp_tok_start = 0x7f1af0011873 "", m_cpp_tok_start_prev = 0x7f1af0011873 "", m_cpp_tok_end = 0x7f1af0011873 "", m_body_utf8 = 0x0, m_body_utf8_ptr = 0x0, m_cpp_utf8_processed_ptr = 0x0, next_state = MY_LEX_END, found_semicolon = 0x0, ignore_space = false, stmt_prepare_mode = false, multi_statements = true, yylineno = 1, m_digest = 0x0, in_comment = NO_COMMENT, in_comment_saved = NO_COMMENT, m_cpp_text_start = 0x7f1af0011869 "SHORT_NAME", m_cpp_text_end = 0x7f1af0011873 "", m_underscore_cs = 0x0}, m_yacc = {yacc_yyss = 0x0, yacc_yyvs = 0x0, m_set_signal_info = {m_item = {0x0 <repeats 12 times>}}, m_lock_type = TL_READ_DEFAULT, m_mdl_type = MDL_SHARED_READ}, m_digest_psi = 0x0}
        packet_end = <optimized out>
        net = <optimized out>
        error = false
        do_end_of_statement = true
        drop_more_results = false
#20 0x0000000000684cd7 in do_command (thd=0x7f1af0000c58) at /home/dan/repos/mariadb-server-10.3/sql/sql_parse.cc:1398
        packet = <optimized out>
        packet_length = <optimized out>
        net = <optimized out>
        command = COM_QUERY
        return_value = <optimized out>
#21 0x00000000007855b2 in do_handle_one_connection (connect=<optimized out>) at /home/dan/repos/mariadb-server-10.3/sql/sql_connect.cc:1403
        create_user = true
        thr_create_utime = <optimized out>
        thd = <optimized out>
#22 0x0000000000785383 in handle_one_connection (arg=0x2a5d538) at /home/dan/repos/mariadb-server-10.3/sql/sql_connect.cc:1308
        connect = 0x2a5d538
#23 0x00007f1b5d68ce2d in start_thread () from /lib64/libc.so.6
No symbol table info available.
#24 0x00007f1b5d7121b0 in clone3 () from /lib64/libc.so.6
No symbol table info available.
(gdb) p *this
$2 = {<sequence_definition> = {<Sql_alloc> = {<No data fields>}, reserved_until = 1001, min_value = 1, max_value = 9223372036854775806, start = 1, increment = 1, cache = 1000, round = 0, restart = 0, cycle = false, used_fields = 63, real_increment = 1, next_free_value = 8}, all_values_used = false, initialized = SEQUENCE::SEQ_READY_TO_USE, mutex = {m_rwlock = {__data = {__readers = 1, __writers = 0, __wrphase_futex = 1, __writers_futex = 0, __pad3 = 0, __pad4 = 0, __cur_writer = 0, __shared = 0, __rwelision = 0 '\000', __pad1 = "\000\000\000\000\000\000", __pad2 = 0, __flags = 0}, __size = "\001\000\000\000\000\000\000\000\001", '\000' <repeats 46 times>, __align = 1}, m_psi = 0x0}}

sql/sql_insert.cc:3933, two lines after the first breakpoint, calls TABLE::update_default_fields updating the result a second time.

Comment by Daniel Black [ 2022-09-16 ]

monty for review: https://github.com/MariaDB/server/pull/2268

Comment by Vicențiu Ciorbaru [ 2022-10-17 ]

Ok to push with 1 comment:

  • Please rename the name of the store_value newly added parameter to ignore_errors for clarity.

Notes for posterity:

  • The patch introduces a change in behavior of the form:

fill_record called via fill_recond_n_invoke_before_trigger used to always be invoked with ignore_errors set to true. With this change, that is no longer the case. I am unable to figure out a test case that showcases this. danblack if you manage to, it's best to add it into the test suite. Nonetheless this is not part of this patch.

Comment by Daniel Black [ 2022-10-18 ]

Thanks.

Comment by Daniel Black [ 2022-10-19 ]

Thanks for the bug report wchiquito. Will be out next releases.

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