BUG#13926: --order-by-primary fails if PKEY contains quote character.
Backporting from 5.0
This commit is contained in:
parent
a363599a81
commit
fb419c4241
@ -2589,6 +2589,8 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
char show_keys_buff[15 + 64 * 2 + 3];
|
char show_keys_buff[15 + 64 * 2 + 3];
|
||||||
uint result_length = 0;
|
uint result_length = 0;
|
||||||
char *result = 0;
|
char *result = 0;
|
||||||
|
char buff[NAME_LEN * 2 + 3];
|
||||||
|
char *quoted_field;
|
||||||
|
|
||||||
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
||||||
"SHOW KEYS FROM %s", table_name);
|
"SHOW KEYS FROM %s", table_name);
|
||||||
@ -2612,8 +2614,10 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
{
|
{
|
||||||
/* Key is unique */
|
/* Key is unique */
|
||||||
do
|
do
|
||||||
result_length += strlen(row[4]) + 1; /* + 1 for ',' or \0 */
|
{
|
||||||
while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1);
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
|
result_length+= strlen(quoted_field) + 1; /* + 1 for ',' or \0 */
|
||||||
|
} while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build the ORDER BY clause result */
|
/* Build the ORDER BY clause result */
|
||||||
@ -2627,9 +2631,13 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
}
|
}
|
||||||
mysql_data_seek(res, 0);
|
mysql_data_seek(res, 0);
|
||||||
row = mysql_fetch_row(res);
|
row = mysql_fetch_row(res);
|
||||||
end = strmov(result, row[4]);
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1)
|
end= strmov(result, quoted_field);
|
||||||
end = strxmov(end, ",", row[4], NullS);
|
while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1)
|
||||||
|
{
|
||||||
|
quoted_field= quote_name(row[4], buff, 0);
|
||||||
|
end= strxmov(end, ",", quoted_field, NullS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -1584,4 +1584,66 @@ CREATE TABLE `t1` (
|
|||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` INT,
|
||||||
|
`c"d` INT,
|
||||||
|
`e``f` INT,
|
||||||
|
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
insert into t1 values (0815, 4711, 2006);
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
DROP TABLE IF EXISTS "t1";
|
||||||
|
CREATE TABLE "t1" (
|
||||||
|
"a b" int(11) NOT NULL default '0',
|
||||||
|
"c""d" int(11) NOT NULL default '0',
|
||||||
|
"e`f" int(11) NOT NULL default '0',
|
||||||
|
PRIMARY KEY ("a b","c""d","e`f")
|
||||||
|
);
|
||||||
|
|
||||||
|
LOCK TABLES "t1" WRITE;
|
||||||
|
/*!40000 ALTER TABLE "t1" DISABLE KEYS */;
|
||||||
|
INSERT INTO "t1" VALUES (815,4711,2006);
|
||||||
|
/*!40000 ALTER TABLE "t1" ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8 */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
DROP TABLE IF EXISTS `t1`;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` int(11) NOT NULL default '0',
|
||||||
|
`c"d` int(11) NOT NULL default '0',
|
||||||
|
`e``f` int(11) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`a b`,`c"d`,`e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
LOCK TABLES `t1` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||||
|
INSERT INTO `t1` VALUES (815,4711,2006);
|
||||||
|
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
DROP TABLE `t1`;
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
|
@ -702,4 +702,19 @@ create table t1 (a int);
|
|||||||
--exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1
|
--exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#13926: --order-by-primary fails if PKEY contains quote character
|
||||||
|
#
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a b` INT,
|
||||||
|
`c"d` INT,
|
||||||
|
`e``f` INT,
|
||||||
|
PRIMARY KEY (`a b`, `c"d`, `e``f`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
insert into t1 values (0815, 4711, 2006);
|
||||||
|
|
||||||
|
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1
|
||||||
|
--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1
|
||||||
|
DROP TABLE `t1`;
|
||||||
|
|
||||||
--echo End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user