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
a4d046d5
Commit
a4d046d5
authored
Dec 27, 2004
by
heikki@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
Merge heikki@bk-internal.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/heikki/mysql-4.1
parents
15dd6d35
15e2dd99
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
145 additions
and
7 deletions
+145
-7
client/client_priv.h
client/client_priv.h
+1
-0
client/mysqldump.c
client/mysqldump.c
+99
-7
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+33
-0
mysql-test/t/mysqldump.test
mysql-test/t/mysqldump.test
+12
-0
No files found.
client/client_priv.h
View file @
a4d046d5
...
@@ -49,4 +49,5 @@ enum options_client
...
@@ -49,4 +49,5 @@ enum options_client
#ifdef HAVE_NDBCLUSTER_DB
#ifdef HAVE_NDBCLUSTER_DB
,
OPT_NDBCLUSTER
,
OPT_NDB_CONNECTSTRING
,
OPT_NDBCLUSTER
,
OPT_NDB_CONNECTSTRING
#endif
#endif
,
OPT_IGNORE_TABLE
};
};
client/mysqldump.c
View file @
a4d046d5
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#include <my_sys.h>
#include <my_sys.h>
#include <m_string.h>
#include <m_string.h>
#include <m_ctype.h>
#include <m_ctype.h>
#include <hash.h>
#include "client_priv.h"
#include "client_priv.h"
#include "mysql.h"
#include "mysql.h"
...
@@ -128,6 +129,16 @@ const char *compatible_mode_names[]=
...
@@ -128,6 +129,16 @@ const char *compatible_mode_names[]=
TYPELIB
compatible_mode_typelib
=
{
array_elements
(
compatible_mode_names
)
-
1
,
TYPELIB
compatible_mode_typelib
=
{
array_elements
(
compatible_mode_names
)
-
1
,
""
,
compatible_mode_names
,
NULL
};
""
,
compatible_mode_names
,
NULL
};
#define TABLE_RULE_HASH_SIZE 16
typedef
struct
st_table_rule_ent
{
char
*
key
;
/* dbname.tablename */
uint
key_len
;
}
TABLE_RULE_ENT
;
my_bool
ignore_table_inited
;
HASH
ignore_table
;
static
struct
my_option
my_long_options
[]
=
static
struct
my_option
my_long_options
[]
=
{
{
...
@@ -233,6 +244,11 @@ static struct my_option my_long_options[] =
...
@@ -233,6 +244,11 @@ static struct my_option my_long_options[] =
(
gptr
*
)
&
opt_hex_blob
,
(
gptr
*
)
&
opt_hex_blob
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
(
gptr
*
)
&
opt_hex_blob
,
(
gptr
*
)
&
opt_hex_blob
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"host"
,
'h'
,
"Connect to host."
,
(
gptr
*
)
&
current_host
,
{
"host"
,
'h'
,
"Connect to host."
,
(
gptr
*
)
&
current_host
,
(
gptr
*
)
&
current_host
,
0
,
GET_STR_ALLOC
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
(
gptr
*
)
&
current_host
,
0
,
GET_STR_ALLOC
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"ignore-table"
,
OPT_IGNORE_TABLE
,
"Do not dump the specified table. To specify more than one table to ignore, "
"use the directive multiple times, once for each table. Each table must "
"be specified with both database and table names, e.g. --ignore-table=database.table"
,
0
,
0
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lines-terminated-by"
,
OPT_LTB
,
"Lines in the i.file are terminated by ..."
,
{
"lines-terminated-by"
,
OPT_LTB
,
"Lines in the i.file are terminated by ..."
,
(
gptr
*
)
&
lines_terminated
,
(
gptr
*
)
&
lines_terminated
,
0
,
GET_STR
,
(
gptr
*
)
&
lines_terminated
,
(
gptr
*
)
&
lines_terminated
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
...
@@ -502,6 +518,32 @@ static void write_footer(FILE *sql_file)
...
@@ -502,6 +518,32 @@ static void write_footer(FILE *sql_file)
}
/* write_footer */
}
/* write_footer */
static
void
free_table_ent
(
TABLE_RULE_ENT
*
e
)
{
my_free
((
gptr
)
e
,
MYF
(
0
));
}
static
byte
*
get_table_key
(
TABLE_RULE_ENT
*
e
,
uint
*
len
,
my_bool
not_used
__attribute__
((
unused
)))
{
*
len
=
e
->
key_len
;
return
(
byte
*
)
e
->
key
;
}
void
init_table_rule_hash
(
HASH
*
h
,
bool
*
h_inited
)
{
if
(
hash_init
(
h
,
charset_info
,
TABLE_RULE_HASH_SIZE
,
0
,
0
,
(
hash_get_key
)
get_table_key
,
(
hash_free_key
)
free_table_ent
,
0
))
{
fprintf
(
stderr
,
"Internal hash initialization error
\n
"
);
exit
(
1
);
}
*
h_inited
=
1
;
}
static
my_bool
static
my_bool
get_one_option
(
int
optid
,
const
struct
my_option
*
opt
__attribute__
((
unused
)),
get_one_option
(
int
optid
,
const
struct
my_option
*
opt
__attribute__
((
unused
)),
...
@@ -573,6 +615,37 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
...
@@ -573,6 +615,37 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case
(
int
)
OPT_TABLES
:
case
(
int
)
OPT_TABLES
:
opt_databases
=
0
;
opt_databases
=
0
;
break
;
break
;
case
(
int
)
OPT_IGNORE_TABLE
:
{
const
char
*
dot
=
strchr
(
argument
,
'.'
);
if
(
!
dot
)
{
fprintf
(
stderr
,
"Illegal use of option --ignore-table=<database>.<table>
\n
"
);
exit
(
1
);
}
// len is always > 0 because we know the there exists a '.'
uint
len
=
(
uint
)
strlen
(
argument
);
TABLE_RULE_ENT
*
e
=
(
TABLE_RULE_ENT
*
)
my_malloc
(
sizeof
(
TABLE_RULE_ENT
)
+
len
,
MYF
(
MY_WME
));
if
(
!
e
)
{
fprintf
(
stderr
,
"Internal memory allocation error
\n
"
);
exit
(
1
);
}
e
->
key
=
(
char
*
)
e
+
sizeof
(
TABLE_RULE_ENT
);
e
->
key_len
=
len
;
memcpy
(
e
->
key
,
argument
,
len
);
if
(
!
ignore_table_inited
)
init_table_rule_hash
(
&
ignore_table
,
&
ignore_table_inited
);
if
(
my_hash_insert
(
&
ignore_table
,
(
byte
*
)
e
))
{
fprintf
(
stderr
,
"Internal hash insert error
\n
"
);
exit
(
1
);
}
break
;
}
case
(
int
)
OPT_COMPATIBLE
:
case
(
int
)
OPT_COMPATIBLE
:
{
{
char
buff
[
255
];
char
buff
[
255
];
...
@@ -1946,6 +2019,15 @@ static int init_dumping(char *database)
...
@@ -1946,6 +2019,15 @@ static int init_dumping(char *database)
}
/* init_dumping */
}
/* init_dumping */
my_bool
include_table
(
byte
*
hash_key
,
uint
len
)
{
if
(
ignore_table_inited
&&
hash_search
(
&
ignore_table
,
(
byte
*
)
hash_key
,
len
))
return
FALSE
;
return
TRUE
;
}
static
int
dump_all_tables_in_db
(
char
*
database
)
static
int
dump_all_tables_in_db
(
char
*
database
)
{
{
...
@@ -1953,6 +2035,12 @@ static int dump_all_tables_in_db(char *database)
...
@@ -1953,6 +2035,12 @@ static int dump_all_tables_in_db(char *database)
uint
numrows
;
uint
numrows
;
char
table_buff
[
NAME_LEN
*
2
+
3
];
char
table_buff
[
NAME_LEN
*
2
+
3
];
char
hash_key
[
2
*
NAME_LEN
+
2
];
/* "db.tablename" */
char
*
afterdot
;
afterdot
=
strmov
(
hash_key
,
database
);
*
afterdot
++=
'.'
;
if
(
init_dumping
(
database
))
if
(
init_dumping
(
database
))
return
1
;
return
1
;
if
(
opt_xml
)
if
(
opt_xml
)
...
@@ -1961,7 +2049,7 @@ static int dump_all_tables_in_db(char *database)
...
@@ -1961,7 +2049,7 @@ static int dump_all_tables_in_db(char *database)
{
{
DYNAMIC_STRING
query
;
DYNAMIC_STRING
query
;
init_dynamic_string
(
&
query
,
"LOCK TABLES "
,
256
,
1024
);
init_dynamic_string
(
&
query
,
"LOCK TABLES "
,
256
,
1024
);
for
(
numrows
=
0
;
(
table
=
getTableName
(
1
))
;
numrows
++
)
for
(
numrows
=
0
;
(
table
=
getTableName
(
1
))
;
numrows
++
)
{
{
dynstr_append
(
&
query
,
quote_name
(
table
,
table_buff
,
1
));
dynstr_append
(
&
query
,
quote_name
(
table
,
table_buff
,
1
));
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
...
@@ -1977,7 +2065,10 @@ static int dump_all_tables_in_db(char *database)
...
@@ -1977,7 +2065,10 @@ static int dump_all_tables_in_db(char *database)
DBerror
(
sock
,
"when doing refresh"
);
DBerror
(
sock
,
"when doing refresh"
);
/* We shall continue here, if --force was given */
/* We shall continue here, if --force was given */
}
}
while
((
table
=
getTableName
(
0
)))
while
((
table
=
getTableName
(
0
)))
{
char
*
end
=
strmov
(
afterdot
,
table
);
if
(
include_table
(
hash_key
,
end
-
hash_key
))
{
{
numrows
=
getTableStructure
(
table
,
database
);
numrows
=
getTableStructure
(
table
,
database
);
if
(
!
dFlag
&&
numrows
>
0
)
if
(
!
dFlag
&&
numrows
>
0
)
...
@@ -1985,6 +2076,7 @@ static int dump_all_tables_in_db(char *database)
...
@@ -1985,6 +2076,7 @@ static int dump_all_tables_in_db(char *database)
my_free
(
order_by
,
MYF
(
MY_ALLOW_ZERO_PTR
));
my_free
(
order_by
,
MYF
(
MY_ALLOW_ZERO_PTR
));
order_by
=
0
;
order_by
=
0
;
}
}
}
if
(
opt_xml
)
if
(
opt_xml
)
{
{
fputs
(
"</database>
\n
"
,
md_result_file
);
fputs
(
"</database>
\n
"
,
md_result_file
);
...
...
mysql-test/r/mysqldump.result
View file @
a4d046d5
...
@@ -480,3 +480,36 @@ UNLOCK TABLES;
...
@@ -480,3 +480,36 @@ UNLOCK TABLES;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
DROP TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a int);
CREATE TABLE t2 (a int);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (4),(5),(6);
/*!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" */;
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
`a` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
LOCK TABLES `t2` WRITE;
INSERT INTO `t2` VALUES (4),(5),(6);
UNLOCK TABLES;
/*!40000 ALTER TABLE `t2` 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 */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
DROP TABLE t1;
DROP TABLE t2;
mysql-test/t/mysqldump.test
View file @
a4d046d5
...
@@ -153,3 +153,15 @@ INSERT INTO t1 VALUES (_latin1 '
...
@@ -153,3 +153,15 @@ INSERT INTO t1 VALUES (_latin1 '
--
exec
$MYSQL_DUMP
--
character
-
sets
-
dir
=
$CHARSETSDIR
--
skip
-
comments
--
default
-
character
-
set
=
cp850
--
compatible
=
mysql323
test
t1
--
exec
$MYSQL_DUMP
--
character
-
sets
-
dir
=
$CHARSETSDIR
--
skip
-
comments
--
default
-
character
-
set
=
cp850
--
compatible
=
mysql323
test
t1
--
exec
$MYSQL_DUMP
--
character
-
sets
-
dir
=
$CHARSETSDIR
--
skip
-
comments
--
default
-
character
-
set
=
utf8
--
compatible
=
mysql323
test
t1
--
exec
$MYSQL_DUMP
--
character
-
sets
-
dir
=
$CHARSETSDIR
--
skip
-
comments
--
default
-
character
-
set
=
utf8
--
compatible
=
mysql323
test
t1
DROP
TABLE
t1
;
DROP
TABLE
t1
;
#
# WL #2319: Exclude Tables from dump
#
CREATE
TABLE
t1
(
a
int
);
CREATE
TABLE
t2
(
a
int
);
INSERT
INTO
t1
VALUES
(
1
),(
2
),(
3
);
INSERT
INTO
t2
VALUES
(
4
),(
5
),(
6
);
--
exec
$MYSQL_DUMP
--
skip
-
comments
--
ignore
-
table
=
test
.
t1
test
DROP
TABLE
t1
;
DROP
TABLE
t2
;
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