IB: get template with virtual columns [#365 bug 1]
Affected tests (forced mode): binlog_encryption.encrypted_slave
This commit is contained in:
parent
f924a94d2f
commit
47ea526efa
@ -360,6 +360,16 @@ insert into t2(x) values (1);
|
|||||||
insert into t1(x) values (1);
|
insert into t1(x) values (1);
|
||||||
ERROR HY000: Some versioned DML requires `transaction_registry` to be set to ON.
|
ERROR HY000: Some versioned DML requires `transaction_registry` to be set to ON.
|
||||||
set global transaction_registry= on;
|
set global transaction_registry= on;
|
||||||
|
create or replace table t1 (
|
||||||
|
x int,
|
||||||
|
y int as (x) virtual
|
||||||
|
) engine=innodb with system versioning;
|
||||||
|
insert into t1 values (1, null);
|
||||||
|
update t1 set x= x + 1;
|
||||||
|
select *, sys_trx_end = 18446744073709551615 as current from t1 for system_time all;
|
||||||
|
x y current
|
||||||
|
2 2 1
|
||||||
|
1 1 0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop procedure test_01;
|
drop procedure test_01;
|
||||||
|
@ -191,6 +191,15 @@ insert into t2(x) values (1);
|
|||||||
insert into t1(x) values (1);
|
insert into t1(x) values (1);
|
||||||
set global transaction_registry= on;
|
set global transaction_registry= on;
|
||||||
|
|
||||||
|
# virtual columns
|
||||||
|
create or replace table t1 (
|
||||||
|
x int,
|
||||||
|
y int as (x) virtual
|
||||||
|
) engine=innodb with system versioning;
|
||||||
|
insert into t1 values (1, null);
|
||||||
|
update t1 set x= x + 1;
|
||||||
|
select *, sys_trx_end = 18446744073709551615 as current from t1 for system_time all;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
|
||||||
|
@ -859,6 +859,20 @@ struct row_prebuilt_t {
|
|||||||
|
|
||||||
/** The MySQL table object */
|
/** The MySQL table object */
|
||||||
TABLE* m_mysql_table;
|
TABLE* m_mysql_table;
|
||||||
|
|
||||||
|
/** Get template by column number */
|
||||||
|
const mysql_row_templ_t* get_template_by_col(ulint col) const
|
||||||
|
{
|
||||||
|
ut_a(col < n_template);
|
||||||
|
ut_a(mysql_template);
|
||||||
|
for (int i = col; i < n_template; ++i)
|
||||||
|
{
|
||||||
|
const mysql_row_templ_t* templ = mysql_template + i;
|
||||||
|
if (!templ->is_virtual && templ->col_no == col)
|
||||||
|
return templ;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Callback for row_mysql_sys_index_iterate() */
|
/** Callback for row_mysql_sys_index_iterate() */
|
||||||
|
@ -1517,8 +1517,8 @@ row_insert_for_mysql(
|
|||||||
ut_ad(table->vers_start != table->vers_end);
|
ut_ad(table->vers_start != table->vers_end);
|
||||||
/* Return back modified fields into mysql_rec, so that
|
/* Return back modified fields into mysql_rec, so that
|
||||||
upper logic may benefit from it (f.ex. 'on duplicate key'). */
|
upper logic may benefit from it (f.ex. 'on duplicate key'). */
|
||||||
const mysql_row_templ_t* t = &prebuilt->mysql_template[table->vers_end];
|
const mysql_row_templ_t* t = prebuilt->get_template_by_col(table->vers_end);
|
||||||
ut_ad(t->mysql_col_len == 8);
|
ut_ad(t && t->mysql_col_len == 8);
|
||||||
|
|
||||||
if (ins_mode == ROW_INS_HISTORICAL) {
|
if (ins_mode == ROW_INS_HISTORICAL) {
|
||||||
set_tuple_col_8(node->row, table->vers_end, trx->id, node->vers_end_buf);
|
set_tuple_col_8(node->row, table->vers_end, trx->id, node->vers_end_buf);
|
||||||
@ -1526,8 +1526,8 @@ row_insert_for_mysql(
|
|||||||
else /* ROW_INS_VERSIONED */ {
|
else /* ROW_INS_VERSIONED */ {
|
||||||
set_tuple_col_8(node->row, table->vers_end, TRX_ID_MAX, node->vers_end_buf);
|
set_tuple_col_8(node->row, table->vers_end, TRX_ID_MAX, node->vers_end_buf);
|
||||||
int8store(&mysql_rec[t->mysql_col_offset], TRX_ID_MAX);
|
int8store(&mysql_rec[t->mysql_col_offset], TRX_ID_MAX);
|
||||||
t = &prebuilt->mysql_template[table->vers_start];
|
t = prebuilt->get_template_by_col(table->vers_start);
|
||||||
ut_ad(t->mysql_col_len == 8);
|
ut_ad(t && t->mysql_col_len == 8);
|
||||||
set_tuple_col_8(node->row, table->vers_start, trx->id, node->vers_start_buf);
|
set_tuple_col_8(node->row, table->vers_start, trx->id, node->vers_start_buf);
|
||||||
int8store(&mysql_rec[t->mysql_col_offset], trx->id);
|
int8store(&mysql_rec[t->mysql_col_offset], trx->id);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user