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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
15cb9cae
Commit
15cb9cae
authored
Sep 03, 2003
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Better quoting patch for mysqldump
client/mysqldump.c: Better quoting patch
parent
f888ceb1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
70 deletions
+85
-70
client/mysqldump.c
client/mysqldump.c
+85
-70
No files found.
client/mysqldump.c
View file @
15cb9cae
...
...
@@ -35,7 +35,7 @@
** and adapted to mysqldump 05/11/01 by Jani Tolonen
*/
#define DUMP_VERSION "8.2
2
"
#define DUMP_VERSION "8.2
3
"
#include <my_global.h>
#include <my_sys.h>
...
...
@@ -165,7 +165,7 @@ static int dump_all_tables_in_db(char *db);
static
int
init_dumping
(
char
*
);
static
int
dump_databases
(
char
**
);
static
int
dump_all_databases
();
static
char
*
quote_name
(
c
har
*
name
,
char
*
buff
);
static
char
*
quote_name
(
c
onst
char
*
name
,
char
*
buff
,
my_bool
force
);
static
void
print_quoted_xml
(
FILE
*
output
,
char
*
fname
,
char
*
str
,
uint
len
);
static
void
print_version
(
void
)
...
...
@@ -615,33 +615,43 @@ static my_bool test_if_special_chars(const char *str)
return
0
;
}
/* test_if_special_chars */
static
char
*
quote_name
(
char
*
name
,
char
*
buff
)
static
char
*
quote_name
(
const
char
*
name
,
char
*
buff
,
my_bool
force
)
{
char
*
end
;
if
(
!
opt_quoted
&&
!
test_if_special_chars
(
name
))
return
name
;
buff
[
0
]
=
QUOTE_CHAR
;
end
=
strmov
(
buff
+
1
,
name
);
end
[
0
]
=
QUOTE_CHAR
;
end
[
1
]
=
0
;
char
*
to
=
buff
;
if
(
!
force
&&
!
opt_quoted
&&
!
test_if_special_chars
(
name
))
return
(
char
*
)
name
;
*
to
++=
QUOTE_CHAR
;
while
(
*
name
)
{
if
(
*
name
==
QUOTE_CHAR
)
*
to
=
QUOTE_CHAR
;
*
to
++=
*
name
++
;
}
to
[
0
]
=
QUOTE_CHAR
;
to
[
1
]
=
0
;
return
buff
;
}
/* quote_name */
/*
** getStructure -- retrievs database structure, prints out corresponding
** CREATE statement and fills out insert_pat.
** Return values: number of fields in table, 0 if error
getStructure -- retrievs database structure, prints out corresponding
CREATE statement and fills out insert_pat.
RETURN
number of fields in table, 0 if error
*/
static
uint
getTableStructure
(
char
*
table
,
char
*
db
)
{
MYSQL_RES
*
tableRes
;
MYSQL_ROW
row
;
my_bool
init
=
0
;
uint
numFields
;
char
*
strpos
,
*
result_table
;
char
*
strpos
,
*
result_table
,
*
opt_quoted_table
;
const
char
*
delayed
;
char
name_buff
[
NAME_LEN
+
3
],
table_buff
[
NAME_LEN
+
3
];
char
name_buff
[
NAME_LEN
+
3
],
table_buff
[
NAME_LEN
*
2
+
3
];
char
table_buff2
[
NAME_LEN
*
2
+
3
];
FILE
*
sql_file
=
md_result_file
;
DBUG_ENTER
(
"getTableStructure"
);
...
...
@@ -651,7 +661,8 @@ static uint getTableStructure(char *table, char* db)
fprintf
(
stderr
,
"-- Retrieving table structure for table %s...
\n
"
,
table
);
sprintf
(
insert_pat
,
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d"
,
opt_quoted
);
result_table
=
quote_name
(
table
,
table_buff
);
result_table
=
quote_name
(
table
,
table_buff
,
1
);
opt_quoted_table
=
quote_name
(
table
,
table_buff2
,
0
);
if
(
!
mysql_query
(
sock
,
insert_pat
))
{
/* using SHOW CREATE statement */
...
...
@@ -660,11 +671,11 @@ static uint getTableStructure(char *table, char* db)
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
sprintf
(
buff
,
"show create table
`%s`"
,
table
);
sprintf
(
buff
,
"show create table
%s"
,
result_
table
);
if
(
mysql_query
(
sock
,
buff
))
{
fprintf
(
stderr
,
"%s: Can't get CREATE TABLE for table
'%s'
(%s)
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
fprintf
(
stderr
,
"%s: Can't get CREATE TABLE for table
%s
(%s)
\n
"
,
my_progname
,
result_
table
,
mysql_error
(
sock
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
...
...
@@ -684,10 +695,10 @@ static uint getTableStructure(char *table, char* db)
write_header
(
sql_file
,
db
);
}
if
(
!
opt_xml
)
fprintf
(
sql_file
,
"
\n
--
\n
-- Table structure for table
'%s'
\n
--
\n\n
"
,
table
);
fprintf
(
sql_file
,
"
\n
--
\n
-- Table structure for table
%s
\n
--
\n\n
"
,
result_
table
);
if
(
opt_drop
)
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
result
_table
);
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
opt_quoted
_table
);
tableRes
=
mysql_store_result
(
sock
);
row
=
mysql_fetch_row
(
tableRes
);
...
...
@@ -695,11 +706,11 @@ static uint getTableStructure(char *table, char* db)
fprintf
(
sql_file
,
"%s;
\n
"
,
row
[
1
]);
mysql_free_result
(
tableRes
);
}
sprintf
(
insert_pat
,
"show fields from
`%s`"
,
table
);
sprintf
(
insert_pat
,
"show fields from
%s"
,
result_
table
);
if
(
mysql_query
(
sock
,
insert_pat
)
||
!
(
tableRes
=
mysql_store_result
(
sock
)))
{
fprintf
(
stderr
,
"%s: Can't get info about table:
'%s'
\n
error: %s
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
fprintf
(
stderr
,
"%s: Can't get info about table:
%s
\n
error: %s
\n
"
,
my_progname
,
result_
table
,
mysql_error
(
sock
));
if
(
path
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
safe_exit
(
EX_MYSQLERR
);
...
...
@@ -707,10 +718,11 @@ static uint getTableStructure(char *table, char* db)
}
if
(
cFlag
)
sprintf
(
insert_pat
,
"INSERT %sINTO %s ("
,
delayed
,
result
_table
);
sprintf
(
insert_pat
,
"INSERT %sINTO %s ("
,
delayed
,
opt_quoted
_table
);
else
{
sprintf
(
insert_pat
,
"INSERT %sINTO %s VALUES "
,
delayed
,
result_table
);
sprintf
(
insert_pat
,
"INSERT %sINTO %s VALUES "
,
delayed
,
opt_quoted_table
);
if
(
!
extended_insert
)
strcat
(
insert_pat
,
"("
);
}
...
...
@@ -725,7 +737,7 @@ static uint getTableStructure(char *table, char* db)
}
init
=
1
;
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
));
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
,
0
));
}
numFields
=
(
uint
)
mysql_num_rows
(
tableRes
);
mysql_free_result
(
tableRes
);
...
...
@@ -735,11 +747,11 @@ static uint getTableStructure(char *table, char* db)
/* fprintf(stderr, "%s: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
my_progname, mysql_error(sock)); */
sprintf
(
insert_pat
,
"show fields from
`%s`"
,
result_table
);
sprintf
(
insert_pat
,
"show fields from
%s"
,
result_table
);
if
(
mysql_query
(
sock
,
insert_pat
)
||
!
(
tableRes
=
mysql_store_result
(
sock
)))
{
fprintf
(
stderr
,
"%s: Can't get info about table:
'%s'
\n
error: %s
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
fprintf
(
stderr
,
"%s: Can't get info about table:
%s
\n
error: %s
\n
"
,
my_progname
,
result_
table
,
mysql_error
(
sock
));
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
...
...
@@ -762,8 +774,8 @@ static uint getTableStructure(char *table, char* db)
write_header
(
sql_file
,
db
);
}
if
(
!
opt_xml
)
fprintf
(
sql_file
,
"
\n
--
\n
-- Table structure for table
'%s'
\n
--
\n\n
"
,
table
);
fprintf
(
sql_file
,
"
\n
--
\n
-- Table structure for table
%s
\n
--
\n\n
"
,
result_
table
);
if
(
opt_drop
)
fprintf
(
sql_file
,
"DROP TABLE IF EXISTS %s;
\n
"
,
result_table
);
fprintf
(
sql_file
,
"CREATE TABLE %s (
\n
"
,
result_table
);
...
...
@@ -790,15 +802,17 @@ static uint getTableStructure(char *table, char* db)
}
init
=
1
;
if
(
cFlag
)
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
));
strpos
=
strmov
(
strpos
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
,
0
));
if
(
!
tFlag
)
{
if
(
opt_keywords
)
fprintf
(
sql_file
,
" %s.%s %s"
,
result_table
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
,
0
),
row
[
SHOW_TYPE
]);
else
fprintf
(
sql_file
,
" %s %s"
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
),
row
[
SHOW_TYPE
]);
name_buff
,
0
),
row
[
SHOW_TYPE
]);
if
(
row
[
SHOW_DEFAULT
])
{
fputs
(
" DEFAULT "
,
sql_file
);
...
...
@@ -817,11 +831,11 @@ static uint getTableStructure(char *table, char* db)
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
uint
keynr
,
primary_key
;
sprintf
(
buff
,
"show keys from
`%s`"
,
table
);
sprintf
(
buff
,
"show keys from
%s"
,
result_
table
);
if
(
mysql_query
(
sock
,
buff
))
{
fprintf
(
stderr
,
"%s: Can't get keys for table
'%s'
(%s)
\n
"
,
my_progname
,
table
,
mysql_error
(
sock
));
fprintf
(
stderr
,
"%s: Can't get keys for table
%s
(%s)
\n
"
,
my_progname
,
result_
table
,
mysql_error
(
sock
));
if
(
path
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
safe_exit
(
EX_MYSQLERR
);
...
...
@@ -858,15 +872,15 @@ static uint getTableStructure(char *table, char* db)
putc
(
')'
,
sql_file
);
if
(
atoi
(
row
[
1
]))
/* Test if duplicate key */
/* Duplicate allowed */
fprintf
(
sql_file
,
",
\n
KEY %s ("
,
quote_name
(
row
[
2
],
name_buff
));
fprintf
(
sql_file
,
",
\n
KEY %s ("
,
quote_name
(
row
[
2
],
name_buff
,
0
));
else
if
(
keynr
==
primary_key
)
fputs
(
",
\n
PRIMARY KEY ("
,
sql_file
);
/* First UNIQUE is primary */
else
fprintf
(
sql_file
,
",
\n
UNIQUE %s ("
,
quote_name
(
row
[
2
],
name_buff
));
fprintf
(
sql_file
,
",
\n
UNIQUE %s ("
,
quote_name
(
row
[
2
],
name_buff
,
0
));
}
else
putc
(
','
,
sql_file
);
fputs
(
quote_name
(
row
[
4
],
name_buff
),
sql_file
);
fputs
(
quote_name
(
row
[
4
],
name_buff
,
0
),
sql_file
);
if
(
row
[
7
])
fprintf
(
sql_file
,
" (%s)"
,
row
[
7
]);
/* Sub key */
}
...
...
@@ -877,23 +891,23 @@ static uint getTableStructure(char *table, char* db)
/* Get MySQL specific create options */
if
(
create_options
)
{
sprintf
(
buff
,
"show table status like
`%s`"
,
table
);
sprintf
(
buff
,
"show table status like
%s"
,
result_
table
);
if
(
mysql_query
(
sock
,
buff
))
{
if
(
mysql_errno
(
sock
)
!=
ER_PARSE_ERROR
)
{
/* If old MySQL version */
if
(
verbose
)
fprintf
(
stderr
,
"-- Warning: Couldn't get status information for table
'%s'
(%s)
\n
"
,
table
,
mysql_error
(
sock
));
"-- Warning: Couldn't get status information for table
%s
(%s)
\n
"
,
result_
table
,
mysql_error
(
sock
));
}
}
else
if
(
!
(
tableRes
=
mysql_store_result
(
sock
))
||
!
(
row
=
mysql_fetch_row
(
tableRes
)))
{
fprintf
(
stderr
,
"Error: Couldn't read status information for table
'%s'
(%s)
\n
"
,
table
,
mysql_error
(
sock
));
"Error: Couldn't read status information for table
%s
(%s)
\n
"
,
result_
table
,
mysql_error
(
sock
));
}
else
{
...
...
@@ -909,7 +923,8 @@ static uint getTableStructure(char *table, char* db)
}
}
if
(
opt_disable_keys
)
fprintf
(
sql_file
,
"
\n
/*!40000 ALTER TABLE %s DISABLE KEYS */;
\n
"
,
result_table
);
fprintf
(
sql_file
,
"
\n
/*!40000 ALTER TABLE %s DISABLE KEYS */;
\n
"
,
result_table
);
if
(
cFlag
)
{
strpos
=
strmov
(
strpos
,
") VALUES "
);
...
...
@@ -979,6 +994,7 @@ static char *field_escape(char *to,const char *from,uint length)
static
void
dumpTable
(
uint
numFields
,
char
*
table
)
{
char
query
[
1024
],
*
end
,
buff
[
256
],
table_buff
[
NAME_LEN
+
3
],
*
result_table
;
char
table_buff2
[
NAME_LEN
*
2
+
3
],
*
opt_quoted_table
;
MYSQL_RES
*
res
;
MYSQL_FIELD
*
field
;
MYSQL_ROW
row
;
...
...
@@ -986,7 +1002,8 @@ static void dumpTable(uint numFields, char *table)
if
(
verbose
)
fprintf
(
stderr
,
"-- Sending SELECT query...
\n
"
);
result_table
=
quote_name
(
table
,
table_buff
);
result_table
=
quote_name
(
table
,
table_buff
,
1
);
opt_quoted_table
=
quote_name
(
table
,
table_buff2
,
0
);
if
(
path
)
{
char
filename
[
FN_REFLEN
],
tmp_path
[
FN_REFLEN
];
...
...
@@ -1013,7 +1030,7 @@ static void dumpTable(uint numFields, char *table)
end
=
add_load_option
(
end
,
lines_terminated
,
" LINES TERMINATED BY"
);
*
end
=
'\0'
;
sprintf
(
buff
,
" FROM
`%s`"
,
table
);
sprintf
(
buff
,
" FROM
%s"
,
result_
table
);
end
=
strmov
(
end
,
buff
);
if
(
where
)
end
=
strxmov
(
end
,
" WHERE "
,
where
,
NullS
);
...
...
@@ -1026,9 +1043,9 @@ static void dumpTable(uint numFields, char *table)
else
{
if
(
!
opt_xml
)
fprintf
(
md_result_file
,
"
\n
--
\n
-- Dumping data for table
'%s'
\n
--
\n
"
,
table
);
sprintf
(
query
,
"SELECT * FROM
`%s`"
,
table
);
fprintf
(
md_result_file
,
"
\n
--
\n
-- Dumping data for table
%s
\n
--
\n
"
,
result_
table
);
sprintf
(
query
,
"SELECT * FROM
%s"
,
result_
table
);
if
(
where
)
{
if
(
!
opt_xml
)
...
...
@@ -1055,14 +1072,14 @@ static void dumpTable(uint numFields, char *table)
fprintf
(
stderr
,
"-- Retrieving rows...
\n
"
);
if
(
mysql_num_fields
(
res
)
!=
numFields
)
{
fprintf
(
stderr
,
"%s: Error in field count for table:
'%s'
! Aborting.
\n
"
,
my_progname
,
table
);
fprintf
(
stderr
,
"%s: Error in field count for table:
%s
! Aborting.
\n
"
,
my_progname
,
result_
table
);
safe_exit
(
EX_CONSCHECK
);
return
;
}
if
(
opt_lock
)
fprintf
(
md_result_file
,
"LOCK TABLES %s WRITE;
\n
"
,
result
_table
);
fprintf
(
md_result_file
,
"LOCK TABLES %s WRITE;
\n
"
,
opt_quoted
_table
);
total_length
=
net_buffer_length
;
/* Force row break */
row_break
=
0
;
...
...
@@ -1090,8 +1107,8 @@ static void dumpTable(uint numFields, char *table)
{
if
(
!
(
field
=
mysql_fetch_field
(
res
)))
{
sprintf
(
query
,
"%s: Not enough fields from table
'%s'
! Aborting.
\n
"
,
my_progname
,
table
);
sprintf
(
query
,
"%s: Not enough fields from table
%s
! Aborting.
\n
"
,
my_progname
,
result_
table
);
fputs
(
query
,
stderr
);
safe_exit
(
EX_CONSCHECK
);
return
;
...
...
@@ -1215,18 +1232,18 @@ static void dumpTable(uint numFields, char *table)
fflush
(
md_result_file
);
if
(
mysql_errno
(
sock
))
{
sprintf
(
query
,
"%s: Error %d: %s when dumping table
'%s'
at row: %ld
\n
"
,
sprintf
(
query
,
"%s: Error %d: %s when dumping table
%s
at row: %ld
\n
"
,
my_progname
,
mysql_errno
(
sock
),
mysql_error
(
sock
),
table
,
result_
table
,
rownr
);
fputs
(
query
,
stderr
);
safe_exit
(
EX_CONSCHECK
);
return
;
}
if
(
opt_disable_keys
)
fprintf
(
md_result_file
,
"
\n
/*!40000 ALTER TABLE %s ENABLE KEYS */;
\n
"
,
fprintf
(
md_result_file
,
"
\n
/*!40000 ALTER TABLE %s ENABLE KEYS */;
\n
"
,
result_table
);
if
(
opt_lock
)
fputs
(
"UNLOCK TABLES;
\n
"
,
md_result_file
);
...
...
@@ -1351,7 +1368,7 @@ static int dump_all_tables_in_db(char *database)
{
char
*
table
;
uint
numrows
;
char
table_buff
[
NAME_LEN
+
3
];
char
table_buff
[
NAME_LEN
*
2
+
3
];
if
(
init_dumping
(
database
))
return
1
;
...
...
@@ -1361,9 +1378,8 @@ static int dump_all_tables_in_db(char *database)
init_dynamic_string
(
&
query
,
"LOCK TABLES "
,
256
,
1024
);
for
(
numrows
=
0
;
(
table
=
getTableName
(
1
))
;
numrows
++
)
{
dynstr_append
(
&
query
,
"`"
);
dynstr_append
(
&
query
,
table
);
dynstr_append
(
&
query
,
"` READ /*!32311 LOCAL */,"
);
dynstr_append
(
&
query
,
quote_name
(
table
,
table_buff
,
1
));
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
}
if
(
numrows
&&
mysql_real_query
(
sock
,
query
.
str
,
query
.
length
-
1
))
DBerror
(
sock
,
"when using LOCK TABLES"
);
...
...
@@ -1392,7 +1408,7 @@ static int dump_all_tables_in_db(char *database)
static
int
dump_selected_tables
(
char
*
db
,
char
**
table_names
,
int
tables
)
{
uint
numrows
;
char
table_buff
[
NAME_LEN
+
3
];
char
table_buff
[
NAME_LEN
*
+
3
];
if
(
init_dumping
(
db
))
return
1
;
...
...
@@ -1404,9 +1420,8 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
init_dynamic_string
(
&
query
,
"LOCK TABLES "
,
256
,
1024
);
for
(
i
=
0
;
i
<
tables
;
i
++
)
{
dynstr_append
(
&
query
,
"`"
);
dynstr_append
(
&
query
,
table_names
[
i
]);
dynstr_append
(
&
query
,
"` READ /*!32311 LOCAL */,"
);
dynstr_append
(
&
query
,
quote_name
(
table_names
[
i
],
table_buff
,
1
));
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
}
if
(
mysql_real_query
(
sock
,
query
.
str
,
query
.
length
-
1
))
DBerror
(
sock
,
"when doing LOCK TABLES"
);
...
...
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