diff options
-rw-r--r-- | config/ac-macros/misc.m4 | 21 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | include/myisam.h | 13 | ||||
-rw-r--r-- | sql/mysql_priv.h | 6 | ||||
-rw-r--r-- | sql/opt_range.cc | 1 | ||||
-rw-r--r-- | sql/unireg.h | 2 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 2 |
7 files changed, 38 insertions, 8 deletions
diff --git a/config/ac-macros/misc.m4 b/config/ac-macros/misc.m4 index 6f93f38f119..5346b81fb03 100644 --- a/config/ac-macros/misc.m4 +++ b/config/ac-macros/misc.m4 @@ -693,6 +693,27 @@ dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_BIG_TABLES SECTION dnl --------------------------------------------------------------------------- + +dnl --------------------------------------------------------------------------- +dnl Macro: MYSQL_CHECK_MAX_INDEXES +dnl Sets MAX_INDEXES +dnl --------------------------------------------------------------------------- +AC_DEFUN([MYSQL_CHECK_MAX_INDEXES], [ + AC_ARG_WITH([max-indexes], + [ + --with-max-indexes=\# Sets the maximum number of indexes per table, default 64], + [max_indexes="$withval"], + [max_indexes=64]) + AC_MSG_CHECKING([max indexes per table]) + AC_DEFINE_UNQUOTED([MAX_INDEXES], [$max_indexes], + [Maximum number of indexes per table]) + AC_MSG_RESULT([$max_indexes]) +]) +dnl --------------------------------------------------------------------------- +dnl END OF MYSQL_CHECK_MAX_INDEXES SECTION +dnl --------------------------------------------------------------------------- + + dnl MYSQL_NEEDS_MYSYS_NEW AC_DEFUN([MYSQL_NEEDS_MYSYS_NEW], [AC_CACHE_CHECK([needs mysys_new helpers], mysql_use_mysys_new, diff --git a/configure.in b/configure.in index 9f0867da68a..38ce699a7c5 100644 --- a/configure.in +++ b/configure.in @@ -2413,6 +2413,7 @@ AC_SUBST(readline_link) AC_SUBST(readline_h_ln_cmd) MYSQL_CHECK_BIG_TABLES +MYSQL_CHECK_MAX_INDEXES MYSQL_CHECK_BDB MYSQL_CHECK_INNODB MYSQL_CHECK_EXAMPLEDB diff --git a/include/myisam.h b/include/myisam.h index 56717524bb2..96c1e7e192e 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -33,8 +33,6 @@ extern "C" { #endif #include "my_handler.h" - /* defines used by myisam-funktions */ - /* There is a hard limit for the maximum number of keys as there are only 8 bits in the index file header for the number of keys in a table. @@ -45,14 +43,19 @@ extern "C" { running myisamchk compiled for 128 keys on a table with 255 keys. */ #define MI_MAX_POSSIBLE_KEY 255 /* For myisam_chk */ +#if MAX_INDEXES > MI_MAX_POSSIBLE_KEY +#define MI_MAX_KEY MI_MAX_POSSIBLE_KEY /* Max allowed keys */ +#else +#define MI_MAX_KEY MAX_INDEXES /* Max allowed keys */ +#endif + #define MI_MAX_POSSIBLE_KEY_BUFF (1024+6+6) /* For myisam_chk */ /* The following defines can be increased if necessary. - BUT: MI_MAX_KEY must be <= MI_MAX_POSSIBLE_KEY. + But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and MI_MAX_KEY_LENGTH. */ -#define MI_MAX_KEY 64 /* Max allowed keys */ +#define MI_MAX_KEY_LENGTH 1000 /* Max length in bytes */ #define MI_MAX_KEY_SEG 16 /* Max segments for key */ -#define MI_MAX_KEY_LENGTH 1000 #define MI_MAX_KEY_BUFF (MI_MAX_KEY_LENGTH+MI_MAX_KEY_SEG*6+8+8) #define MI_MAX_MSG_BUF 1024 /* used in CHECK TABLE, REPAIR TABLE */ diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 6a1a65b963a..9b7921b2179 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -42,7 +42,11 @@ /* TODO convert all these three maps to Bitmap classes */ typedef ulonglong table_map; /* Used for table bits in join */ -typedef Bitmap<64> key_map; /* Used for finding keys */ +#if MAX_INDEXES <= 64 +typedef Bitmap<64> key_map; /* Used for finding keys */ +#else +typedef Bitmap<((MAX_INDEXES+7)/8*8)> key_map; /* Used for finding keys */ +#endif typedef ulong key_part_map; /* Used for finding key parts */ /* Used to identify NESTED_JOIN structures within a join (applicable only to diff --git a/sql/opt_range.cc b/sql/opt_range.cc index d9a608eb064..221a343053d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -3172,6 +3172,7 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param, trp->is_covering= TRUE; trp->read_cost= total_cost; trp->records= records; + trp->cpk_scan= NULL; DBUG_PRINT("info", ("Returning covering ROR-intersect plan: cost %g, records %lu", diff --git a/sql/unireg.h b/sql/unireg.h index 40499261a4d..b932a2f320c 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -48,7 +48,7 @@ #define MAX_ALIAS_NAME 256 #define MAX_FIELD_NAME 34 /* Max colum name length +2 */ #define MAX_SYS_VAR_LENGTH 32 -#define MAX_KEY 64 /* Max used keys */ +#define MAX_KEY MAX_INDEXES /* Max used keys */ #define MAX_REF_PARTS 16 /* Max parts used as ref */ #define MAX_KEY_LENGTH 3072 /* max possible key */ #if SIZEOF_OFF_T > 4 diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index ce732690700..36ab8094e5b 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -36,7 +36,7 @@ #define VER "2.1" #define MAX_TEST_QUERY_LENGTH 300 /* MAX QUERY BUFFER LENGTH */ -#define MAX_KEY 64 +#define MAX_KEY MAX_INDEXES #define MAX_SERVER_ARGS 64 /* set default options */ |