mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Merge with MySQL 5.1.60
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2000, 2010, MySQL AB & Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, 2009 Google Inc.
|
||||
Copyright (c) 2009, Percona Inc.
|
||||
|
||||
@@ -2304,7 +2304,6 @@ innobase_change_buffering_inited_ok:
|
||||
/* Get the current high water mark format. */
|
||||
innobase_file_format_check = (char*) trx_sys_file_format_max_get();
|
||||
|
||||
btr_search_fully_disabled = (!btr_search_enabled);
|
||||
DBUG_RETURN(FALSE);
|
||||
error:
|
||||
DBUG_RETURN(TRUE);
|
||||
@@ -3792,25 +3791,6 @@ field_in_record_is_null(
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**************************************************************//**
|
||||
Sets a field in a record to SQL NULL. Uses the record format
|
||||
information in table to track the null bit in record. */
|
||||
static inline
|
||||
void
|
||||
set_field_in_record_to_null(
|
||||
/*========================*/
|
||||
TABLE* table, /*!< in: MySQL table object */
|
||||
Field* field, /*!< in: MySQL field object */
|
||||
char* record) /*!< in: a row in MySQL format */
|
||||
{
|
||||
int null_offset;
|
||||
|
||||
null_offset = (uint) ((char*) field->null_ptr
|
||||
- (char*) table->record[0]);
|
||||
|
||||
record[null_offset] = record[null_offset] | field->null_bit;
|
||||
}
|
||||
|
||||
/*************************************************************//**
|
||||
InnoDB uses this function to compare two data fields for which the data type
|
||||
is such that we must use MySQL code to compare them. NOTE that the prototype
|
||||
@@ -4813,8 +4793,7 @@ no_commit:
|
||||
|
||||
switch (sql_command) {
|
||||
case SQLCOM_LOAD:
|
||||
if ((trx->duplicates
|
||||
& (TRX_DUP_IGNORE | TRX_DUP_REPLACE))) {
|
||||
if (trx->duplicates) {
|
||||
|
||||
goto set_max_autoinc;
|
||||
}
|
||||
@@ -4991,14 +4970,15 @@ calc_row_difference(
|
||||
/* The field has changed */
|
||||
|
||||
ufield = uvect->fields + n_changed;
|
||||
UNIV_MEM_INVALID(ufield, sizeof *ufield);
|
||||
|
||||
/* Let us use a dummy dfield to make the conversion
|
||||
from the MySQL column format to the InnoDB format */
|
||||
|
||||
dict_col_copy_type(prebuilt->table->cols + i,
|
||||
dfield_get_type(&dfield));
|
||||
|
||||
if (n_len != UNIV_SQL_NULL) {
|
||||
dict_col_copy_type(prebuilt->table->cols + i,
|
||||
dfield_get_type(&dfield));
|
||||
|
||||
buf = row_mysql_store_col_in_innobase_format(
|
||||
&dfield,
|
||||
(byte*)buf,
|
||||
@@ -5006,7 +4986,7 @@ calc_row_difference(
|
||||
new_mysql_row_col,
|
||||
col_pack_len,
|
||||
dict_table_is_comp(prebuilt->table));
|
||||
dfield_copy_data(&ufield->new_val, &dfield);
|
||||
dfield_copy(&ufield->new_val, &dfield);
|
||||
} else {
|
||||
dfield_set_null(&ufield->new_val);
|
||||
}
|
||||
@@ -5089,8 +5069,7 @@ ha_innobase::update_row(
|
||||
&& table->next_number_field
|
||||
&& new_row == table->record[0]
|
||||
&& thd_sql_command(user_thd) == SQLCOM_INSERT
|
||||
&& (trx->duplicates & (TRX_DUP_IGNORE | TRX_DUP_REPLACE))
|
||||
== TRX_DUP_IGNORE) {
|
||||
&& trx->duplicates) {
|
||||
|
||||
ulonglong auto_inc;
|
||||
ulonglong col_max_value;
|
||||
@@ -5448,6 +5427,7 @@ ha_innobase::index_read(
|
||||
(byte*) key_ptr,
|
||||
(ulint) key_len,
|
||||
prebuilt->trx);
|
||||
DBUG_ASSERT(prebuilt->search_tuple->n_fields > 0);
|
||||
} else {
|
||||
/* We position the cursor to the last or the first entry
|
||||
in the index */
|
||||
@@ -7247,6 +7227,7 @@ ha_innobase::records_in_range(
|
||||
mem_heap_t* heap;
|
||||
|
||||
DBUG_ENTER("records_in_range");
|
||||
DBUG_ASSERT(min_key || max_key);
|
||||
|
||||
ut_a(prebuilt->trx == thd_to_trx(ha_thd()));
|
||||
|
||||
@@ -7292,6 +7273,9 @@ ha_innobase::records_in_range(
|
||||
(const uchar*) 0),
|
||||
(ulint) (min_key ? min_key->length : 0),
|
||||
prebuilt->trx);
|
||||
DBUG_ASSERT(min_key
|
||||
? range_start->n_fields > 0
|
||||
: range_start->n_fields == 0);
|
||||
|
||||
row_sel_convert_mysql_key_to_innobase(
|
||||
range_end, (byte*) key_val_buff2,
|
||||
@@ -7300,6 +7284,9 @@ ha_innobase::records_in_range(
|
||||
(const uchar*) 0),
|
||||
(ulint) (max_key ? max_key->length : 0),
|
||||
prebuilt->trx);
|
||||
DBUG_ASSERT(max_key
|
||||
? range_end->n_fields > 0
|
||||
: range_end->n_fields == 0);
|
||||
|
||||
mode1 = convert_search_mode_to_innobase(min_key ? min_key->flag :
|
||||
HA_READ_KEY_EXACT);
|
||||
@@ -8436,6 +8423,7 @@ ha_innobase::extra(
|
||||
break;
|
||||
case HA_EXTRA_RESET_STATE:
|
||||
reset_template(prebuilt);
|
||||
thd_to_trx(ha_thd())->duplicates = 0;
|
||||
break;
|
||||
case HA_EXTRA_NO_KEYREAD:
|
||||
prebuilt->read_just_key = 0;
|
||||
@@ -8453,19 +8441,18 @@ ha_innobase::extra(
|
||||
parameters below. We must not invoke update_thd()
|
||||
either, because the calling threads may change.
|
||||
CAREFUL HERE, OR MEMORY CORRUPTION MAY OCCUR! */
|
||||
case HA_EXTRA_IGNORE_DUP_KEY:
|
||||
case HA_EXTRA_INSERT_WITH_UPDATE:
|
||||
thd_to_trx(ha_thd())->duplicates |= TRX_DUP_IGNORE;
|
||||
break;
|
||||
case HA_EXTRA_NO_IGNORE_DUP_KEY:
|
||||
thd_to_trx(ha_thd())->duplicates &= ~TRX_DUP_IGNORE;
|
||||
break;
|
||||
case HA_EXTRA_WRITE_CAN_REPLACE:
|
||||
thd_to_trx(ha_thd())->duplicates |= TRX_DUP_REPLACE;
|
||||
break;
|
||||
case HA_EXTRA_WRITE_CANNOT_REPLACE:
|
||||
thd_to_trx(ha_thd())->duplicates &= ~TRX_DUP_REPLACE;
|
||||
break;
|
||||
case HA_EXTRA_NO_IGNORE_DUP_KEY:
|
||||
thd_to_trx(ha_thd())->duplicates &=
|
||||
~(TRX_DUP_IGNORE | TRX_DUP_REPLACE);
|
||||
break;
|
||||
default:/* Do nothing */
|
||||
;
|
||||
}
|
||||
|
Reference in New Issue
Block a user