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
|
No A B C D
|
||||||
1 1 1 1 1
|
1 1 1 1 1
|
||||||
2 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;
|
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;
|
call verify_vtq;
|
||||||
No A B C D
|
No A B C D
|
||||||
select * from t for system_time all;
|
select * from t;
|
||||||
a b
|
a b
|
||||||
1 -1
|
|
||||||
2 -2
|
|
||||||
3 1
|
3 1
|
||||||
insert into t values (4, NULL);
|
|
||||||
select * from t for system_time all;
|
select * from t for system_time all;
|
||||||
a b
|
a b
|
||||||
1 -1
|
1 NULL
|
||||||
2 -2
|
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
|
3 1
|
||||||
4 2
|
4 2
|
||||||
call verify_vtq;
|
call verify_vtq;
|
||||||
@ -446,47 +453,6 @@ a b
|
|||||||
2 NULL
|
2 NULL
|
||||||
3 1
|
3 1
|
||||||
4 2
|
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 (
|
create or replace table t (
|
||||||
a int,
|
a int,
|
||||||
sys_trx_start bigint(20) unsigned generated always as row start,
|
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);
|
insert into t values (1), (2), (3);
|
||||||
delete from t where a<3;
|
delete from t where a<3;
|
||||||
call verify_vtq;
|
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 unique;
|
||||||
|
alter table t add b int auto_increment null unique;
|
||||||
call verify_vtq;
|
call verify_vtq;
|
||||||
|
select * from t;
|
||||||
select * from t for system_time all;
|
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;
|
select * from t for system_time all;
|
||||||
call verify_vtq;
|
call verify_vtq;
|
||||||
|
|
||||||
@ -231,27 +237,6 @@ select * from t for system_time all;
|
|||||||
insert into t values (4, 0);
|
insert into t values (4, 0);
|
||||||
select * from t for system_time all;
|
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 (
|
create or replace table t (
|
||||||
a int,
|
a int,
|
||||||
sys_trx_start bigint(20) unsigned generated always as row start,
|
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();
|
table->next_number_field->set_null();
|
||||||
DBUG_RETURN(0);
|
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;
|
double curr_progress = 0.0;
|
||||||
ib_uint64_t read_rows = 0;
|
ib_uint64_t read_rows = 0;
|
||||||
ib_uint64_t table_total_rows = 0;
|
ib_uint64_t table_total_rows = 0;
|
||||||
ulonglong historic_auto_decrement = 0xffffffffffffffff;
|
|
||||||
char new_sys_trx_start[8];
|
char new_sys_trx_start[8];
|
||||||
char new_sys_trx_end[8];
|
char new_sys_trx_end[8];
|
||||||
|
byte any_autoinc_data[8] = {0};
|
||||||
|
|
||||||
DBUG_ENTER("row_merge_read_clustered_index");
|
DBUG_ENTER("row_merge_read_clustered_index");
|
||||||
|
|
||||||
@ -2253,9 +2253,26 @@ end_of_index:
|
|||||||
= dfield->is_version_historical_end();
|
= dfield->is_version_historical_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
const dfield_t* dfield;
|
dfield_t* dfield;
|
||||||
|
|
||||||
dfield = dtuple_get_nth_field(row, add_autoinc);
|
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)) {
|
if (dfield_is_null(dfield)) {
|
||||||
goto write_buffers;
|
goto write_buffers;
|
||||||
}
|
}
|
||||||
@ -2273,12 +2290,7 @@ end_of_index:
|
|||||||
goto func_exit;
|
goto func_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulonglong value;
|
ulonglong value = sequence++;
|
||||||
if (likely(!historical_row)) {
|
|
||||||
value = sequence++;
|
|
||||||
} else {
|
|
||||||
value = historic_auto_decrement--;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (dtype_get_mtype(dtype)) {
|
switch (dtype_get_mtype(dtype)) {
|
||||||
case DATA_INT: {
|
case DATA_INT: {
|
||||||
|
Reference in New Issue
Block a user