Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
cc1ff3c4
Commit
cc1ff3c4
authored
Feb 07, 2004
by
vva@eagle.mysql.r18.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed bug #2592 mysqldump doesn't quote "tricky" names correctly
parent
d4d09768
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
47 additions
and
13 deletions
+47
-13
client/mysqldump.c
client/mysqldump.c
+2
-2
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+18
-0
mysql-test/t/mysqldump.test
mysql-test/t/mysqldump.test
+8
-0
sql/sql_lex.cc
sql/sql_lex.cc
+19
-11
No files found.
client/mysqldump.c
View file @
cc1ff3c4
...
...
@@ -649,7 +649,7 @@ static char *quote_name(const char *name, char *buff, my_bool force)
while
(
*
name
)
{
if
(
*
name
==
QUOTE_CHAR
)
*
to
=
QUOTE_CHAR
;
*
to
++
=
QUOTE_CHAR
;
*
to
++=
*
name
++
;
}
to
[
0
]
=
QUOTE_CHAR
;
...
...
@@ -1647,7 +1647,7 @@ static int dump_all_tables_in_db(char *database)
if
(
opt_xml
)
fputs
(
"</database>
\n
"
,
md_result_file
);
if
(
lock_tables
)
mysql_query
(
sock
,
"UNLOCK
_
TABLES"
);
mysql_query
(
sock
,
"UNLOCK
TABLES"
);
return
0
;
}
/* dump_all_tables_in_db */
...
...
mysql-test/r/mysqldump.result
View file @
cc1ff3c4
...
...
@@ -123,3 +123,21 @@ UNLOCK TABLES;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
DROP TABLE t1;
create table ```a` (i int);
DROP TABLE IF EXISTS ```a`;
CREATE TABLE ``a` (
`i` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40000 ALTER TABLE ```a` DISABLE KEYS */;
LOCK TABLES ```a` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE ```a` ENABLE KEYS */;
/*!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 */;
drop table ```a`;
mysql-test/t/mysqldump.test
View file @
cc1ff3c4
...
...
@@ -53,3 +53,11 @@ CREATE TABLE t1 (a VARCHAR(255)) DEFAULT CHARSET koi8r;
INSERT
INTO
t1
VALUES
(
_koi8r
x
'C1C2C3C4C5'
);
--
exec
$MYSQL_DUMP
--
skip
-
comments
test
t1
DROP
TABLE
t1
;
#
# Bug #2592
#
create
table
```a`
(
i
int
);
--
exec
$MYSQL_DUMP
--
skip
-
comments
test
drop
table
```a`
;
\ No newline at end of file
sql/sql_lex.cc
View file @
cc1ff3c4
...
...
@@ -667,13 +667,24 @@ int yylex(void *arg, void *yythd)
case
MY_LEX_USER_VARIABLE_DELIMITER
:
{
char
delim
=
c
;
// Used char
uint
double_quotes
=
0
;
char
quote_char
=
c
;
// Used char
lex
->
tok_start
=
lex
->
ptr
;
// Skip first `
#ifdef USE_MB
if
(
use_mb
(
cs
))
{
while
((
c
=
yyGet
())
&&
c
!=
delim
&&
c
!=
(
uchar
)
NAMES_SEP_CHAR
)
while
((
c
=
yyGet
())
)
{
if
(
c
==
quote_char
)
{
if
(
yyPeek
()
!=
quote_char
)
break
;
c
=
yyGet
();
double_quotes
++
;
continue
;
}
if
(
c
==
(
uchar
)
NAMES_SEP_CHAR
)
break
;
if
(
my_mbcharlen
(
cs
,
c
)
>
1
)
{
int
l
;
...
...
@@ -684,13 +695,10 @@ int yylex(void *arg, void *yythd)
lex
->
ptr
+=
l
-
1
;
}
}
yylval
->
lex_str
=
get_token
(
lex
,
yyLength
());
}
else
#endif
{
uint
double_quotes
=
0
;
char
quote_char
=
c
;
while
((
c
=
yyGet
()))
{
if
(
c
==
quote_char
)
...
...
@@ -704,13 +712,13 @@ int yylex(void *arg, void *yythd)
if
(
c
==
(
uchar
)
NAMES_SEP_CHAR
)
break
;
}
if
(
double_quotes
)
yylval
->
lex_str
=
get_quoted_token
(
lex
,
yyLength
()
-
double_quotes
,
quote_char
);
else
yylval
->
lex_str
=
get_token
(
lex
,
yyLength
());
}
if
(
c
==
delim
)
if
(
double_quotes
)
yylval
->
lex_str
=
get_quoted_token
(
lex
,
yyLength
()
-
double_quotes
,
quote_char
);
else
yylval
->
lex_str
=
get_token
(
lex
,
yyLength
());
if
(
c
==
quote_char
)
yySkip
();
// Skip end `
lex
->
next_state
=
MY_LEX_START
;
return
(
IDENT_QUOTED
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment