Commit 2968543f authored by Eugene Kosov's avatar Eugene Kosov Committed by Aleksey Midenkov

IB: NULL instead of autodecrement [closes #373]

parent 947aa0ba
......@@ -405,32 +405,13 @@ call verify_vtq;
No A B C D
1 1 1 1 1
2 1 1 1 1
alter table t add b int auto_increment unique;
call verify_vtq;
No A B C D
select * from t for system_time all;
a b
1 -1
2 -2
3 1
insert into t values (4, NULL);
select * from t for system_time all;
a b
1 -1
2 -2
3 1
4 2
call verify_vtq;
No A B C D
1 1 1 1 1
create or replace table t (a int) with system versioning;
insert into t values (1), (2), (3);
delete from t where a<3;
alter table t add b int not null unique;
ERROR 23000: Duplicate entry '...' for key 'b'
alter table t add b int auto_increment unique;
ERROR 42000: Table '#sql-temporary' uses an extension that doesn't exist in this MariaDB version
ERROR 42000: Table 'test/t' uses an extension that doesn't exist in this MariaDB version
alter table t add b int auto_increment null unique;
call verify_vtq;
No A B C D
select * from t;
a b
3 1
......@@ -446,35 +427,20 @@ a b
2 NULL
3 1
4 2
create or replace table t (a int) with system versioning engine=innodb;
insert into t values (1), (2), (3);
delete from t where a<3;
call verify_vtq;
No A B C D
1 1 1 1 1
2 1 1 1 1
alter table t add b tinyint auto_increment unique;
call verify_vtq;
No A B C D
select * from t for system_time all;
a b
1 -1
2 -2
3 1
insert into t values (4, NULL);
select * from t for system_time all;
a b
1 -1
2 -2
3 1
4 2
call verify_vtq;
No A B C D
1 1 1 1 1
create or replace table t (a int) with system versioning;
insert into t values (1), (2), (3);
delete from t where a<3;
alter table t add b tinyint auto_increment null unique;
alter table t add b int not null unique;
ERROR 23000: Duplicate entry '...' for key 'b'
alter table t add b int auto_increment unique;
ERROR 42000: Table '#sql-temporary' uses an extension that doesn't exist in this MariaDB version
alter table t add b int auto_increment null unique;
select * from t;
a b
3 1
select * from t for system_time all;
a b
1 NULL
......
......@@ -209,10 +209,16 @@ create or replace table t (a int) with system versioning engine=innodb;
insert into t values (1), (2), (3);
delete from t where a<3;
call verify_vtq;
--replace_regex /'0-[- 0-9.:]+'/'...'/
--error ER_DUP_ENTRY
alter table t add b int not null unique;
--error ER_UNSUPPORTED_EXTENSION
alter table t add b int auto_increment unique;
alter table t add b int auto_increment null unique;
call verify_vtq;
select * from t;
select * from t for system_time all;
insert into t values (4, NULL);
insert into t values (4, 0);
select * from t for system_time all;
call verify_vtq;
......@@ -231,27 +237,6 @@ select * from t for system_time all;
insert into t values (4, 0);
select * from t for system_time all;
create or replace table t (a int) with system versioning engine=innodb;
insert into t values (1), (2), (3);
delete from t where a<3;
call verify_vtq;
alter table t add b tinyint auto_increment unique;
call verify_vtq;
select * from t for system_time all;
insert into t values (4, NULL);
select * from t for system_time all;
call verify_vtq;
create or replace table t (a int) with system versioning;
insert into t values (1), (2), (3);
delete from t where a<3;
# kvm-deb-trusty-ppc64le fails with "Out of range value for column 'b' at row 3"
--error 0,ER_WARN_DATA_OUT_OF_RANGE
alter table t add b tinyint auto_increment null unique;
select * from t for system_time all;
insert into t values (4, 0);
select * from t for system_time all;
create or replace table t (
a int,
sys_trx_start bigint(20) unsigned generated always as row start,
......
......@@ -3071,8 +3071,8 @@ int handler::update_auto_increment()
table->next_number_field->set_null();
DBUG_RETURN(0);
}
table->next_number_field->set_notnull();
}
table->next_number_field->set_notnull();
}
/*
......
......@@ -1742,9 +1742,9 @@ row_merge_read_clustered_index(
double curr_progress = 0.0;
ib_uint64_t read_rows = 0;
ib_uint64_t table_total_rows = 0;
ulonglong historic_auto_decrement = 0xffffffffffffffff;
char new_sys_trx_start[8];
char new_sys_trx_end[8];
byte any_autoinc_data[8] = {0};
DBUG_ENTER("row_merge_read_clustered_index");
......@@ -2253,9 +2253,26 @@ row_merge_read_clustered_index(
= dfield->is_version_historical_end();
}
const dfield_t* dfield;
dfield_t* dfield;
dfield = dtuple_get_nth_field(row, add_autoinc);
if (new_table->versioned()) {
if (historical_row) {
if (dfield_get_type(dfield)->prtype & DATA_NOT_NULL) {
err = DB_UNSUPPORTED;
my_error(ER_UNSUPPORTED_EXTENSION, MYF(0),
old_table->name);
goto func_exit;
}
dfield_set_null(dfield);
} else {
// set not null
ulint len = dfield_get_type(dfield)->len;
dfield_set_data(dfield, any_autoinc_data, len);
}
}
if (dfield_is_null(dfield)) {
goto write_buffers;
}
......@@ -2273,12 +2290,7 @@ row_merge_read_clustered_index(
goto func_exit;
}
ulonglong value;
if (likely(!historical_row)) {
value = sequence++;
} else {
value = historic_auto_decrement--;
}
ulonglong value = sequence++;
switch (dtype_get_mtype(dtype)) {
case DATA_INT: {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment