mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
InnoDB: make ALTER TABLE to work on table names containing '#' (Bug #5856)
innobase/dict/dict0dict.c: dict_strip_comments(): do not look for comments within quotes (Bug #5856) innobase/row/row0mysql.c: row_drop_table_for_mysql(): Remove a memory leak
This commit is contained in:
@@ -2500,7 +2500,9 @@ dict_strip_comments(
|
|||||||
char* str;
|
char* str;
|
||||||
char* sptr;
|
char* sptr;
|
||||||
char* ptr;
|
char* ptr;
|
||||||
|
/* unclosed quote character (0 if none) */
|
||||||
|
char quote = 0;
|
||||||
|
|
||||||
str = mem_alloc(strlen(sql_string) + 1);
|
str = mem_alloc(strlen(sql_string) + 1);
|
||||||
|
|
||||||
sptr = sql_string;
|
sptr = sql_string;
|
||||||
@@ -2515,8 +2517,18 @@ scan_more:
|
|||||||
|
|
||||||
return(str);
|
return(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*sptr == '#'
|
if (*sptr == quote) {
|
||||||
|
/* Closing quote character: do not look for
|
||||||
|
starting quote or comments. */
|
||||||
|
quote = 0;
|
||||||
|
} else if (quote) {
|
||||||
|
/* Within quotes: do not look for
|
||||||
|
starting quotes or comments. */
|
||||||
|
} else if (*sptr == '"' || *sptr == '`') {
|
||||||
|
/* Starting quote: remember the quote character. */
|
||||||
|
quote = *sptr;
|
||||||
|
} else if (*sptr == '#'
|
||||||
|| (0 == memcmp("-- ", sptr, 3))) {
|
|| (0 == memcmp("-- ", sptr, 3))) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/* In Unix a newline is 0x0A while in Windows
|
/* In Unix a newline is 0x0A while in Windows
|
||||||
@@ -2531,9 +2543,7 @@ scan_more:
|
|||||||
|
|
||||||
sptr++;
|
sptr++;
|
||||||
}
|
}
|
||||||
}
|
} else if (!quote && *sptr == '/' && *(sptr + 1) == '*') {
|
||||||
|
|
||||||
if (*sptr == '/' && *(sptr + 1) == '*') {
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (*sptr == '*' && *(sptr + 1) == '/') {
|
if (*sptr == '*' && *(sptr + 1) == '/') {
|
||||||
|
|
||||||
|
@@ -2051,6 +2051,7 @@ row_drop_table_for_mysql(
|
|||||||
memcpy(sql, str1, (sizeof str1) - 1);
|
memcpy(sql, str1, (sizeof str1) - 1);
|
||||||
memcpy(sql + (sizeof str1) - 1, quoted_name, namelen);
|
memcpy(sql + (sizeof str1) - 1, quoted_name, namelen);
|
||||||
memcpy(sql + (sizeof str1) - 1 + namelen, str2, sizeof str2);
|
memcpy(sql + (sizeof str1) - 1 + namelen, str2, sizeof str2);
|
||||||
|
mem_free(quoted_name);
|
||||||
|
|
||||||
/* Serialize data dictionary operations with dictionary mutex:
|
/* Serialize data dictionary operations with dictionary mutex:
|
||||||
no deadlocks can occur then in these operations */
|
no deadlocks can occur then in these operations */
|
||||||
|
Reference in New Issue
Block a user