mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
IB: NULL instead of autodecrement [closes #373]
This commit is contained in:
committed by
Aleksey Midenkov
parent
947aa0bab9
commit
2968543f8d
@ -405,19 +405,26 @@ call verify_vtq;
|
||||
No A B C D
|
||||
1 1 1 1 1
|
||||
2 1 1 1 1
|
||||
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 '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 for system_time all;
|
||||
select * from t;
|
||||
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
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
insert into t values (4, 0);
|
||||
select * from t for system_time all;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
4 2
|
||||
call verify_vtq;
|
||||
@ -446,47 +453,6 @@ 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;
|
||||
select * from t for system_time all;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
insert into t values (4, 0);
|
||||
select * from t for system_time all;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 1
|
||||
4 2
|
||||
create or replace table t (
|
||||
a int,
|
||||
sys_trx_start bigint(20) unsigned generated always as row start,
|
||||
|
@ -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,9 +3071,9 @@ int handler::update_auto_increment()
|
||||
table->next_number_field->set_null();
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
}
|
||||
table->next_number_field->set_notnull();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
next_insert_id is a "cursor" into the reserved interval, it may go greater
|
||||
|
@ -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 @@ end_of_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 @@ end_of_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: {
|
||||
|
Reference in New Issue
Block a user