mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Fix for bug#18753 Partitions: auto_increment fails
Current auto increment value is placed in partition in which latest record was saved. So to get auto_increment they have to scan all partitions and return max value. mysql-test/r/partition.result: Fix for bug#18753 Partitions: auto_increment fails test case mysql-test/t/partition.test: Fix for bug#18753 Partitions: auto_increment fails test case
This commit is contained in:
@@ -839,4 +839,21 @@ SHOW TABLE STATUS;
|
|||||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
t1 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
t1 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (s1 int auto_increment primary key)
|
||||||
|
partition by list (s1)
|
||||||
|
(partition p1 values in (1),
|
||||||
|
partition p2 values in (2),
|
||||||
|
partition p3 values in (3));
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 values (null);
|
||||||
|
select auto_increment from information_schema.tables where table_name='t1';
|
||||||
|
auto_increment
|
||||||
|
4
|
||||||
|
select * from t1;
|
||||||
|
s1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
drop table t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@@ -956,4 +956,19 @@ PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM);
|
|||||||
SHOW TABLE STATUS;
|
SHOW TABLE STATUS;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#18753 Partitions: auto_increment fails
|
||||||
|
#
|
||||||
|
create table t1 (s1 int auto_increment primary key)
|
||||||
|
partition by list (s1)
|
||||||
|
(partition p1 values in (1),
|
||||||
|
partition p2 values in (2),
|
||||||
|
partition p3 values in (3));
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t1 values (null);
|
||||||
|
select auto_increment from information_schema.tables where table_name='t1';
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@@ -4201,11 +4201,7 @@ void ha_partition::info(uint flag)
|
|||||||
if (flag & HA_STATUS_AUTO)
|
if (flag & HA_STATUS_AUTO)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("HA_STATUS_AUTO"));
|
DBUG_PRINT("info", ("HA_STATUS_AUTO"));
|
||||||
/*
|
auto_increment_value= get_auto_increment();
|
||||||
The auto increment value is only maintained by the first handler
|
|
||||||
so we will only call this.
|
|
||||||
*/
|
|
||||||
m_file[0]->info(HA_STATUS_AUTO);
|
|
||||||
}
|
}
|
||||||
if (flag & HA_STATUS_VARIABLE)
|
if (flag & HA_STATUS_VARIABLE)
|
||||||
{
|
{
|
||||||
@@ -5349,9 +5345,15 @@ void ha_partition::restore_auto_increment()
|
|||||||
|
|
||||||
ulonglong ha_partition::get_auto_increment()
|
ulonglong ha_partition::get_auto_increment()
|
||||||
{
|
{
|
||||||
|
ulonglong auto_inc, max_auto_inc= 0;
|
||||||
DBUG_ENTER("ha_partition::get_auto_increment");
|
DBUG_ENTER("ha_partition::get_auto_increment");
|
||||||
|
|
||||||
DBUG_RETURN(m_file[0]->get_auto_increment());
|
for (uint i= 0; i < m_tot_parts; i++)
|
||||||
|
{
|
||||||
|
auto_inc= m_file[i]->get_auto_increment();
|
||||||
|
set_if_bigger(max_auto_inc, auto_inc);
|
||||||
|
}
|
||||||
|
DBUG_RETURN(max_auto_inc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user