summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2005-01-18 13:55:39 +0100
committerunknown <tomas@poseidon.ndb.mysql.com>2005-01-18 13:55:39 +0100
commit5c594201a5747797c38361d80db13fbdcc2b8776 (patch)
tree84a922091e1de3ea3abc640c520ec4ae061b5d55
parent23c03677d86f46197d075b4fb32aaedec5534573 (diff)
parent484dd6e516e08a46a8e10dd30612fe6c598cc8b1 (diff)
downloadmariadb-git-5c594201a5747797c38361d80db13fbdcc2b8776.tar.gz
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0 client/mysql.cc: Auto merged myisam/mi_open.c: Auto merged
-rw-r--r--BitKeeper/etc/logging_ok1
-rwxr-xr-xBuild-tools/Do-pkg2
-rw-r--r--client/mysql.cc10
-rw-r--r--client/mysqldump.c6
-rw-r--r--libmysql/libmysql.c3
-rw-r--r--myisam/mi_open.c2
-rw-r--r--mysql-test/r/ctype_utf8.result12
-rw-r--r--mysql-test/r/func_str.result2
-rw-r--r--mysql-test/r/order_by.result38
-rw-r--r--mysql-test/r/user_var.result13
-rw-r--r--mysql-test/t/ctype_utf8.test12
-rw-r--r--mysql-test/t/order_by.test33
-rw-r--r--mysql-test/t/symlink.test10
-rw-r--r--mysys/my_symlink.c9
-rw-r--r--ndb/tools/restore/Restore.hpp33
-rw-r--r--sql/filesort.cc3
-rw-r--r--sql/item_strfunc.cc4
-rw-r--r--sql/mysqld.cc2
-rw-r--r--sql/sql_lex.cc1
-rw-r--r--sql/sql_select.cc25
20 files changed, 180 insertions, 41 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index 02e65271dbe..83ad1717ba3 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -197,6 +197,7 @@ ram@mysql.r18.ru
ram@ram.(none)
ranger@regul.home.lan
rburnett@build.mysql.com
+reggie@bob.(none)
root@home.(none)
root@mc04.(none)
root@x3.internalnet
diff --git a/Build-tools/Do-pkg b/Build-tools/Do-pkg
index 38c1c47e2f3..9e3fde76f4f 100755
--- a/Build-tools/Do-pkg
+++ b/Build-tools/Do-pkg
@@ -87,7 +87,7 @@ $BUILDDIR= "$PWD/$HOST";
$PREFPANE= "$PWD/mysql-administrator/source/mac/PreferencePane/build/MySQL.prefPane";
$SRCBASEDIR= <$BUILDDIR/mysql*-$VERSION>;
$SUPFILEDIR= <$SRCBASEDIR/support-files/MacOSX>;
-$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>;
+$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc*.tar.gz>;
$TAR =~ /.*\/$NAME(.*)\.tar\.gz$/;
$ARCH= $1;
$NAME= $NAME . $ARCH;
diff --git a/client/mysql.cc b/client/mysql.cc
index 0f6f3084d1e..e178f79bcf3 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -3234,13 +3234,20 @@ static const char* construct_prompt()
break;
}
case 'p':
+ {
#ifndef EMBEDDED_LIBRARY
if (!connected)
{
processed_prompt.append("not_connected");
break;
}
- if (strstr(mysql_get_host_info(&mysql),"TCP/IP") ||
+
+ const char *host_info = mysql_get_host_info(&mysql);
+ if (strstr(host_info, "memory"))
+ {
+ processed_prompt.append( mysql.host );
+ }
+ else if (strstr(host_info,"TCP/IP") ||
!mysql.unix_socket)
add_int_to_prompt(mysql.port);
else
@@ -3249,6 +3256,7 @@ static const char* construct_prompt()
processed_prompt.append(pos ? pos+1 : mysql.unix_socket);
}
#endif
+ }
break;
case 'U':
if (!full_username)
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 458c8a3ecda..9b707af6107 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -305,6 +305,9 @@ static struct my_option my_long_options[] =
{"opt", OPT_OPTIMIZE,
"Same as --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, and --disable-keys. Enabled by default, disable with --skip-opt.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"order-by-primary", OPT_ORDER_BY_PRIMARY,
+ "Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful when dumping a MyISAM table to be loaded into an InnoDB table, but will make the dump itself take considerably longer.",
+ (gptr*) &opt_order_by_primary, (gptr*) &opt_order_by_primary, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"password", 'p',
"Password to use when connecting to server. If password is not given it's solicited on the tty.",
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
@@ -356,9 +359,6 @@ static struct my_option my_long_options[] =
{"socket", 'S', "Socket file to use for connection.",
(gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"order-by-primary", OPT_ORDER_BY_PRIMARY,
- "Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful when dumping a MyISAM table to be loaded into an InnoDB table, but will make the dump itself take considerably longer.",
- (gptr*) &opt_order_by_primary, (gptr*) &opt_order_by_primary, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#include <sslopt-longopts.h>
{"tab",'T',
"Creates tab separated textfile for each table to given path. (creates .sql and .txt files). NOTE: This only works if mysqldump is run on the same machine as the mysqld daemon.",
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 29c6f469098..7c6b4e31ab5 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -857,6 +857,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
err:
/* free up memory allocated with _init, usually */
(*options->local_infile_end)(li_ptr);
+ my_free(buf, MYF(0));
DBUG_RETURN(result);
}
@@ -1509,7 +1510,7 @@ ulong STDCALL mysql_thread_id(MYSQL *mysql)
const char * STDCALL mysql_character_set_name(MYSQL *mysql)
{
- return mysql->charset->name;
+ return mysql->charset->csname;
}
diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index 20eb4e636c3..9a6cfe9f33c 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -148,7 +148,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
goto err;
}
/* Don't call realpath() if the name can't be a link */
- if (strcmp(name_buff, org_name) ||
+ if (!strcmp(name_buff, org_name) ||
my_readlink(index_name, org_name, MYF(0)) == -1)
(void) strmov(index_name, org_name);
(void) fn_format(data_name,org_name,"",MI_NAME_DEXT,2+4+16);
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index cf63d25747a..faab013559a 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -849,3 +849,15 @@ utf8_bin 6109
utf8_bin 61
utf8_bin 6120
drop table t1;
+CREATE TABLE t1 (
+user varchar(255) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES ('one'),('two');
+SELECT CHARSET('a');
+CHARSET('a')
+utf8
+SELECT user, CONCAT('<', user, '>') AS c FROM t1;
+user c
+one <one>
+two <two>
+DROP TABLE t1;
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index 2399099b478..1f78e5098f8 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -466,7 +466,7 @@ collation(hex(130)) coercibility(hex(130))
latin1_swedish_ci 3
select collation(char(130)), coercibility(hex(130));
collation(char(130)) coercibility(hex(130))
-binary 3
+latin1_swedish_ci 3
select collation(format(130,10)), coercibility(format(130,10));
collation(format(130,10)) coercibility(format(130,10))
latin1_swedish_ci 3
diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result
index 6744ffa889f..5674fbb9177 100644
--- a/mysql-test/r/order_by.result
+++ b/mysql-test/r/order_by.result
@@ -740,3 +740,41 @@ a b
1 2
1 1
drop table t1;
+create table t1 (
+`sid` decimal(8,0) default null,
+`wnid` varchar(11) not null default '',
+key `wnid14` (`wnid`(4)),
+key `wnid` (`wnid`)
+) engine=myisam default charset=latin1;
+insert into t1 (`sid`, `wnid`) values
+('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
+('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
+('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
+('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
+('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
+('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
+('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
+('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
+('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
+('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
+('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
+('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
+('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
+('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
+('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
+explain select * from t1 where wnid like '0101%' order by wnid;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range wnid14,wnid wnid 13 NULL 10 Using where
+select * from t1 where wnid like '0101%' order by wnid;
+sid wnid
+10100 01019000000
+37986 01019000000
+37989 01019000000
+37987 01019010000
+37990 01019011000
+37991 01019011000
+37992 01019019000
+37993 01019030000
+39560 01019090000
+37994 01019090000
+drop table t1;
diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result
index d7d527dd720..69fcc5c45fe 100644
--- a/mysql-test/r/user_var.result
+++ b/mysql-test/r/user_var.result
@@ -172,23 +172,26 @@ SET TIMESTAMP=10000;
SET @`a b`='hello';
INSERT INTO t1 VALUES(@`a b`);
set @var1= "';aaa";
-insert into t1 values (@var1);
+SET @var2=char(ascii('a'));
+insert into t1 values (@var1),(@var2);
show binlog events from 95;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 95 User var 1 136 @`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
master-bin.000001 136 Query 1 222 use `test`; INSERT INTO t1 VALUES(@`a b`)
master-bin.000001 222 User var 1 264 @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
-master-bin.000001 264 Query 1 350 use `test`; insert into t1 values (@var1)
+master-bin.000001 264 User var 1 302 @`var2`=_latin1 0x61 COLLATE latin1_swedish_ci
+master-bin.000001 302 Query 1 396 use `test`; insert into t1 values (@var1),(@var2)
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
-SET @`a b`:=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci;
+SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
use test;
SET TIMESTAMP=10000;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
SET @@session.sql_mode=0;
INSERT INTO t1 VALUES(@`a b`);
-SET @`var1`:=_latin1 0x273B616161 COLLATE latin1_swedish_ci;
+SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
+SET @`var2`:=_latin1 0x61 COLLATE `latin1_swedish_ci`;
SET TIMESTAMP=10000;
-insert into t1 values (@var1);
+insert into t1 values (@var1),(@var2);
drop table t1;
set @var= NULL ;
select FIELD( @var,'1it','Hit') as my_column;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index a57db4455ab..8e3eb71c3e5 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -681,3 +681,15 @@ SET collation_connection='utf8_general_ci';
-- source include/ctype_filesort.inc
SET collation_connection='utf8_bin';
-- source include/ctype_filesort.inc
+
+#
+# Bug #7874 CONCAT() gives wrong results mixing
+# latin1 field and utf8 string literals
+#
+CREATE TABLE t1 (
+ user varchar(255) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES ('one'),('two');
+SELECT CHARSET('a');
+SELECT user, CONCAT('<', user, '>') AS c FROM t1;
+DROP TABLE t1;
diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test
index dd36cd95969..02e49f9750d 100644
--- a/mysql-test/t/order_by.test
+++ b/mysql-test/t/order_by.test
@@ -506,3 +506,36 @@ insert t1 values (1,1,1),(1,1,2),(1,2,1);
select a, b from t1 group by a, b order by sum(c);
drop table t1;
+#
+# Bug #7331
+#
+
+create table t1 (
+ `sid` decimal(8,0) default null,
+ `wnid` varchar(11) not null default '',
+ key `wnid14` (`wnid`(4)),
+ key `wnid` (`wnid`)
+) engine=myisam default charset=latin1;
+
+insert into t1 (`sid`, `wnid`) values
+('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
+('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
+('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
+('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
+('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
+('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
+('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
+('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
+('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
+('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
+('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
+('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
+('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
+('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
+('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
+
+explain select * from t1 where wnid like '0101%' order by wnid;
+
+select * from t1 where wnid like '0101%' order by wnid;
+
+drop table t1;
diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test
index 78c9b68fde5..9e71ac4b925 100644
--- a/mysql-test/t/symlink.test
+++ b/mysql-test/t/symlink.test
@@ -49,8 +49,9 @@ check table t9;
optimize table t9;
repair table t9;
alter table t9 add column c int not null;
---replace_result $MYSQL_TEST_DIR TEST_DIR
-show create table t9;
+
+#--replace_result $MYSQL_TEST_DIR TEST_DIR
+#show create table t9;
# Test renames
alter table t9 rename t8, add column d int not null;
@@ -64,6 +65,9 @@ drop table t1;
# Note that we are using the above table t9 here!
#
+--replace_result $MYSQL_TEST_DIR TEST_DIR
+SHOW CREATE TABLE t9;
+
disable_query_log;
--error 1103,1103
create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam data directory="tmp";
@@ -78,9 +82,11 @@ create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, p
--error 1103,1103
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="not-hard-path";
+# Should fail becasue the file t9.MYI already exist in 'run'
--error 1,1
eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="$MYSQL_TEST_DIR/var/run";
+# Should fail becasue the file t9.MYD already exist in 'tmp'
--error 1,1
eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam data directory="$MYSQL_TEST_DIR/var/tmp";
enable_query_log;
diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c
index 045802c5e61..7be3fcd36f0 100644
--- a/mysys/my_symlink.c
+++ b/mysys/my_symlink.c
@@ -26,9 +26,11 @@
/*
Reads the content of a symbolic link
If the file is not a symbolic link, return the original file name in to.
- Returns: 0 if table was a symlink,
- 1 if table was a normal file
- -1 on error.
+
+ RETURN
+ 0 If filename was a symlink, (to will be set to value of symlink)
+ 1 If filename was a normal file (to will be set to filename)
+ -1 on error.
*/
int my_readlink(char *to, const char *filename, myf MyFlags)
@@ -58,6 +60,7 @@ int my_readlink(char *to, const char *filename, myf MyFlags)
}
else
to[length]=0;
+ DBUG_PRINT("exit" ,("result: %d", result));
DBUG_RETURN(result);
#endif /* HAVE_READLINK */
}
diff --git a/ndb/tools/restore/Restore.hpp b/ndb/tools/restore/Restore.hpp
index e0b06c1774c..d7f6e3b7799 100644
--- a/ndb/tools/restore/Restore.hpp
+++ b/ndb/tools/restore/Restore.hpp
@@ -187,28 +187,33 @@ public:
};
void update_max_auto_val(const char *data, int size) {
- Uint64 val= 0;
+ union {
+ Uint8 u8;
+ Uint16 u16;
+ Uint32 u32;
+ } val;
+ Uint64 v;
switch(size){
- case 8:
- val= *(Uint8*)data;
- break;
- case 16:
- val= *(Uint16*)data;
- break;
- case 24:
- val= (0xffffff)&*(Uint32*)data;
+ case 64:
+ memcpy(&v,data,8);
break;
case 32:
- val= *(Uint32*)data;
+ memcpy(&val.u32,data,4);
+ v= val.u32;
break;
- case 64:
- val= *(Uint64*)data;
+ case 16:
+ memcpy(&val.u16,data,2);
+ v= val.u16;
+ break;
+ case 8:
+ memcpy(&val.u8,data,1);
+ v= val.u8;
break;
default:
return;
};
- if(val > m_max_auto_val)
- m_max_auto_val= val;
+ if(v > m_max_auto_val)
+ m_max_auto_val= v;
};
/**
* Get attribute descriptor
diff --git a/sql/filesort.cc b/sql/filesort.cc
index ecde74e5ec6..0e9fa8c79ed 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -847,7 +847,10 @@ int merge_many_buff(SORTPARAM *param, uchar *sort_buffer,
}
close_cached_file(to_file); // This holds old result
if (to_file == t_file)
+ {
*t_file=t_file2; // Copy result file
+ setup_io_cache(t_file);
+ }
DBUG_RETURN(*maxbuffer >= MERGEBUFF2); /* Return 1 if interrupted */
} /* merge_many_buff */
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 09b6d9cc35d..5d018b22055 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -277,7 +277,8 @@ String *Item_func_concat::val_str(String *str)
current_thd->variables.max_allowed_packet);
goto null;
}
- if (res->alloced_length() >= res->length()+res2->length())
+ if (!args[0]->const_item() &&
+ res->alloced_length() >= res->length()+res2->length())
{ // Use old buffer
res->append(*res2);
}
@@ -1906,6 +1907,7 @@ b1: str->append((char)(num>>8));
#endif
str->append((char)num);
}
+ str->set_charset(collation.collation);
str->realloc(str->length()); // Add end 0 (for Purify)
return str;
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index b66d1ce3c24..ee59ed8c8a1 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -4449,9 +4449,11 @@ Disable with --skip-large-pages.",
Disable with --skip-innodb (will save memory).",
(gptr*) &opt_innodb, (gptr*) &opt_innodb, 0, GET_BOOL, NO_ARG, OPT_INNODB_DEFAULT, 0, 0,
0, 0, 0},
+#ifdef HAVE_INNOBASE_DB
{"innodb_checksums", OPT_INNODB_CHECKSUMS, "Enable InnoDB checksums validation (enabled by default). \
Disable with --skip-innodb-checksums.", (gptr*) &innobase_use_checksums,
(gptr*) &innobase_use_checksums, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
+#endif
{"innodb_data_file_path", OPT_INNODB_DATA_FILE_PATH,
"Path to individual files and their sizes.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 495fa4a0bd1..2f6e74225fd 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -944,6 +944,7 @@ int yylex(void *arg, void *yythd)
if ((thd->client_capabilities & CLIENT_MULTI_STATEMENTS) &&
(thd->command != COM_PREPARE))
{
+ lex->safe_to_cache_query= 0;
lex->found_colon= (char*) lex->ptr;
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
lex->next_state= MY_LEX_END;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 0273334eca2..94a2390324c 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -10426,15 +10426,24 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
}
else
{
- select->quick->head->file->ha_index_end();
- /*
- We have verified above that select->quick is not
- index_merge quick select.
- */
- select->quick->index= new_ref_key;
- select->quick->init();
+ /*
+ The range optimizer constructed QUICK_RANGE for ref_key, and
+ we want to use instead new_ref_key as the index. We can't
+ just change the index of the quick select, because this may
+ result in an incosistent QUICK_SELECT object. Below we
+ create a new QUICK_SELECT from scratch so that all its
+ parameres are set correctly by the range optimizer.
+ */
+ key_map new_ref_key_map;
+ new_ref_key_map.clear_all(); /* Force the creation of quick select */
+ new_ref_key_map.set_bit(new_ref_key); /* only for new_ref_key. */
+
+ if (select->test_quick_select(tab->join->thd, new_ref_key_map, 0,
+ (tab->join->select_options & OPTION_FOUND_ROWS) ?
+ HA_POS_ERROR : tab->join->unit->select_limit_cnt) <= 0)
+ DBUG_RETURN(0);
}
- ref_key= new_ref_key;
+ ref_key= new_ref_key;
}
}
/* Check if we get the rows in requested sorted order by using the key */