mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Merge mysql-5.1-innodb -> mysql-5.1-security
Merge up to sunny.bains@oracle.com-20100625081841-ppulnkjk1qlazh82 . There are 8 more changesets in mysql-5.1-innodb, but PB2 shows a failure for a test added in one of them. If that is resolved quickly then those 8 more changesets will be merged too.
This commit is contained in:
@@ -5384,6 +5384,9 @@ ha_innobase::index_read(
|
||||
prebuilt->index_usable = FALSE;
|
||||
DBUG_RETURN(HA_ERR_CRASHED);
|
||||
}
|
||||
if (UNIV_UNLIKELY(!prebuilt->index_usable)) {
|
||||
DBUG_RETURN(HA_ERR_TABLE_DEF_CHANGED);
|
||||
}
|
||||
|
||||
/* Note that if the index for which the search template is built is not
|
||||
necessarily prebuilt->index, but can also be the clustered index */
|
||||
@@ -6477,6 +6480,7 @@ ha_innobase::create(
|
||||
const ulint file_format = srv_file_format;
|
||||
const char* stmt;
|
||||
size_t stmt_len;
|
||||
enum row_type row_type;
|
||||
|
||||
DBUG_ENTER("ha_innobase::create");
|
||||
|
||||
@@ -6597,94 +6601,94 @@ ha_innobase::create(
|
||||
}
|
||||
}
|
||||
|
||||
if (create_info->used_fields & HA_CREATE_USED_ROW_FORMAT) {
|
||||
if (flags) {
|
||||
/* KEY_BLOCK_SIZE was specified. */
|
||||
if (form->s->row_type != ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT other than COMPRESSED
|
||||
ignores KEY_BLOCK_SIZE. It does not
|
||||
make sense to reject conflicting
|
||||
KEY_BLOCK_SIZE and ROW_FORMAT, because
|
||||
such combinations can be obtained
|
||||
with ALTER TABLE anyway. */
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ignoring KEY_BLOCK_SIZE=%lu"
|
||||
" unless ROW_FORMAT=COMPRESSED.",
|
||||
create_info->key_block_size);
|
||||
flags = 0;
|
||||
}
|
||||
} else {
|
||||
/* No KEY_BLOCK_SIZE */
|
||||
if (form->s->row_type == ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT=COMPRESSED without
|
||||
KEY_BLOCK_SIZE implies half the
|
||||
maximum KEY_BLOCK_SIZE. */
|
||||
flags = (DICT_TF_ZSSIZE_MAX - 1)
|
||||
<< DICT_TF_ZSSIZE_SHIFT
|
||||
| DICT_TF_COMPACT
|
||||
| DICT_TF_FORMAT_ZIP
|
||||
<< DICT_TF_FORMAT_SHIFT;
|
||||
row_type = form->s->row_type;
|
||||
|
||||
if (flags) {
|
||||
/* KEY_BLOCK_SIZE was specified. */
|
||||
if (!(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) {
|
||||
/* ROW_FORMAT was not specified;
|
||||
default to ROW_FORMAT=COMPRESSED */
|
||||
row_type = ROW_TYPE_COMPRESSED;
|
||||
} else if (row_type != ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT other than COMPRESSED
|
||||
ignores KEY_BLOCK_SIZE. It does not
|
||||
make sense to reject conflicting
|
||||
KEY_BLOCK_SIZE and ROW_FORMAT, because
|
||||
such combinations can be obtained
|
||||
with ALTER TABLE anyway. */
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ignoring KEY_BLOCK_SIZE=%lu"
|
||||
" unless ROW_FORMAT=COMPRESSED.",
|
||||
create_info->key_block_size);
|
||||
flags = 0;
|
||||
}
|
||||
} else {
|
||||
/* No KEY_BLOCK_SIZE */
|
||||
if (row_type == ROW_TYPE_COMPRESSED) {
|
||||
/* ROW_FORMAT=COMPRESSED without
|
||||
KEY_BLOCK_SIZE implies half the
|
||||
maximum KEY_BLOCK_SIZE. */
|
||||
flags = (DICT_TF_ZSSIZE_MAX - 1)
|
||||
<< DICT_TF_ZSSIZE_SHIFT
|
||||
| DICT_TF_COMPACT
|
||||
| DICT_TF_FORMAT_ZIP
|
||||
<< DICT_TF_FORMAT_SHIFT;
|
||||
#if DICT_TF_ZSSIZE_MAX < 1
|
||||
# error "DICT_TF_ZSSIZE_MAX < 1"
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (form->s->row_type) {
|
||||
const char* row_format_name;
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
break;
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
row_format_name
|
||||
= form->s->row_type == ROW_TYPE_COMPRESSED
|
||||
? "COMPRESSED"
|
||||
: "DYNAMIC";
|
||||
switch (row_type) {
|
||||
const char* row_format_name;
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
break;
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
row_format_name
|
||||
= row_type == ROW_TYPE_COMPRESSED
|
||||
? "COMPRESSED"
|
||||
: "DYNAMIC";
|
||||
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_per_table.",
|
||||
row_format_name);
|
||||
} else if (file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.",
|
||||
row_format_name);
|
||||
} else {
|
||||
flags |= DICT_TF_COMPACT
|
||||
| (DICT_TF_FORMAT_ZIP
|
||||
<< DICT_TF_FORMAT_SHIFT);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fall through */
|
||||
case ROW_TYPE_NOT_USED:
|
||||
case ROW_TYPE_FIXED:
|
||||
default:
|
||||
push_warning(thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: assuming ROW_FORMAT=COMPACT.");
|
||||
case ROW_TYPE_DEFAULT:
|
||||
case ROW_TYPE_COMPACT:
|
||||
flags = DICT_TF_COMPACT;
|
||||
if (!srv_file_per_table) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_per_table.",
|
||||
row_format_name);
|
||||
} else if (file_format < DICT_TF_FORMAT_ZIP) {
|
||||
push_warning_printf(
|
||||
thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: ROW_FORMAT=%s"
|
||||
" requires innodb_file_format >"
|
||||
" Antelope.",
|
||||
row_format_name);
|
||||
} else {
|
||||
flags |= DICT_TF_COMPACT
|
||||
| (DICT_TF_FORMAT_ZIP
|
||||
<< DICT_TF_FORMAT_SHIFT);
|
||||
break;
|
||||
}
|
||||
} else if (!flags) {
|
||||
/* No KEY_BLOCK_SIZE or ROW_FORMAT specified:
|
||||
use ROW_FORMAT=COMPACT by default. */
|
||||
|
||||
/* fall through */
|
||||
case ROW_TYPE_NOT_USED:
|
||||
case ROW_TYPE_FIXED:
|
||||
default:
|
||||
push_warning(thd,
|
||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_ILLEGAL_HA_CREATE_OPTION,
|
||||
"InnoDB: assuming ROW_FORMAT=COMPACT.");
|
||||
case ROW_TYPE_DEFAULT:
|
||||
case ROW_TYPE_COMPACT:
|
||||
flags = DICT_TF_COMPACT;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Look for a primary key */
|
||||
@@ -7241,6 +7245,10 @@ ha_innobase::records_in_range(
|
||||
n_rows = HA_POS_ERROR;
|
||||
goto func_exit;
|
||||
}
|
||||
if (UNIV_UNLIKELY(!row_merge_is_index_usable(prebuilt->trx, index))) {
|
||||
n_rows = HA_ERR_TABLE_DEF_CHANGED;
|
||||
goto func_exit;
|
||||
}
|
||||
|
||||
heap = mem_heap_create(2 * (key->key_parts * sizeof(dfield_t)
|
||||
+ sizeof(dtuple_t)));
|
||||
@@ -7440,8 +7448,7 @@ innobase_get_mysql_key_number_for_index(
|
||||
|
||||
/* If index does not belong to the table of share structure. Search
|
||||
index->table instead */
|
||||
if (index->table != ib_table
|
||||
&& strcmp(index->table->name, share->table_name)) {
|
||||
if (index->table != ib_table) {
|
||||
i = 0;
|
||||
ind = dict_table_get_first_index(index->table);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user