summaryrefslogtreecommitdiff
path: root/sql/ha_partition.cc
diff options
context:
space:
mode:
authorunknown <guilhem@mysql.com>2006-06-02 22:22:59 +0200
committerunknown <guilhem@mysql.com>2006-06-02 22:22:59 +0200
commit78e288b4a7efc9fc4bfd0cc8949e265be48f1ee7 (patch)
tree025336cab0c9822d03d387ce26f536a8b0d0712e /sql/ha_partition.cc
parent0c68b7104fb92ff0998c17d2b71534ec23a7f8ad (diff)
parente63f3779d4b19acddbc561e989293b7b4f0559d4 (diff)
downloadmariadb-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.cc55
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