diff options
author | unknown <guilhem@mysql.com> | 2006-06-02 22:22:59 +0200 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2006-06-02 22:22:59 +0200 |
commit | 78e288b4a7efc9fc4bfd0cc8949e265be48f1ee7 (patch) | |
tree | 025336cab0c9822d03d387ce26f536a8b0d0712e /sql/ha_partition.cc | |
parent | 0c68b7104fb92ff0998c17d2b71534ec23a7f8ad (diff) | |
parent | e63f3779d4b19acddbc561e989293b7b4f0559d4 (diff) | |
download | mariadb-git-78e288b4a7efc9fc4bfd0cc8949e265be48f1ee7.tar.gz |
Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/home/mysql_src/mysql-5.1-new-WL3146-handler
sql/ha_berkeley.cc:
Auto merged
sql/ha_berkeley.h:
Auto merged
sql/ha_heap.cc:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/ha_innodb.h:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/ha_ndbcluster.h:
Auto merged
sql/ha_partition.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
storage/archive/ha_archive.cc:
Auto merged
storage/archive/ha_archive.h:
Auto merged
Diffstat (limited to 'sql/ha_partition.cc')
-rw-r--r-- | sql/ha_partition.cc | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 7fa5b89abf8..418c3654531 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -2775,7 +2775,7 @@ void ha_partition::start_bulk_insert(ha_rows rows) file= m_file; do { - (*file)->start_bulk_insert(rows); + (*file)->ha_start_bulk_insert(rows); } while (*(++file)); DBUG_VOID_RETURN; } @@ -2802,7 +2802,7 @@ int ha_partition::end_bulk_insert() do { int tmp; - if ((tmp= (*file)->end_bulk_insert())) + if ((tmp= (*file)->ha_end_bulk_insert())) error= tmp; } while (*(++file)); DBUG_RETURN(error); @@ -4127,8 +4127,11 @@ void ha_partition::info(uint flag) if (flag & HA_STATUS_AUTO) { + ulonglong nb_reserved_values; DBUG_PRINT("info", ("HA_STATUS_AUTO")); - auto_increment_value= get_auto_increment(); + /* we don't want to reserve any values, it's pure information */ + get_auto_increment(0, 0, 0, &auto_increment_value, &nb_reserved_values); + release_auto_increment(); } if (flag & HA_STATUS_VARIABLE) { @@ -5274,19 +5277,55 @@ void ha_partition::restore_auto_increment() partitions. */ -ulonglong ha_partition::get_auto_increment() +void ha_partition::get_auto_increment(ulonglong offset, ulonglong increment, + ulonglong nb_desired_values, + ulonglong *first_value, + ulonglong *nb_reserved_values) { - ulonglong auto_inc, max_auto_inc= 0; + ulonglong first_value_part, last_value_part, nb_reserved_values_part, + last_value; DBUG_ENTER("ha_partition::get_auto_increment"); + *first_value= 0; + last_value= ULONGLONG_MAX; 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); + m_file[i]->get_auto_increment(offset, increment, nb_desired_values, + &first_value_part, &nb_reserved_values_part); + if (first_value_part == ~(ulonglong)(0)) // error in one partition + { + *first_value= first_value_part; + break; + } + /* + Partition has reserved an interval. Intersect it with the intervals + already reserved for the previous partitions. + */ + last_value_part= (nb_reserved_values_part == ULONGLONG_MAX) ? + ULONGLONG_MAX : (first_value_part + nb_reserved_values_part * increment); + set_if_bigger(*first_value, first_value_part); + set_if_smaller(last_value, last_value_part); + } + if (last_value < *first_value) /* empty intersection, error */ + { + *first_value= ~(ulonglong)(0); } - DBUG_RETURN(max_auto_inc); + *nb_reserved_values= (last_value == ULONGLONG_MAX) ? + ULONGLONG_MAX : ((last_value - *first_value) / increment); + + DBUG_VOID_RETURN; } +void ha_partition::release_auto_increment() +{ + DBUG_ENTER("ha_partition::release_auto_increment"); + + for (uint i= 0; i < m_tot_parts; i++) + { + m_file[i]->release_auto_increment(); + } + DBUG_VOID_RETURN; +} /**************************************************************************** MODULE initialise handler for HANDLER call |