Commit e38dae0b authored by guilhem@mysql.com's avatar guilhem@mysql.com

Merge

parents 16258787 99417e07
...@@ -22,15 +22,15 @@ AUTOMAKE_OPTIONS = foreign ...@@ -22,15 +22,15 @@ AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = INSTALL-SOURCE README COPYING EXCEPTIONS-CLIENT EXTRA_DIST = INSTALL-SOURCE README COPYING EXCEPTIONS-CLIENT
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
@readline_topdir@ sql-common \ @readline_topdir@ sql-common \
@thread_dirs@ pstack @sql_client_dirs@ \ @thread_dirs@ pstack \
@sql_server_dirs@ scripts man tests \ @sql_server_dirs@ @sql_client_dirs@ scripts man tests \
netware @libmysqld_dirs@ \ netware @libmysqld_dirs@ \
@bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@
DIST_SUBDIRS = . include @docs_dirs@ zlib \ DIST_SUBDIRS = . include @docs_dirs@ zlib \
@readline_topdir@ sql-common \ @readline_topdir@ sql-common \
@thread_dirs@ pstack @sql_client_dirs@ \ @thread_dirs@ pstack \
@sql_server_dirs@ scripts @man_dirs@ tests SSL\ @sql_server_dirs@ @sql_client_dirs@ scripts @man_dirs@ tests SSL\
BUILD netware os2 @libmysqld_dirs@ \ BUILD netware os2 @libmysqld_dirs@ \
@bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@
......
...@@ -1678,6 +1678,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [ ...@@ -1678,6 +1678,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [
have_ndbcluster=no have_ndbcluster=no
ndbcluster_includes= ndbcluster_includes=
ndbcluster_libs= ndbcluster_libs=
ndb_mgmclient_libs=
case "$ndbcluster" in case "$ndbcluster" in
yes ) yes )
AC_MSG_RESULT([Using NDB Cluster]) AC_MSG_RESULT([Using NDB Cluster])
...@@ -1686,6 +1687,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [ ...@@ -1686,6 +1687,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [
ndbcluster_includes="-I../ndb/include -I../ndb/include/ndbapi" ndbcluster_includes="-I../ndb/include -I../ndb/include/ndbapi"
ndbcluster_libs="\$(top_builddir)/ndb/src/.libs/libndbclient.a" ndbcluster_libs="\$(top_builddir)/ndb/src/.libs/libndbclient.a"
ndbcluster_system_libs="" ndbcluster_system_libs=""
ndb_mgmclient_libs="\$(top_builddir)/ndb/src/mgmclient/libndbmgmclient.la"
MYSQL_CHECK_NDB_OPTIONS MYSQL_CHECK_NDB_OPTIONS
;; ;;
* ) * )
...@@ -1697,6 +1699,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [ ...@@ -1697,6 +1699,7 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [
AC_SUBST(ndbcluster_includes) AC_SUBST(ndbcluster_includes)
AC_SUBST(ndbcluster_libs) AC_SUBST(ndbcluster_libs)
AC_SUBST(ndbcluster_system_libs) AC_SUBST(ndbcluster_system_libs)
AC_SUBST(ndb_mgmclient_libs)
]) ])
dnl --------------------------------------------------------------------------- dnl ---------------------------------------------------------------------------
......
...@@ -20,7 +20,8 @@ ...@@ -20,7 +20,8 @@
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/regex \ INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/regex \
$(openssl_includes) $(openssl_includes)
LIBS = @CLIENT_LIBS@ LIBS = @CLIENT_LIBS@
DEPLIB= ../libmysql/libmysqlclient.la DEPLIB= ../libmysql/libmysqlclient.la \
@ndb_mgmclient_libs@
LDADD = @CLIENT_EXTRA_LDFLAGS@ $(DEPLIB) LDADD = @CLIENT_EXTRA_LDFLAGS@ $(DEPLIB)
bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \ bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \
mysqldump mysqlimport mysqltest mysqlbinlog mysqlmanagerc mysqlmanager-pwgen mysqldump mysqlimport mysqltest mysqlbinlog mysqlmanagerc mysqlmanager-pwgen
......
...@@ -46,4 +46,7 @@ enum options_client ...@@ -46,4 +46,7 @@ enum options_client
OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_CREATE_OPTIONS, OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_CREATE_OPTIONS,
OPT_START_POSITION, OPT_STOP_POSITION, OPT_START_DATETIME, OPT_STOP_DATETIME, OPT_START_POSITION, OPT_STOP_POSITION, OPT_START_DATETIME, OPT_STOP_DATETIME,
OPT_SIGINT_IGNORE, OPT_HEXBLOB OPT_SIGINT_IGNORE, OPT_HEXBLOB
#ifdef HAVE_NDBCLUSTER_DB
,OPT_NDBCLUSTER,OPT_NDB_CONNECTSTRING
#endif
}; };
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
/* maintaince of mysql databases */ /* maintaince of mysql databases */
#include "client_priv.h" #include "client_priv.h"
#include <signal.h> #include <signal.h>
#ifdef THREAD #ifdef THREAD
...@@ -25,6 +24,10 @@ ...@@ -25,6 +24,10 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <mysql.h> #include <mysql.h>
#ifdef HAVE_NDBCLUSTER_DB
#include "../ndb/src/mgmclient/ndb_mgmclient.h"
#endif
#define ADMIN_VERSION "8.41" #define ADMIN_VERSION "8.41"
#define MAX_MYSQL_VAR 256 #define MAX_MYSQL_VAR 256
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */ #define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
...@@ -42,6 +45,10 @@ static uint tcp_port = 0, option_wait = 0, option_silent=0, nr_iterations, ...@@ -42,6 +45,10 @@ static uint tcp_port = 0, option_wait = 0, option_silent=0, nr_iterations,
opt_count_iterations= 0; opt_count_iterations= 0;
static ulong opt_connect_timeout, opt_shutdown_timeout; static ulong opt_connect_timeout, opt_shutdown_timeout;
static my_string unix_port=0; static my_string unix_port=0;
#ifdef HAVE_NDBCLUSTER_DB
static my_bool opt_ndbcluster=0;
static char *opt_ndb_connectstring=0;
#endif
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
static char *shared_memory_base_name=0; static char *shared_memory_base_name=0;
...@@ -94,6 +101,9 @@ enum commands { ...@@ -94,6 +101,9 @@ enum commands {
ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS, ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS,
ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE, ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE,
ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD
#ifdef HAVE_NDBCLUSTER_DB
,ADMIN_NDB_MGM
#endif
}; };
static const char *command_names[]= { static const char *command_names[]= {
"create", "drop", "shutdown", "create", "drop", "shutdown",
...@@ -104,6 +114,9 @@ static const char *command_names[]= { ...@@ -104,6 +114,9 @@ static const char *command_names[]= {
"ping", "extended-status", "flush-status", "ping", "extended-status", "flush-status",
"flush-privileges", "start-slave", "stop-slave", "flush-privileges", "start-slave", "stop-slave",
"flush-threads","old-password", "flush-threads","old-password",
#ifdef HAVE_NDBCLUSTER_DB
"ndb-mgm",
#endif
NullS NullS
}; };
...@@ -184,6 +197,14 @@ static struct my_option my_long_options[] = ...@@ -184,6 +197,14 @@ static struct my_option my_long_options[] =
{"shutdown_timeout", OPT_SHUTDOWN_TIMEOUT, "", (gptr*) &opt_shutdown_timeout, {"shutdown_timeout", OPT_SHUTDOWN_TIMEOUT, "", (gptr*) &opt_shutdown_timeout,
(gptr*) &opt_shutdown_timeout, 0, GET_ULONG, REQUIRED_ARG, (gptr*) &opt_shutdown_timeout, 0, GET_ULONG, REQUIRED_ARG,
SHUTDOWN_DEF_TIMEOUT, 0, 3600*12, 0, 1, 0}, SHUTDOWN_DEF_TIMEOUT, 0, 3600*12, 0, 1, 0},
#ifdef HAVE_NDBCLUSTER_DB
{"ndbcluster", OPT_NDBCLUSTER, ""
"", (gptr*) &opt_ndbcluster,
(gptr*) &opt_ndbcluster, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"ndb-connectstring", OPT_NDB_CONNECTSTRING, ""
"", (gptr*) &opt_ndb_connectstring,
(gptr*) &opt_ndb_connectstring, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}; };
...@@ -882,6 +903,24 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) ...@@ -882,6 +903,24 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
} }
mysql->reconnect=1; /* Automatic reconnect is default */ mysql->reconnect=1; /* Automatic reconnect is default */
break; break;
#ifdef HAVE_NDBCLUSTER_DB
case ADMIN_NDB_MGM:
{
if (argc < 2)
{
my_printf_error(0,"Too few arguments to ndb-mgm",MYF(ME_BELL));
return 1;
}
{
Ndb_mgmclient_handle cmd=
ndb_mgmclient_handle_create(opt_ndb_connectstring);
ndb_mgmclient_execute(cmd, --argc, ++argv);
ndb_mgmclient_handle_destroy(cmd);
}
argc= 0;
}
break;
#endif
default: default:
my_printf_error(0,"Unknown command: '%-.60s'",MYF(ME_BELL),argv[0]); my_printf_error(0,"Unknown command: '%-.60s'",MYF(ME_BELL),argv[0]);
return 1; return 1;
...@@ -1248,3 +1287,9 @@ static my_bool wait_pidfile(char *pidfile, time_t last_modified, ...@@ -1248,3 +1287,9 @@ static my_bool wait_pidfile(char *pidfile, time_t last_modified,
} }
DBUG_RETURN(error); DBUG_RETURN(error);
} }
#ifdef HAVE_NDBCLUSTER_DB
/* lib linked in contains c++ code */
#ifdef __GNUC__
FIX_GCC_LINKING_PROBLEM
#endif
#endif
...@@ -256,7 +256,7 @@ static struct my_option my_long_options[] = ...@@ -256,7 +256,7 @@ static struct my_option my_long_options[] =
"any action on logs will happen at the exact moment of the dump." "any action on logs will happen at the exact moment of the dump."
"Option automatically turns --lock-tables off.", "Option automatically turns --lock-tables off.",
(gptr*) &opt_master_data, (gptr*) &opt_master_data, 0, (gptr*) &opt_master_data, (gptr*) &opt_master_data, 0,
GET_UINT, REQUIRED_ARG, 0, 0, MYSQL_OPT_MASTER_DATA_COMMENTED_SQL, 0, 0, 0}, GET_UINT, OPT_ARG, 0, 0, MYSQL_OPT_MASTER_DATA_COMMENTED_SQL, 0, 0, 0},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "", {"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "",
(gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0, (gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0,
GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096, GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096,
...@@ -552,6 +552,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -552,6 +552,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case '?': case '?':
usage(); usage();
exit(0); exit(0);
case (int) OPT_MASTER_DATA:
if (!argument) /* work like in old versions */
opt_master_data= MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL;
break;
case (int) OPT_OPTIMIZE: case (int) OPT_OPTIMIZE:
extended_insert= opt_drop= opt_lock= quick= create_options= extended_insert= opt_drop= opt_lock= quick= create_options=
opt_disable_keys= lock_tables= opt_set_charset= 1; opt_disable_keys= lock_tables= opt_set_charset= 1;
...@@ -2149,8 +2153,18 @@ static int do_show_master_status(MYSQL *mysql_con) ...@@ -2149,8 +2153,18 @@ static int do_show_master_status(MYSQL *mysql_con)
static int do_flush_tables_read_lock(MYSQL *mysql_con) static int do_flush_tables_read_lock(MYSQL *mysql_con)
{ {
/*
We do first a FLUSH TABLES. If a long update is running, the FLUSH TABLES
will wait but will not stall the whole mysqld, and when the long update is
done the FLUSH TABLES WITH READ LOCK will start and succeed quickly. So,
FLUSH TABLES is to lower the probability of a stage where both mysqldump
and most client connections are stalled. Of course, if a second long
update starts between the two FLUSHes, we have that bad stall.
*/
return return
mysql_query_with_error_report(mysql_con, 0, "FLUSH TABLES WITH READ LOCK"); ( mysql_query_with_error_report(mysql_con, 0, "FLUSH TABLES") ||
mysql_query_with_error_report(mysql_con, 0,
"FLUSH TABLES WITH READ LOCK") );
} }
......
...@@ -399,6 +399,7 @@ then ...@@ -399,6 +399,7 @@ then
then then
if $CXX -v 2>&1 | grep 'version 3' > /dev/null 2>&1 if $CXX -v 2>&1 | grep 'version 3' > /dev/null 2>&1
then then
CFLAGS="$CFLAGS -DDEFINE_CXA_PURE_VIRTUAL"
CXXFLAGS="$CXXFLAGS -DUSE_MYSYS_NEW -DDEFINE_CXA_PURE_VIRTUAL" CXXFLAGS="$CXXFLAGS -DUSE_MYSYS_NEW -DDEFINE_CXA_PURE_VIRTUAL"
fi fi
fi fi
...@@ -3125,7 +3126,6 @@ AC_CONFIG_FILES(ndb/Makefile ndb/include/Makefile dnl ...@@ -3125,7 +3126,6 @@ AC_CONFIG_FILES(ndb/Makefile ndb/include/Makefile dnl
ndb/src/kernel/blocks/qmgr/Makefile dnl ndb/src/kernel/blocks/qmgr/Makefile dnl
ndb/src/kernel/blocks/trix/Makefile dnl ndb/src/kernel/blocks/trix/Makefile dnl
ndb/src/kernel/blocks/backup/Makefile dnl ndb/src/kernel/blocks/backup/Makefile dnl
ndb/src/kernel/blocks/backup/restore/Makefile dnl
ndb/src/kernel/blocks/dbutil/Makefile dnl ndb/src/kernel/blocks/dbutil/Makefile dnl
ndb/src/kernel/blocks/suma/Makefile dnl ndb/src/kernel/blocks/suma/Makefile dnl
ndb/src/kernel/blocks/grep/Makefile dnl ndb/src/kernel/blocks/grep/Makefile dnl
......
...@@ -194,10 +194,10 @@ C_MODE_END ...@@ -194,10 +194,10 @@ C_MODE_END
/* Fix problem when linking c++ programs with gcc 3.x */ /* Fix problem when linking c++ programs with gcc 3.x */
#ifdef DEFINE_CXA_PURE_VIRTUAL #ifdef DEFINE_CXA_PURE_VIRTUAL
#define FIX_GCC_LINKING_PROBLEM \ #define FIX_GCC_LINKING_PROBLEM \
extern "C" { int __cxa_pure_virtual() {\ C_MODE_START int __cxa_pure_virtual() {\
DBUG_ASSERT("Pure virtual method called." == "Aborted");\ DBUG_ASSERT("Pure virtual method called." == "Aborted");\
return 0;\ return 0;\
} } } C_MODE_END
#else #else
#define FIX_GCC_LINKING_PROBLEM #define FIX_GCC_LINKING_PROBLEM
#endif #endif
......
...@@ -2899,3 +2899,41 @@ hex(a) STRCMP(a,'a') STRCMP(a,'a ') ...@@ -2899,3 +2899,41 @@ hex(a) STRCMP(a,'a') STRCMP(a,'a ')
6109 -1 -1 6109 -1 -1
61 0 0 61 0 0
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
`id` int(11) NOT NULL auto_increment,
`url` varchar(200) NOT NULL default '',
`name` varchar(250) NOT NULL default '',
`type` int(11) NOT NULL default '0',
`website` varchar(250) NOT NULL default '',
`adddate` date NOT NULL default '0000-00-00',
`size` varchar(20) NOT NULL default '',
`movieid` int(11) NOT NULL default '0',
`musicid` int(11) NOT NULL default '0',
`star` varchar(20) NOT NULL default '',
`download` int(11) NOT NULL default '0',
`lastweek` int(11) NOT NULL default '0',
`thisweek` int(11) NOT NULL default '0',
`page` varchar(250) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) CHARACTER SET tis620;
INSERT INTO t1 VALUES
(1,'http://www.siamzone.com/download/download/000001-frodo_1024.jpg','The Lord
of the Rings
Wallpapers',1,'http://www.lordoftherings.net','2002-01-22','',448,0,'',3805,0,0,
'');
INSERT INTO t1 VALUES (2,'http://www.othemovie.com/OScreenSaver1.EXE','O
Screensaver',2,'','2002-01-22','',491,0,'',519,0,0,'');
INSERT INTO t1 VALUES
(3,'http://www.siamzone.com/download/download/000003-jasonx2(800x600).jpg','Jaso
n X Wallpapers',1,'','2002-05-31','',579,0,'',1091,0,0,'');
select * from t1 order by id;
id url name type website adddate size movieid musicid star download lastweek thisweek page
1 http://www.siamzone.com/download/download/000001-frodo_1024.jpg The Lord
of the Rings
Wallpapers 1 http://www.lordoftherings.net 2002-01-22 448 0 3805 0 0
2 http://www.othemovie.com/OScreenSaver1.EXE O
Screensaver 2 2002-01-22 491 0 519 0 0
3 http://www.siamzone.com/download/download/000003-jasonx2(800x600).jpg Jaso
n X Wallpapers 1 2002-05-31 579 0 1091 0 0
DROP TABLE t1;
...@@ -20,3 +20,73 @@ a ...@@ -20,3 +20,73 @@ a
9 9
drop table t1; drop table t1;
drop database mysqltest1; drop database mysqltest1;
drop database if exists rewrite;
create database rewrite;
use test;
create table t1 (a date, b date, c date not null, d date);
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',';
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
Warning 1265 Data truncated for column 'c' at row 1
Warning 1265 Data truncated for column 'd' at row 1
Warning 1265 Data truncated for column 'a' at row 2
Warning 1265 Data truncated for column 'b' at row 2
Warning 1265 Data truncated for column 'd' at row 2
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' IGNORE 2 LINES;
select * from rewrite.t1;
a b c d
0000-00-00 NULL 0000-00-00 0000-00-00
0000-00-00 0000-00-00 0000-00-00 0000-00-00
2003-03-03 2003-03-03 2003-03-03 NULL
2003-03-03 2003-03-03 2003-03-03 NULL
truncate table t1;
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
Warnings:
Warning 1265 Data truncated for column 'c' at row 1
Warning 1265 Data truncated for column 'd' at row 1
Warning 1265 Data truncated for column 'b' at row 2
Warning 1265 Data truncated for column 'd' at row 2
select * from rewrite.t1;
a b c d
NULL NULL 0000-00-00 0000-00-00
NULL 0000-00-00 0000-00-00 0000-00-00
NULL 2003-03-03 2003-03-03 NULL
drop table t1;
create table t1 (a text, b text);
load data infile '../../std_data/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
Warnings:
Warning 1261 Row 3 doesn't contain data for all columns
select concat('|',a,'|'), concat('|',b,'|') from rewrite.t1;
concat('|',a,'|') concat('|',b,'|')
|Field A| |Field B|
|Field 1| |Field 2'
Field 3,'Field 4|
|Field 5' ,'Field 6| NULL
|Field 6| | 'Field 7'|
drop table t1;
create table t1 (a int, b char(10));
load data infile '../../std_data/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
Warnings:
Warning 1265 Data truncated for column 'a' at row 3
Warning 1262 Row 3 was truncated; it contained more data than there were input columns
Warning 1265 Data truncated for column 'a' at row 5
Warning 1262 Row 5 was truncated; it contained more data than there were input columns
select * from rewrite.t1;
a b
1 row 1
2 row 2
0 1234567890
3 row 3
0 1234567890
truncate table t1;
load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
Warnings:
Warning 1265 Data truncated for column 'a' at row 4
Warning 1261 Row 4 doesn't contain data for all columns
select * from rewrite.t1;
a b
1 row 1
2 row 2
3 row 3
0
drop table t1;
...@@ -116,3 +116,38 @@ CREATE TABLE t1 (a char(10) not null) CHARACTER SET tis620; ...@@ -116,3 +116,38 @@ CREATE TABLE t1 (a char(10) not null) CHARACTER SET tis620;
INSERT INTO t1 VALUES ('a'),('a\0'),('a\t'),('a '); INSERT INTO t1 VALUES ('a'),('a\0'),('a\t'),('a ');
SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t1; SELECT hex(a),STRCMP(a,'a'), STRCMP(a,'a ') FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#6608
#
CREATE TABLE t1 (
`id` int(11) NOT NULL auto_increment,
`url` varchar(200) NOT NULL default '',
`name` varchar(250) NOT NULL default '',
`type` int(11) NOT NULL default '0',
`website` varchar(250) NOT NULL default '',
`adddate` date NOT NULL default '0000-00-00',
`size` varchar(20) NOT NULL default '',
`movieid` int(11) NOT NULL default '0',
`musicid` int(11) NOT NULL default '0',
`star` varchar(20) NOT NULL default '',
`download` int(11) NOT NULL default '0',
`lastweek` int(11) NOT NULL default '0',
`thisweek` int(11) NOT NULL default '0',
`page` varchar(250) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) CHARACTER SET tis620;
INSERT INTO t1 VALUES
(1,'http://www.siamzone.com/download/download/000001-frodo_1024.jpg','The Lord
of the Rings
Wallpapers',1,'http://www.lordoftherings.net','2002-01-22','',448,0,'',3805,0,0,
'');
INSERT INTO t1 VALUES (2,'http://www.othemovie.com/OScreenSaver1.EXE','O
Screensaver',2,'','2002-01-22','',491,0,'',519,0,0,'');
INSERT INTO t1 VALUES
(3,'http://www.siamzone.com/download/download/000003-jasonx2(800x600).jpg','Jaso
n X Wallpapers',1,'','2002-05-31','',579,0,'',1091,0,0,'');
select * from t1 order by id;
DROP TABLE t1;
"--replicate-rewrite-db=mysqltest1->test" "--replicate-rewrite-db=test->rewrite" "--replicate-rewrite-db=mysqltest1->test"
...@@ -17,3 +17,61 @@ drop table t1; ...@@ -17,3 +17,61 @@ drop table t1;
drop database mysqltest1; drop database mysqltest1;
sync_slave_with_master; sync_slave_with_master;
#
# BUG#6353:
# Option --replicate-rewrite-db should work together with LOAD DATA INFILE
#
connection slave;
--disable_warnings
drop database if exists rewrite;
--enable_warnings
create database rewrite;
connection master;
use test;
create table t1 (a date, b date, c date not null, d date);
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',';
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' IGNORE 2 LINES;
sync_slave_with_master;
connection slave;
select * from rewrite.t1;
connection master;
truncate table t1;
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
sync_slave_with_master;
connection slave;
select * from rewrite.t1;
connection master;
drop table t1;
create table t1 (a text, b text);
load data infile '../../std_data/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
sync_slave_with_master;
connection slave;
select concat('|',a,'|'), concat('|',b,'|') from rewrite.t1;
connection master;
drop table t1;
create table t1 (a int, b char(10));
load data infile '../../std_data/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
sync_slave_with_master;
connection slave;
select * from rewrite.t1;
connection master;
truncate table t1;
load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
sync_slave_with_master;
connection slave;
# The empty line last comes from the end line field in the file
select * from rewrite.t1;
connection master;
drop table t1;
...@@ -11,4 +11,5 @@ INCLUDES += -I$(srcdir) -I$(top_srcdir)/include \ ...@@ -11,4 +11,5 @@ INCLUDES += -I$(srcdir) -I$(top_srcdir)/include \
-I$(top_srcdir)/ndb/include/util \ -I$(top_srcdir)/ndb/include/util \
-I$(top_srcdir)/ndb/include/portlib \ -I$(top_srcdir)/ndb/include/portlib \
-I$(top_srcdir)/ndb/test/include \ -I$(top_srcdir)/ndb/test/include \
-I$(top_srcdir)/ndb/include/mgmapi -I$(top_srcdir)/ndb/include/mgmapi \
-I$(top_srcdir)/ndb/include/kernel
...@@ -11,8 +11,8 @@ libndbclient_la_LIBADD = \ ...@@ -11,8 +11,8 @@ libndbclient_la_LIBADD = \
common/transporter/libtransporter.la \ common/transporter/libtransporter.la \
common/debugger/libtrace.la \ common/debugger/libtrace.la \
common/debugger/signaldata/libsignaldataprint.la \ common/debugger/signaldata/libsignaldataprint.la \
common/mgmcommon/libmgmsrvcommon.la \
mgmapi/libmgmapi.la \ mgmapi/libmgmapi.la \
common/mgmcommon/libmgmsrvcommon.la \
common/logger/liblogger.la \ common/logger/liblogger.la \
common/portlib/libportlib.la \ common/portlib/libportlib.la \
common/util/libgeneral.la common/util/libgeneral.la
noinst_LTLIBRARIES = libmgmsrvcommon.la noinst_LTLIBRARIES = libmgmsrvcommon.la
libmgmsrvcommon_la_SOURCES = \ libmgmsrvcommon_la_SOURCES = \
LocalConfig.cpp \
ConfigRetriever.cpp \ ConfigRetriever.cpp \
IPCConfig.cpp NdbConfig.c IPCConfig.cpp
INCLUDES_LOC = -I$(top_srcdir)/ndb/src/mgmapi -I$(top_srcdir)/ndb/src/mgmsrv INCLUDES_LOC = -I$(top_srcdir)/ndb/src/mgmapi -I$(top_srcdir)/ndb/src/mgmsrv
DEFS_LOC = -DNDB_PORT="\"@ndb_port@\""
include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_ndbapi.mk.am include $(top_srcdir)/ndb/config/type_ndbapi.mk.am
include $(top_srcdir)/ndb/config/type_mgmapiclient.mk.am include $(top_srcdir)/ndb/config/type_mgmapiclient.mk.am
......
...@@ -5,7 +5,8 @@ noinst_LTLIBRARIES = libportlib.la ...@@ -5,7 +5,8 @@ noinst_LTLIBRARIES = libportlib.la
libportlib_la_SOURCES = \ libportlib_la_SOURCES = \
NdbCondition.c NdbMutex.c NdbSleep.c NdbTick.c \ NdbCondition.c NdbMutex.c NdbSleep.c NdbTick.c \
NdbEnv.c NdbThread.c NdbHost.c NdbTCP.cpp \ NdbEnv.c NdbThread.c NdbHost.c NdbTCP.cpp \
NdbDaemon.c NdbMem.c NdbDaemon.c NdbMem.c \
NdbConfig.c
include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_util.mk.am include $(top_srcdir)/ndb/config/type_util.mk.am
......
...@@ -467,7 +467,8 @@ TransporterRegistry::prepareSend(const SignalHeader * const signalHeader, ...@@ -467,7 +467,8 @@ TransporterRegistry::prepareSend(const SignalHeader * const signalHeader,
Transporter *t = theTransporters[nodeId]; Transporter *t = theTransporters[nodeId];
if(t != NULL && if(t != NULL &&
(((ioStates[nodeId] != HaltOutput) && (ioStates[nodeId] != HaltIO)) || (((ioStates[nodeId] != HaltOutput) && (ioStates[nodeId] != HaltIO)) ||
(signalHeader->theReceiversBlockNumber == 252))) { ((signalHeader->theReceiversBlockNumber == 252) ||
(signalHeader->theReceiversBlockNumber == 4002)))) {
if(t->isConnected()){ if(t->isConnected()){
Uint32 lenBytes = t->m_packer.getMessageLength(signalHeader, ptr); Uint32 lenBytes = t->m_packer.getMessageLength(signalHeader, ptr);
...@@ -538,7 +539,8 @@ TransporterRegistry::prepareSend(const SignalHeader * const signalHeader, ...@@ -538,7 +539,8 @@ TransporterRegistry::prepareSend(const SignalHeader * const signalHeader,
Transporter *t = theTransporters[nodeId]; Transporter *t = theTransporters[nodeId];
if(t != NULL && if(t != NULL &&
(((ioStates[nodeId] != HaltOutput) && (ioStates[nodeId] != HaltIO)) || (((ioStates[nodeId] != HaltOutput) && (ioStates[nodeId] != HaltIO)) ||
(signalHeader->theReceiversBlockNumber == 252))) { ((signalHeader->theReceiversBlockNumber == 252)||
(signalHeader->theReceiversBlockNumber == 4002)))) {
if(t->isConnected()){ if(t->isConnected()){
Uint32 lenBytes = t->m_packer.getMessageLength(signalHeader, ptr); Uint32 lenBytes = t->m_packer.getMessageLength(signalHeader, ptr);
......
SUBDIRS = restore
noinst_LIBRARIES = libbackup.a noinst_LIBRARIES = libbackup.a
libbackup_a_SOURCES = Backup.cpp BackupInit.cpp libbackup_a_SOURCES = Backup.cpp BackupInit.cpp
......
ndbtools_PROGRAMS = ndb_restore
ndb_restore_SOURCES = main.cpp consumer.cpp consumer_restore.cpp consumer_printer.cpp Restore.cpp
LDADD_LOC = \
$(top_builddir)/ndb/src/libndbclient.la \
$(top_builddir)/dbug/libdbug.a \
$(top_builddir)/mysys/libmysys.a \
$(top_builddir)/strings/libmystrings.a @NDB_SCI_LIBS@
include $(top_srcdir)/ndb/config/common.mk.am
INCLUDES += -I.. -I$(top_srcdir)/include -I$(top_srcdir)/ndb/include -I$(top_srcdir)/ndb/src/ndbapi -I$(top_srcdir)/ndb/include/ndbapi -I$(top_srcdir)/ndb/include/util -I$(top_srcdir)/ndb/include/portlib -I$(top_srcdir)/ndb/include/kernel
ndb_restore_LDFLAGS = @ndb_bin_am_ldflags@
...@@ -1934,17 +1934,27 @@ void Qmgr::execAPI_REGREQ(Signal* signal) ...@@ -1934,17 +1934,27 @@ void Qmgr::execAPI_REGREQ(Signal* signal)
switch(getNodeInfo(apiNodePtr.i).getType()){ switch(getNodeInfo(apiNodePtr.i).getType()){
case NodeInfo::API: case NodeInfo::API:
compatability_check = ndbCompatible_ndb_api(NDB_VERSION, version); compatability_check = ndbCompatible_ndb_api(NDB_VERSION, version);
if (!compatability_check)
infoEvent("Connection attempt from api or mysqld id=%d with %s "
"incompatible with %s", apiNodePtr.i,
getVersionString(version,""), NDB_VERSION_STRING);
break; break;
case NodeInfo::MGM: case NodeInfo::MGM:
compatability_check = ndbCompatible_ndb_mgmt(NDB_VERSION, version); compatability_check = ndbCompatible_ndb_mgmt(NDB_VERSION, version);
if (!compatability_check)
infoEvent("Connection attempt from management server id=%d with %s "
"incompatible with %s", apiNodePtr.i,
getVersionString(version,""), NDB_VERSION_STRING);
break; break;
case NodeInfo::REP: case NodeInfo::REP:
compatability_check = ndbCompatible_ndb_api(NDB_VERSION, version); // compatability_check = ndbCompatible_ndb_api(NDB_VERSION, version);
break; // break;
case NodeInfo::DB: case NodeInfo::DB:
case NodeInfo::INVALID: case NodeInfo::INVALID:
default: default:
sendApiRegRef(signal, ref, ApiRegRef::WrongType); sendApiRegRef(signal, ref, ApiRegRef::WrongType);
infoEvent("Invalid connection attempt with type %d",
getNodeInfo(apiNodePtr.i).getType());
return; return;
} }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "LocalConfig.hpp" #include <LocalConfig.hpp>
#include <NdbEnv.h> #include <NdbEnv.h>
#include <NdbConfig.h> #include <NdbConfig.h>
#include <NdbAutoPtr.hpp> #include <NdbAutoPtr.hpp>
...@@ -164,7 +164,9 @@ LocalConfig::parseNodeId(const char * buf){ ...@@ -164,7 +164,9 @@ LocalConfig::parseNodeId(const char * buf){
bool bool
LocalConfig::parseHostName(const char * buf){ LocalConfig::parseHostName(const char * buf){
char tempString[1024]; char tempString[1024];
char tempString2[1024];
int port; int port;
do {
for(int i = 0; hostNameTokens[i] != 0; i++) { for(int i = 0; hostNameTokens[i] != 0; i++) {
if (sscanf(buf, hostNameTokens[i], tempString, &port) == 2) { if (sscanf(buf, hostNameTokens[i], tempString, &port) == 2) {
MgmtSrvrId mgmtSrvrId; MgmtSrvrId mgmtSrvrId;
...@@ -175,6 +177,12 @@ LocalConfig::parseHostName(const char * buf){ ...@@ -175,6 +177,12 @@ LocalConfig::parseHostName(const char * buf){
return true; return true;
} }
} }
if (buf == tempString2)
break;
// try to add default port to see if it works
snprintf(tempString2, sizeof(tempString2),"%s:%s", buf, NDB_PORT);
buf= tempString2;
} while(1);
return false; return false;
} }
......
noinst_LTLIBRARIES = libmgmapi.la noinst_LTLIBRARIES = libmgmapi.la
libmgmapi_la_SOURCES = mgmapi.cpp mgmapi_configuration.cpp libmgmapi_la_SOURCES = mgmapi.cpp mgmapi_configuration.cpp LocalConfig.cpp
INCLUDES_LOC = -I$(top_srcdir)/ndb/include/mgmapi -I$(top_srcdir)/ndb/src/common/mgmcommon INCLUDES_LOC = -I$(top_srcdir)/ndb/include/mgmapi
DEFS_LOC = -DNO_DEBUG_MESSAGES
DEFS_LOC = -DNO_DEBUG_MESSAGES -DNDB_PORT="\"@ndb_port@\""
include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_util.mk.am include $(top_srcdir)/ndb/config/type_util.mk.am
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <ndb_global.h> #include <ndb_global.h>
#include <my_sys.h> #include <my_sys.h>
#include <LocalConfig.hpp>
#include <NdbAutoPtr.hpp> #include <NdbAutoPtr.hpp>
#include <NdbTCP.h> #include <NdbTCP.h>
...@@ -94,6 +95,8 @@ struct ndb_mgm_handle { ...@@ -94,6 +95,8 @@ struct ndb_mgm_handle {
NDB_SOCKET_TYPE socket; NDB_SOCKET_TYPE socket;
char cfg_ptr[sizeof(LocalConfig)];
#ifdef MGMAPI_LOG #ifdef MGMAPI_LOG
FILE* logfile; FILE* logfile;
#endif #endif
...@@ -146,10 +149,12 @@ ndb_mgm_create_handle() ...@@ -146,10 +149,12 @@ ndb_mgm_create_handle()
h->last_error = 0; h->last_error = 0;
h->last_error_line = 0; h->last_error_line = 0;
h->hostname = 0; h->hostname = 0;
h->socket = -1; h->socket = NDB_INVALID_SOCKET;
h->read_timeout = 50000; h->read_timeout = 50000;
h->write_timeout = 100; h->write_timeout = 100;
new (h->cfg_ptr) LocalConfig;
strncpy(h->last_error_desc, "No error", NDB_MGM_MAX_ERR_DESC_SIZE); strncpy(h->last_error_desc, "No error", NDB_MGM_MAX_ERR_DESC_SIZE);
#ifdef MGMAPI_LOG #ifdef MGMAPI_LOG
h->logfile = 0; h->logfile = 0;
...@@ -177,6 +182,7 @@ ndb_mgm_destroy_handle(NdbMgmHandle * handle) ...@@ -177,6 +182,7 @@ ndb_mgm_destroy_handle(NdbMgmHandle * handle)
(* handle)->logfile = 0; (* handle)->logfile = 0;
} }
#endif #endif
((LocalConfig*)((*handle)->cfg_ptr))->~LocalConfig();
my_free((char*)* handle,MYF(MY_ALLOW_ZERO_PTR)); my_free((char*)* handle,MYF(MY_ALLOW_ZERO_PTR));
* handle = 0; * handle = 0;
} }
...@@ -220,42 +226,6 @@ ndb_mgm_get_latest_error_msg(const NdbMgmHandle h) ...@@ -220,42 +226,6 @@ ndb_mgm_get_latest_error_msg(const NdbMgmHandle h)
return "Error"; // Unknown Error message return "Error"; // Unknown Error message
} }
static
int
parse_connect_string(const char * connect_string,
NdbMgmHandle handle)
{
if(connect_string == 0){
SET_ERROR(handle, NDB_MGM_ILLEGAL_CONNECT_STRING, "");
return -1;
}
char * line = my_strdup(connect_string,MYF(MY_WME));
My_auto_ptr<char> ap1(line);
if(line == 0){
SET_ERROR(handle, NDB_MGM_OUT_OF_MEMORY, "");
return -1;
}
char * tmp = strchr(line, ':');
if(tmp == 0){
SET_ERROR(handle, NDB_MGM_OUT_OF_MEMORY, "");
return -1;
}
* tmp = 0; tmp++;
int port = 0;
if(sscanf(tmp, "%d", &port) != 1){
SET_ERROR(handle, NDB_MGM_ILLEGAL_PORT_NUMBER, "");
return -1;
}
my_free(handle->hostname,MYF(MY_ALLOW_ZERO_PTR));
handle->hostname = my_strdup(line,MYF(MY_WME));
handle->port = port;
return 0;
}
/* /*
* Call an operation, and return the reply * Call an operation, and return the reply
*/ */
...@@ -349,11 +319,6 @@ ndb_mgm_connect(NdbMgmHandle handle, const char * mgmsrv) ...@@ -349,11 +319,6 @@ ndb_mgm_connect(NdbMgmHandle handle, const char * mgmsrv)
SET_ERROR(handle, NDB_MGM_NO_ERROR, "Executing: ndb_mgm_connect"); SET_ERROR(handle, NDB_MGM_NO_ERROR, "Executing: ndb_mgm_connect");
CHECK_HANDLE(handle, -1); CHECK_HANDLE(handle, -1);
if(parse_connect_string(mgmsrv, handle) != 0) {
SET_ERROR(handle, NDB_MGM_ILLEGAL_CONNECT_STRING, "");
return -1;
}
#ifdef MGMAPI_LOG #ifdef MGMAPI_LOG
/** /**
* Open the log file * Open the log file
...@@ -366,14 +331,37 @@ ndb_mgm_connect(NdbMgmHandle handle, const char * mgmsrv) ...@@ -366,14 +331,37 @@ ndb_mgm_connect(NdbMgmHandle handle, const char * mgmsrv)
/** /**
* Do connect * Do connect
*/ */
SocketClient s(handle->hostname, handle->port); LocalConfig *cfg= (LocalConfig*)(handle->cfg_ptr);
const NDB_SOCKET_TYPE sockfd = s.connect(); new (cfg) LocalConfig;
if (sockfd < 0) { if (!cfg->init(mgmsrv, 0) ||
cfg->ids.size() == 0)
{
SET_ERROR(handle, NDB_MGM_ILLEGAL_CONNECT_STRING, "");
return -1;
}
NDB_SOCKET_TYPE sockfd= NDB_INVALID_SOCKET;
Uint32 i;
for (i = 0; i < cfg->ids.size(); i++)
{
if (cfg->ids[i].type != MgmId_TCP)
continue;
SocketClient s(cfg->ids[i].name.c_str(), cfg->ids[i].port);
sockfd = s.connect();
if (sockfd != NDB_INVALID_SOCKET)
break;
}
if (sockfd == NDB_INVALID_SOCKET)
{
setError(handle, NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET, __LINE__, setError(handle, NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET, __LINE__,
"Unable to connect to %s", mgmsrv); "Unable to connect using connectstring %s", mgmsrv);
return -1; return -1;
} }
my_free(handle->hostname,MYF(MY_ALLOW_ZERO_PTR));
handle->hostname = my_strdup(cfg->ids[i].name.c_str(),MYF(MY_WME));
handle->port = cfg->ids[i].port;
handle->socket = sockfd; handle->socket = sockfd;
handle->connected = 1; handle->connected = 1;
...@@ -392,7 +380,7 @@ ndb_mgm_disconnect(NdbMgmHandle handle) ...@@ -392,7 +380,7 @@ ndb_mgm_disconnect(NdbMgmHandle handle)
CHECK_CONNECTED(handle, -1); CHECK_CONNECTED(handle, -1);
NDB_CLOSE_SOCKET(handle->socket); NDB_CLOSE_SOCKET(handle->socket);
handle->socket = -1; handle->socket = NDB_INVALID_SOCKET;
handle->connected = 0; handle->connected = 0;
return 0; return 0;
......
...@@ -384,8 +384,10 @@ CommandInterpreter::CommandInterpreter(const char *_host) ...@@ -384,8 +384,10 @@ CommandInterpreter::CommandInterpreter(const char *_host)
connected = false; connected = false;
try_reconnect = 0; try_reconnect = 0;
if (_host)
host = my_strdup(_host,MYF(MY_WME)); host= my_strdup(_host,MYF(MY_WME));
else
host= 0;
#ifdef HAVE_GLOBAL_REPLICATION #ifdef HAVE_GLOBAL_REPLICATION
rep_host = NULL; rep_host = NULL;
m_repserver = NULL; m_repserver = NULL;
...@@ -400,7 +402,7 @@ CommandInterpreter::~CommandInterpreter() ...@@ -400,7 +402,7 @@ CommandInterpreter::~CommandInterpreter()
{ {
connected = false; connected = false;
ndb_mgm_destroy_handle(&m_mgmsrv); ndb_mgm_destroy_handle(&m_mgmsrv);
my_free((char *)host,MYF(0)); my_free((char *)host,MYF(MY_ALLOW_ZERO_PTR));
host = NULL; host = NULL;
} }
......
...@@ -3,17 +3,24 @@ noinst_LTLIBRARIES = libndbmgmclient.la ...@@ -3,17 +3,24 @@ noinst_LTLIBRARIES = libndbmgmclient.la
ndbtools_PROGRAMS = ndb_mgm ndbtools_PROGRAMS = ndb_mgm
libndbmgmclient_la_SOURCES = CommandInterpreter.cpp libndbmgmclient_la_SOURCES = CommandInterpreter.cpp
libndbmgmclient_la_LIBADD = ../mgmapi/libmgmapi.la \
../common/logger/liblogger.la \
../common/portlib/libportlib.la \
../common/util/libgeneral.la \
../common/portlib/libportlib.la
ndb_mgm_SOURCES = main.cpp ndb_mgm_SOURCES = main.cpp
include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_ndbapi.mk.am include $(top_srcdir)/ndb/config/type_ndbapi.mk.am
INCLUDES += -I$(top_srcdir)/ndb/include/mgmapi -I$(top_srcdir)/ndb/src/common/mgmcommon INCLUDES += -I$(top_srcdir)/ndb/include/mgmapi \
-I$(top_srcdir)/ndb/src/common/mgmcommon
LDADD_LOC = $(noinst_LTLIBRARIES) \ LDADD_LOC = $(noinst_LTLIBRARIES) \
../common/portlib/libportlib.la \
@readline_link@ \ @readline_link@ \
$(top_builddir)/ndb/src/libndbclient.la \
$(top_builddir)/dbug/libdbug.a \ $(top_builddir)/dbug/libdbug.a \
$(top_builddir)/mysys/libmysys.a \ $(top_builddir)/mysys/libmysys.a \
$(top_builddir)/strings/libmystrings.a \ $(top_builddir)/strings/libmystrings.a \
......
...@@ -145,33 +145,21 @@ int main(int argc, char** argv){ ...@@ -145,33 +145,21 @@ int main(int argc, char** argv){
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
exit(ho_error); exit(ho_error);
LocalConfig cfg;
if(argc >= 1) {
_host = argv[0];
if(argc >= 2) {
_port = atoi(argv[1]);
}
} else {
if(cfg.init(opt_connect_str, 0) && cfg.ids.size() > 0 && cfg.ids[0].type == MgmId_TCP){
_host = cfg.ids[0].name.c_str();
_port = cfg.ids[0].port;
} else {
cfg.printError();
cfg.printUsage();
return 1;
}
}
char buf[MAXHOSTNAMELEN+10]; char buf[MAXHOSTNAMELEN+10];
BaseString::snprintf(buf, sizeof(buf), "%s:%d", _host, _port); if(argc == 1) {
BaseString::snprintf(buf, sizeof(buf), "%s", argv[0]);
opt_connect_str= buf;
} else if (argc >= 2) {
BaseString::snprintf(buf, sizeof(buf), "%s:%s", argv[0], argv[1]);
opt_connect_str= buf;
}
ndbout << "-- NDB Cluster -- Management Client --" << endl; ndbout << "-- NDB Cluster -- Management Client --" << endl;
printf("Connecting to Management Server: %s\n", buf); printf("Connecting to Management Server: %s\n", opt_connect_str ? opt_connect_str : "default");
signal(SIGPIPE, handler); signal(SIGPIPE, handler);
com = new Ndb_mgmclient(buf); com = new Ndb_mgmclient(opt_connect_str);
while(read_and_execute(_try_reconnect)); while(read_and_execute(_try_reconnect));
delete com; delete com;
......
...@@ -8,9 +8,12 @@ ndbtools_PROGRAMS = \ ...@@ -8,9 +8,12 @@ ndbtools_PROGRAMS = \
ndb_drop_index \ ndb_drop_index \
ndb_show_tables \ ndb_show_tables \
ndb_select_all \ ndb_select_all \
ndb_select_count ndb_select_count \
ndb_restore
tools_common_sources = ../test/src/NDBT_ReturnCodes.cpp ../test/src/NDBT_Table.cpp ../test/src/NDBT_Output.cpp tools_common_sources = ../test/src/NDBT_ReturnCodes.cpp \
../test/src/NDBT_Table.cpp \
../test/src/NDBT_Output.cpp
ndb_test_platform_SOURCES = ndb_test_platform.cpp ndb_test_platform_SOURCES = ndb_test_platform.cpp
ndb_waiter_SOURCES = waiter.cpp $(tools_common_sources) ndb_waiter_SOURCES = waiter.cpp $(tools_common_sources)
...@@ -19,8 +22,15 @@ ndb_desc_SOURCES = desc.cpp $(tools_common_sources) ...@@ -19,8 +22,15 @@ ndb_desc_SOURCES = desc.cpp $(tools_common_sources)
ndb_drop_index_SOURCES = drop_index.cpp $(tools_common_sources) ndb_drop_index_SOURCES = drop_index.cpp $(tools_common_sources)
ndb_drop_table_SOURCES = drop_tab.cpp $(tools_common_sources) ndb_drop_table_SOURCES = drop_tab.cpp $(tools_common_sources)
ndb_show_tables_SOURCES = listTables.cpp $(tools_common_sources) ndb_show_tables_SOURCES = listTables.cpp $(tools_common_sources)
ndb_select_all_SOURCES = select_all.cpp ../test/src/NDBT_ResultRow.cpp $(tools_common_sources) ndb_select_all_SOURCES = select_all.cpp \
../test/src/NDBT_ResultRow.cpp \
$(tools_common_sources)
ndb_select_count_SOURCES = select_count.cpp $(tools_common_sources) ndb_select_count_SOURCES = select_count.cpp $(tools_common_sources)
ndb_restore_SOURCES = restore/main.cpp \
restore/consumer.cpp \
restore/consumer_restore.cpp \
restore/consumer_printer.cpp \
restore/Restore.cpp
include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_ndbapitools.mk.am include $(top_srcdir)/ndb/config/type_ndbapitools.mk.am
...@@ -34,6 +44,7 @@ ndb_drop_index_LDFLAGS = @ndb_bin_am_ldflags@ ...@@ -34,6 +44,7 @@ ndb_drop_index_LDFLAGS = @ndb_bin_am_ldflags@
ndb_show_tables_LDFLAGS = @ndb_bin_am_ldflags@ ndb_show_tables_LDFLAGS = @ndb_bin_am_ldflags@
ndb_select_all_LDFLAGS = @ndb_bin_am_ldflags@ ndb_select_all_LDFLAGS = @ndb_bin_am_ldflags@
ndb_select_count_LDFLAGS = @ndb_bin_am_ldflags@ ndb_select_count_LDFLAGS = @ndb_bin_am_ldflags@
ndb_restore_LDFLAGS = @ndb_bin_am_ldflags@
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "Restore.hpp" #include "Restore.hpp"
#include "BackupFormat.hpp"
#include <NdbTCP.h> #include <NdbTCP.h>
#include <OutputStream.hpp> #include <OutputStream.hpp>
#include <Bitmask.hpp> #include <Bitmask.hpp>
...@@ -25,9 +24,6 @@ ...@@ -25,9 +24,6 @@
#include <SimpleProperties.hpp> #include <SimpleProperties.hpp>
#include <signaldata/DictTabInfo.hpp> #include <signaldata/DictTabInfo.hpp>
// from src/ndbapi
#include <NdbDictionaryImpl.hpp>
Uint16 Twiddle16(Uint16 in); // Byte shift 16-bit data Uint16 Twiddle16(Uint16 in); // Byte shift 16-bit data
Uint32 Twiddle32(Uint32 in); // Byte shift 32-bit data Uint32 Twiddle32(Uint32 in); // Byte shift 32-bit data
Uint64 Twiddle64(Uint64 in); // Byte shift 64-bit data Uint64 Twiddle64(Uint64 in); // Byte shift 64-bit data
......
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
#include <ndb_global.h> #include <ndb_global.h>
#include <NdbOut.hpp> #include <NdbOut.hpp>
#include <BackupFormat.hpp> #include "../src/kernel/blocks/backup/BackupFormat.hpp"
#include "../src/ndbapi/NdbDictionaryImpl.hpp"
#include <NdbApi.hpp> #include <NdbApi.hpp>
#include <ndb_version.h> #include <ndb_version.h>
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "consumer_restore.hpp" #include "consumer_restore.hpp"
#include <NdbSleep.h> #include <NdbSleep.h>
#include <NdbDictionaryImpl.hpp>
extern FilteredNdbOut err; extern FilteredNdbOut err;
extern FilteredNdbOut info; extern FilteredNdbOut info;
......
...@@ -23,12 +23,13 @@ ...@@ -23,12 +23,13 @@
#include <NdbOut.hpp> #include <NdbOut.hpp>
#include <NdbSleep.h> #include <NdbSleep.h>
#include <kernel/ndb_limits.h> #include <kernel/ndb_limits.h>
#include "../include/mgmcommon/LocalConfig.hpp" #include <LocalConfig.hpp>
#include <NDBT.hpp> #include <NDBT.hpp>
int int
waitClusterStatus(const char* _addr, ndb_mgm_node_status _status, unsigned int _timeout); waitClusterStatus(const char* _addr, ndb_mgm_node_status _status,
unsigned int _timeout);
static const char* opt_connect_str= 0; static const char* opt_connect_str= 0;
static int _no_contact = 0; static int _no_contact = 0;
......
...@@ -2384,16 +2384,22 @@ void Load_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_ev ...@@ -2384,16 +2384,22 @@ void Load_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_ev
/* /*
Load_log_event::set_fields() Load_log_event::set_fields()
Note that this function can not use the member variable
for the database, since LOAD DATA INFILE on the slave
can be for a different database than the current one.
This is the reason for the affected_db argument to this method.
*/ */
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
void Load_log_event::set_fields(List<Item> &field_list) void Load_log_event::set_fields(const char* affected_db,
List<Item> &field_list)
{ {
uint i; uint i;
const char* field = fields; const char* field = fields;
for (i= 0; i < num_fields; i++) for (i= 0; i < num_fields; i++)
{ {
field_list.push_back(new Item_field(db, table_name, field)); field_list.push_back(new Item_field(affected_db, table_name, field));
field+= field_lens[i] + 1; field+= field_lens[i] + 1;
} }
} }
...@@ -2546,7 +2552,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, ...@@ -2546,7 +2552,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
ex.skip_lines = skip_lines; ex.skip_lines = skip_lines;
List<Item> field_list; List<Item> field_list;
set_fields(field_list); set_fields(thd->db,field_list);
thd->variables.pseudo_thread_id= thread_id; thd->variables.pseudo_thread_id= thread_id;
if (net) if (net)
{ {
...@@ -2563,9 +2569,9 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, ...@@ -2563,9 +2569,9 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
if (thd->cuted_fields) if (thd->cuted_fields)
{ {
/* log_pos is the position of the LOAD event in the master log */ /* log_pos is the position of the LOAD event in the master log */
sql_print_error("\ sql_print_warning("Slave: load data infile on table '%s' at "
Slave: load data infile on table '%s' at log position %s in log \ "log position %s in log '%s' produced %ld "
'%s' produced %ld warning(s). Default database: '%s'", "warning(s). Default database: '%s'",
(char*) table_name, (char*) table_name,
llstr(log_pos,llbuff), RPL_LOG_NAME, llstr(log_pos,llbuff), RPL_LOG_NAME,
(ulong) thd->cuted_fields, (ulong) thd->cuted_fields,
......
...@@ -771,7 +771,7 @@ public: ...@@ -771,7 +771,7 @@ public:
const char* table_name_arg, const char* table_name_arg,
List<Item>& fields_arg, enum enum_duplicates handle_dup, List<Item>& fields_arg, enum enum_duplicates handle_dup,
bool using_trans); bool using_trans);
void set_fields(List<Item> &fields_arg); void set_fields(const char* db, List<Item> &fields_arg);
const char* get_db() { return db; } const char* get_db() { return db; }
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
void pack_info(Protocol* protocol); void pack_info(Protocol* protocol);
......
...@@ -562,17 +562,13 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), ...@@ -562,17 +562,13 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
const uchar *b0, uint b_length) const uchar *b0, uint b_length)
{ {
uchar buf[80] ; uchar buf[80] ;
uchar *end, *a, *b; uchar *end, *a, *b, *alloced= NULL;
uint length; uint length;
int res= 0; int res= 0;
int alloced= 0;
a= buf; a= buf;
if ((a_length + b_length +2) > (int) sizeof(buf)) if ((a_length + b_length +2) > (int) sizeof(buf))
{ alloced= a= (uchar*) malloc(a_length+b_length);
a= (uchar*) malloc(a_length+b_length);
alloced= 1;
}
b= a + a_length+1; b= a + a_length+1;
memcpy((char*) a, (char*) a0, a_length); memcpy((char*) a, (char*) a0, a_length);
...@@ -618,7 +614,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), ...@@ -618,7 +614,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
ret: ret:
if (alloced) if (alloced)
free(a); free(alloced);
return res; return res;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment