diff options
author | unknown <osku@127.(none)> | 2005-09-23 11:20:34 +0300 |
---|---|---|
committer | unknown <osku@127.(none)> | 2005-09-23 11:20:34 +0300 |
commit | 2e34a089392c12df9bef35c91d135c28ac114b34 (patch) | |
tree | ce6530b960229fcd168e9501f71caeccf13beec7 /innobase/include | |
parent | b2f7c99db726e6bf97465020fcf830db70e635f0 (diff) | |
download | mariadb-git-2e34a089392c12df9bef35c91d135c28ac114b34.tar.gz |
InnoDB: Fix bug #13315, index columns having a maximum length of 767.
innobase/data/data0data.c:
Adapt to DICT_MAX_COL_PREFIX_LEN rename.
innobase/dict/dict0dict.c:
Adapt to DICT_MAX_COL_PREFIX_LEN rename.
innobase/include/dict0mem.h:
Rename DICT_MAX_COL_PREFIX_LEN to DICT_MAX_INDEX_COL_LEN.
innobase/include/row0mysql.h:
Add field_lengths parameter to row_create_index_for_mysql.
innobase/rem/rem0rec.c:
Adapt to DICT_MAX_COL_PREFIX_LEN rename.
innobase/row/row0mysql.c:
Add field_lengths parameter to row_create_index_for_mysql and use it to
check for too long index columns.
mysql-test/r/innodb.result:
New tests.
mysql-test/t/innodb.test:
New tests.
sql/ha_innodb.cc:
Create temporary field_lengths buffer and pass it to
row_create_index_for_mysql.
Diffstat (limited to 'innobase/include')
-rw-r--r-- | innobase/include/dict0mem.h | 14 | ||||
-rw-r--r-- | innobase/include/row0mysql.h | 10 |
2 files changed, 15 insertions, 9 deletions
diff --git a/innobase/include/dict0mem.h b/innobase/include/dict0mem.h index ff6c4ec9b28..7eec86d0bcb 100644 --- a/innobase/include/dict0mem.h +++ b/innobase/include/dict0mem.h @@ -152,12 +152,12 @@ struct dict_col_struct{ in some of the functions below */ }; -/* DICT_MAX_COL_PREFIX_LEN is measured in bytes. Starting from 4.1.6, we -set max col prefix len to < 3 * 256, so that one can create a column prefix -index on 255 characters of a TEXT field also in the UTF-8 charset. In that -charset, a character may take at most 3 bytes. */ +/* DICT_MAX_INDEX_COL_LEN is measured in bytes and is the max index column +length + 1. Starting from 4.1.6, we set it to < 3 * 256, so that one can +create a column prefix index on 255 characters of a TEXT field also in the +UTF-8 charset. In that charset, a character may take at most 3 bytes. */ -#define DICT_MAX_COL_PREFIX_LEN 768 +#define DICT_MAX_INDEX_COL_LEN 768 /* Data structure for a field in an index */ struct dict_field_struct{ @@ -169,12 +169,12 @@ struct dict_field_struct{ prefix in bytes in a MySQL index of type, e.g., INDEX (textcol(25)); must be smaller than - DICT_MAX_COL_PREFIX_LEN; NOTE that + DICT_MAX_INDEX_COL_LEN; NOTE that in the UTF-8 charset, MySQL sets this to 3 * the prefix len in UTF-8 chars */ ulint fixed_len; /* 0 or the fixed length of the column if smaller than - DICT_MAX_COL_PREFIX_LEN */ + DICT_MAX_INDEX_COL_LEN */ ulint fixed_offs; /* offset to the field, or ULINT_UNDEFINED if it is not fixed within the record (due to preceding diff --git a/innobase/include/row0mysql.h b/innobase/include/row0mysql.h index a61705b90be..b5da4634d98 100644 --- a/innobase/include/row0mysql.h +++ b/innobase/include/row0mysql.h @@ -335,8 +335,14 @@ int row_create_index_for_mysql( /*=======================*/ /* out: error number or DB_SUCCESS */ - dict_index_t* index, /* in: index defintion */ - trx_t* trx); /* in: transaction handle */ + dict_index_t* index, /* in: index definition */ + trx_t* trx, /* in: transaction handle */ + const ulint* field_lengths); /* in: if not NULL, must contain + dict_index_get_n_fields(index) + actual field lengths for the + index columns, which are + then checked for not being too + large. */ /************************************************************************* Scans a table create SQL string and adds to the data dictionary the foreign key constraints declared in the string. This function |