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_berkeley.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_berkeley.cc')
-rw-r--r-- | sql/ha_berkeley.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 9a144066057..317d85da742 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -2232,8 +2232,12 @@ ha_rows ha_berkeley::records_in_range(uint keynr, key_range *start_key, } -ulonglong ha_berkeley::get_auto_increment() +void ha_berkeley::get_auto_increment(ulonglong offset, ulonglong increment, + ulonglong nb_desired_values, + ulonglong *first_value, + ulonglong *nb_reserved_values) { + /* Ideally in case of real error (not "empty table") nr should be ~ULL(0) */ ulonglong nr=1; // Default if error or new key int error; (void) ha_berkeley::extra(HA_EXTRA_KEYREAD); @@ -2244,9 +2248,18 @@ ulonglong ha_berkeley::get_auto_increment() if (!table_share->next_number_key_offset) { // Autoincrement at key-start error=ha_berkeley::index_last(table->record[1]); + /* has taken read lock on page of max key so reserves to infinite */ + *nb_reserved_values= ULONGLONG_MAX; } else { + /* + MySQL needs to call us for next row: assume we are inserting ("a",null) + here, we return 3, and next this statement will want to insert ("b",null): + there is no reason why ("b",3+1) would be the good row to insert: maybe it + already exists, maybe 3+1 is too large... + */ + *nb_reserved_values= 1; DBT row,old_key; bzero((char*) &row,sizeof(row)); KEY *key_info= &table->key_info[active_index]; @@ -2287,7 +2300,7 @@ ulonglong ha_berkeley::get_auto_increment() table->next_number_field->val_int_offset(table_share->rec_buff_length)+1; ha_berkeley::index_end(); (void) ha_berkeley::extra(HA_EXTRA_NO_KEYREAD); - return nr; + *first_value= nr; } void ha_berkeley::print_error(int error, myf errflag) |