Commit 48d93634 authored by unknown's avatar unknown

Merge bk-internal.mysql.com:/home/bk/mysql-4.1/

into serg.mylan:/usr/home/serg/Abk/mysql-4.1
parents 3e4084ae 7f4ddfdb
...@@ -224,7 +224,6 @@ Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG, ...@@ -224,7 +224,6 @@ Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG, Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
Q_SERVER_START, Q_SERVER_STOP,Q_REQUIRE_MANAGER, Q_SERVER_START, Q_SERVER_STOP,Q_REQUIRE_MANAGER,
Q_WAIT_FOR_SLAVE_TO_STOP, Q_WAIT_FOR_SLAVE_TO_STOP,
Q_REQUIRE_VERSION, Q_REQUIRE_OS,
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
Q_ENABLE_INFO, Q_DISABLE_INFO, Q_ENABLE_INFO, Q_DISABLE_INFO,
Q_ENABLE_METADATA, Q_DISABLE_METADATA, Q_ENABLE_METADATA, Q_DISABLE_METADATA,
...@@ -297,8 +296,6 @@ const char *command_names[]= ...@@ -297,8 +296,6 @@ const char *command_names[]=
"server_stop", "server_stop",
"require_manager", "require_manager",
"wait_for_slave_to_stop", "wait_for_slave_to_stop",
"require_version",
"require_os",
"enable_warnings", "enable_warnings",
"disable_warnings", "disable_warnings",
"enable_info", "enable_info",
...@@ -818,63 +815,6 @@ int do_server_op(struct st_query* q,const char* op) ...@@ -818,63 +815,6 @@ int do_server_op(struct st_query* q,const char* op)
} }
#endif #endif
int do_require_version(struct st_query* q)
{
MYSQL* mysql = &cur_con->mysql;
MYSQL_RES* res;
MYSQL_ROW row;
char* p=q->first_argument, *ver_arg;
uint ver_arg_len,ver_len;
LINT_INIT(res);
if (!*p)
die("Missing version argument in require_version\n");
ver_arg = p;
while (*p && !my_isspace(charset_info,*p))
p++;
*p = 0;
ver_arg_len = p - ver_arg;
if (mysql_query(mysql, "select version()") ||
!(res=mysql_store_result(mysql)))
die("Query failed while check server version: %s",
mysql_error(mysql));
if (!(row=mysql_fetch_row(res)) || !row[0])
{
mysql_free_result(res);
die("Strange result from query while checking version");
}
ver_len = strlen(row[0]);
if (ver_len < ver_arg_len || memcmp(row[0],ver_arg,ver_arg_len))
{
mysql_free_result(res);
abort_not_supported_test();
}
mysql_free_result(res);
return 0;
}
int do_require_os(struct st_query* q)
{
char *p=q->first_argument, *os_arg;
DBUG_ENTER("do_require_os");
if (!*p)
die("Missing version argument in require_os\n");
os_arg= p;
while (*p && !my_isspace(charset_info,*p))
p++;
*p = 0;
if (strcmp(os_arg, "unix"))
die("For now only testing of os=unix is implemented\n");
#if defined(__NETWARE__) || defined(__WIN__) || defined(__OS2__)
abort_not_supported_test();
#endif
DBUG_RETURN(0);
}
int do_source(struct st_query* q) int do_source(struct st_query* q)
{ {
char* p=q->first_argument, *name; char* p=q->first_argument, *name;
...@@ -2736,8 +2676,6 @@ int main(int argc, char **argv) ...@@ -2736,8 +2676,6 @@ int main(int argc, char **argv)
case Q_SOURCE: do_source(q); break; case Q_SOURCE: do_source(q); break;
case Q_SLEEP: do_sleep(q, 0); break; case Q_SLEEP: do_sleep(q, 0); break;
case Q_REAL_SLEEP: do_sleep(q, 1); break; case Q_REAL_SLEEP: do_sleep(q, 1); break;
case Q_REQUIRE_VERSION: do_require_version(q); break;
case Q_REQUIRE_OS: do_require_os(q); break;
case Q_WAIT_FOR_SLAVE_TO_STOP: do_wait_for_slave_to_stop(q); break; case Q_WAIT_FOR_SLAVE_TO_STOP: do_wait_for_slave_to_stop(q); break;
case Q_REQUIRE_MANAGER: do_require_manager(q); break; case Q_REQUIRE_MANAGER: do_require_manager(q); break;
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
......
...@@ -348,6 +348,8 @@ inline double ulonglong2double(ulonglong value) ...@@ -348,6 +348,8 @@ inline double ulonglong2double(ulonglong value)
#define MYSQL_DEFAULT_CHARSET_NAME "latin1" #define MYSQL_DEFAULT_CHARSET_NAME "latin1"
#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" #define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci"
#define HAVE_SPATIAL 1
/* Define charsets you want */ /* Define charsets you want */
/* #undef HAVE_CHARSET_armscii8 */ /* #undef HAVE_CHARSET_armscii8 */
/* #undef HAVE_CHARSET_ascii */ /* #undef HAVE_CHARSET_ascii */
......
...@@ -97,8 +97,7 @@ class ha_berkeley: public handler ...@@ -97,8 +97,7 @@ class ha_berkeley: public handler
ulong index_flags(uint idx, uint part) const ulong index_flags(uint idx, uint part) const
{ {
ulong flags=HA_READ_NEXT | HA_READ_PREV; ulong flags=HA_READ_NEXT | HA_READ_PREV;
if (part == (uint)~0 || if (table->key_info[idx].key_part[part].field->key_type() != HA_KEYTYPE_TEXT)
table->key_info[idx].key_part[part].field->key_type() != HA_KEYTYPE_TEXT)
flags|= HA_READ_ORDER | HA_KEYREAD_ONLY | HA_READ_RANGE; flags|= HA_READ_ORDER | HA_KEYREAD_ONLY | HA_READ_RANGE;
return flags; return flags;
} }
......
...@@ -449,7 +449,7 @@ class handler :public Sql_alloc ...@@ -449,7 +449,7 @@ class handler :public Sql_alloc
virtual const char *table_type() const =0; virtual const char *table_type() const =0;
virtual const char **bas_ext() const =0; virtual const char **bas_ext() const =0;
virtual ulong table_flags(void) const =0; virtual ulong table_flags(void) const =0;
virtual ulong index_flags(uint idx, uint part=~0) const =0; virtual ulong index_flags(uint idx, uint part=0) const =0;
virtual ulong index_ddl_flags(KEY *wanted_index) const virtual ulong index_ddl_flags(KEY *wanted_index) const
{ return (HA_DDL_SUPPORT); } { return (HA_DDL_SUPPORT); }
virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys)
......
...@@ -638,15 +638,16 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref, ...@@ -638,15 +638,16 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
keyinfo != keyinfo_end; keyinfo != keyinfo_end;
keyinfo++,idx++) keyinfo++,idx++)
{ {
if (!(table->file->index_flags(idx) & HA_READ_ORDER))
break;
KEY_PART_INFO *part,*part_end; KEY_PART_INFO *part,*part_end;
key_part_map key_part_to_use= 0; key_part_map key_part_to_use= 0;
uint jdx= 0;
for (part= keyinfo->key_part, part_end= part+keyinfo->key_parts ; for (part= keyinfo->key_part, part_end= part+keyinfo->key_parts ;
part != part_end ; part != part_end ;
part++, key_part_to_use= (key_part_to_use << 1) | 1) part++, jdx++, key_part_to_use= (key_part_to_use << 1) | 1)
{ {
if (!(table->file->index_flags(idx, jdx) & HA_READ_ORDER))
return 0;
if (field->eq(part->field)) if (field->eq(part->field))
{ {
ref->key= idx; ref->key= idx;
......
...@@ -2825,7 +2825,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, ...@@ -2825,7 +2825,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
Set tmp to (previous record count) * (records / combination) Set tmp to (previous record count) * (records / combination)
*/ */
if ((found_part & 1) && if ((found_part & 1) &&
(!(table->file->index_flags(key) & HA_ONLY_WHOLE_INDEX) || (!(table->file->index_flags(key,0) & HA_ONLY_WHOLE_INDEX) ||
found_part == PREV_BITS(uint,keyinfo->key_parts))) found_part == PREV_BITS(uint,keyinfo->key_parts)))
{ {
max_key_part=max_part_bit(found_part); max_key_part=max_part_bit(found_part);
...@@ -7171,7 +7171,9 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, ...@@ -7171,7 +7171,9 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
*/ */
if (!select->quick->reverse_sorted()) if (!select->quick->reverse_sorted())
{ {
if (!(table->file->index_flags(ref_key) & HA_READ_PREV)) // here used_key_parts >0
if (!(table->file->index_flags(ref_key,used_key_parts-1)
& HA_READ_PREV))
DBUG_RETURN(0); // Use filesort DBUG_RETURN(0); // Use filesort
// ORDER BY range_key DESC // ORDER BY range_key DESC
QUICK_SELECT_DESC *tmp=new QUICK_SELECT_DESC(select->quick, QUICK_SELECT_DESC *tmp=new QUICK_SELECT_DESC(select->quick,
...@@ -7193,7 +7195,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, ...@@ -7193,7 +7195,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
Use a traversal function that starts by reading the last row Use a traversal function that starts by reading the last row
with key part (A) and then traverse the index backwards. with key part (A) and then traverse the index backwards.
*/ */
if (!(table->file->index_flags(ref_key) & HA_READ_PREV)) if (!(table->file->index_flags(ref_key,used_key_parts-1)
& HA_READ_PREV))
DBUG_RETURN(0); // Use filesort DBUG_RETURN(0); // Use filesort
tab->read_first_record= join_read_last_key; tab->read_first_record= join_read_last_key;
tab->read_record.read_record= join_read_prev_same; tab->read_record.read_record= join_read_prev_same;
......
...@@ -995,7 +995,7 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) ...@@ -995,7 +995,7 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list)
str=(key_part->field ? key_part->field->field_name : str=(key_part->field ? key_part->field->field_name :
"?unknown field?"); "?unknown field?");
protocol->store(str, system_charset_info); protocol->store(str, system_charset_info);
if (table->file->index_flags(i) & HA_READ_ORDER) if (table->file->index_flags(i,j) & HA_READ_ORDER)
protocol->store(((key_part->key_part_flag & HA_REVERSE_SORT) ? protocol->store(((key_part->key_part_flag & HA_REVERSE_SORT) ?
"D" : "A"), 1, system_charset_info); "D" : "A"), 1, system_charset_info);
else else
......
...@@ -167,9 +167,9 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, ...@@ -167,9 +167,9 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
outparam->keys= keys= disk_buff[0]; outparam->keys= keys= disk_buff[0];
outparam->key_parts= key_parts= disk_buff[1]; outparam->key_parts= key_parts= disk_buff[1];
} }
outparam->keys_for_keyread.init(keys); outparam->keys_for_keyread.init(0);
outparam->keys_in_use.init(keys); outparam->keys_in_use.init(keys);
outparam->read_only_keys.init(0); outparam->read_only_keys.init(keys);
outparam->quick_keys.init(); outparam->quick_keys.init();
outparam->used_keys.init(); outparam->used_keys.init();
outparam->keys_in_use_for_query.init(); outparam->keys_in_use_for_query.init();
...@@ -500,13 +500,6 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, ...@@ -500,13 +500,6 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
if (outparam->key_info[key].flags & HA_FULLTEXT) if (outparam->key_info[key].flags & HA_FULLTEXT)
outparam->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT; outparam->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT;
/* This has to be done after the above fulltext correction */
if (!(outparam->file->index_flags(key) & HA_KEYREAD_ONLY))
{
outparam->read_only_keys.set_bit(key);
outparam->keys_for_keyread.clear_bit(key);
}
if (primary_key >= MAX_KEY && (keyinfo->flags & HA_NOSAME)) if (primary_key >= MAX_KEY && (keyinfo->flags & HA_NOSAME))
{ {
/* /*
...@@ -577,7 +570,11 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, ...@@ -577,7 +570,11 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
!(field->flags & BLOB_FLAG)) !(field->flags & BLOB_FLAG))
{ {
if (outparam->file->index_flags(key, i) & HA_KEYREAD_ONLY) if (outparam->file->index_flags(key, i) & HA_KEYREAD_ONLY)
{
outparam->read_only_keys.clear_bit(key);
outparam->keys_for_keyread.set_bit(key);
field->part_of_key.set_bit(key); field->part_of_key.set_bit(key);
}
if (outparam->file->index_flags(key, i) & HA_READ_ORDER) if (outparam->file->index_flags(key, i) & HA_READ_ORDER)
field->part_of_sortkey.set_bit(key); field->part_of_sortkey.set_bit(key);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment