summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/Makefile.am1
-rw-r--r--client/cmakelists.txt80
-rw-r--r--client/mysql.cc11
-rw-r--r--client/mysqlslap.c11
-rw-r--r--client/mysqltest.c43
5 files changed, 134 insertions, 12 deletions
diff --git a/client/Makefile.am b/client/Makefile.am
index 634f64be6ca..66f0ce9ad6d 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -80,6 +80,7 @@ strings_src=decimal.c
DEFS = -DUNDEF_THREADS_HACK \
-DDEFAULT_MYSQL_HOME="\"$(prefix)\"" \
-DDATADIR="\"$(localstatedir)\""
+EXTRA_DIST = get_password.c cmakelists.txt
link_sources:
for f in $(sql_src) ; do \
diff --git a/client/cmakelists.txt b/client/cmakelists.txt
new file mode 100644
index 00000000000..26cc36c7f6f
--- /dev/null
+++ b/client/cmakelists.txt
@@ -0,0 +1,80 @@
+SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
+SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
+
+# The old Windows build method used renamed (.cc -> .cpp) source files, fails
+# in #include in mysqlbinlog.cc. So disable that using the USING_CMAKE define.
+ADD_DEFINITIONS(-DUSING_CMAKE)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/zlib
+ ${CMAKE_SOURCE_DIR}/extra/yassl/include
+ ${CMAKE_SOURCE_DIR}/libmysql
+ ${CMAKE_SOURCE_DIR}/regex
+ ${CMAKE_SOURCE_DIR}/sql
+ ${CMAKE_SOURCE_DIR}/strings)
+
+ADD_LIBRARY(mysqlclient ../mysys/array.c ../strings/bchange.c ../strings/bmove.c
+ ../strings/bmove_upp.c ../mysys/charset-def.c ../mysys/charset.c
+ ../sql-common/client.c ../strings/ctype-big5.c ../strings/ctype-bin.c
+ ../strings/ctype-cp932.c ../strings/ctype-czech.c ../strings/ctype-euc_kr.c
+ ../strings/ctype-eucjpms.c ../strings/ctype-extra.c ../strings/ctype-gb2312.c
+ ../strings/ctype-gbk.c ../strings/ctype-latin1.c ../strings/ctype-mb.c
+ ../strings/ctype-simple.c ../strings/ctype-sjis.c ../strings/ctype-tis620.c
+ ../strings/ctype-uca.c ../strings/ctype-ucs2.c ../strings/ctype-ujis.c
+ ../strings/ctype-utf8.c ../strings/ctype-win1250ch.c ../strings/ctype.c
+ ../mysys/default.c ../libmysql/errmsg.c ../mysys/errors.c
+ ../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c
+ ../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c
+ ../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c
+ ../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c
+ ../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c
+ ../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c
+ ../mysys/mf_wcomp.c ../mysys/mulalloc.c ../mysys/my_access.c ../mysys/my_alloc.c
+ ../mysys/my_chsize.c ../mysys/my_compress.c ../mysys/my_create.c
+ ../mysys/my_delete.c ../mysys/my_div.c ../mysys/my_error.c ../mysys/my_file.c
+ ../mysys/my_fopen.c ../mysys/my_fstream.c ../mysys/my_gethostbyname.c
+ ../mysys/my_getopt.c ../mysys/my_getwd.c ../mysys/my_init.c ../mysys/my_lib.c
+ ../mysys/my_malloc.c ../mysys/my_messnc.c ../mysys/my_net.c ../mysys/my_once.c
+ ../mysys/my_open.c ../mysys/my_pread.c ../mysys/my_pthread.c ../mysys/my_read.c
+ ../mysys/my_realloc.c ../mysys/my_rename.c ../mysys/my_seek.c
+ ../mysys/my_static.c ../strings/my_strtoll10.c ../mysys/my_symlink.c
+ ../mysys/my_symlink2.c ../mysys/my_thr_init.c ../sql-common/my_time.c
+ ../strings/my_vsnprintf.c ../mysys/my_wincond.c ../mysys/my_winthread.c
+ ../mysys/my_write.c ../sql/net_serv.cc ../sql-common/pack.c ../sql/password.c
+ ../mysys/safemalloc.c ../mysys/sha1.c ../strings/str2int.c
+ ../strings/str_alloc.c ../strings/strcend.c ../strings/strcont.c ../strings/strend.c
+ ../strings/strfill.c ../mysys/string.c ../strings/strinstr.c ../strings/strmake.c
+ ../strings/strmov.c ../strings/strnlen.c ../strings/strnmov.c ../strings/strtod.c
+ ../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c
+ ../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c
+ ../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c)
+
+ADD_DEPENDENCIES(mysqlclient GenError)
+ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc)
+LINK_DIRECTORIES(${MYSQL_BINARY_DIR}/mysys ${MYSQL_BINARY_DIR}/zlib)
+TARGET_LINK_LIBRARIES(mysql mysqlclient mysys yassl taocrypt zlib dbug wsock32)
+
+ADD_EXECUTABLE(mysqltest mysqltest.c)
+TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys yassl taocrypt zlib dbug regex wsock32)
+
+ADD_EXECUTABLE(mysqlcheck mysqlcheck.c)
+TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c)
+TARGET_LINK_LIBRARIES(mysqldump mysqlclient mysys dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqlimport mysqlimport.c)
+TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqlshow mysqlshow.c)
+TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc ../mysys/mf_tempdir.c ../mysys/my_new.cc
+ ../mysys/my_bit.c ../mysys/my_bitmap.c ../mysys/my_vle.c
+ ../mysys/base64.c)
+TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqladmin mysqladmin.cc)
+TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug yassl taocrypt zlib wsock32)
+
+ADD_EXECUTABLE(mysqlslap mysqlslap.c)
+TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys yassl taocrypt zlib wsock32 dbug)
diff --git a/client/mysql.cc b/client/mysql.cc
index eb6970691bb..2001056dea1 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -653,7 +653,7 @@ static struct my_option my_long_options[] =
"Base name of shared memory.", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
- {"socket", 'S', "Socket file to use for connection.",
+ {"socket", 'S', "Socket file to use for connection. (This will override --port unless --protocol=TCP is specified.)",
(gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR_ALLOC,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#include "sslopt-longopts.h"
@@ -939,7 +939,14 @@ static int get_options(int argc, char **argv)
opt_reconnect= 0;
connect_flag= 0; /* Not in interactive mode */
}
-
+
+ if (opt_mysql_port && (!opt_protocol) && (!opt_mysql_unix_port))
+ {
+ /* Not checking return type since we are using a constant value */
+ /* straight from the initialization of sql_protocol_typelib. */
+ opt_protocol= find_type("TCP", &sql_protocol_typelib, 0);
+ }
+
if (strcmp(default_charset, charset_info->csname) &&
!(charset_info= get_charset_by_csname(default_charset,
MY_CS_PRIMARY, MYF(MY_WME))))
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index e1136bd3a69..904bf432071 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -266,6 +266,7 @@ int main(int argc, char **argv)
my_end(0);
exit(1);
}
+
/* globals? Yes, so we only have to run strlen once */
delimiter_length= strlen(delimiter);
@@ -455,9 +456,10 @@ static struct my_option my_long_options[] =
(gptr*) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0,
0},
{"preserve-schema", OPT_MYSQL_PRESERVE_SCHEMA,
- "Preserve the schema from the mysqlslap run.",
+ "Preserve the schema from the mysqlslap run, this happens unless \
+ --auto-generate-sql or --create are used.",
(gptr*) &opt_preserve, (gptr*) &opt_preserve, 0, GET_BOOL,
- NO_ARG, 0, 0, 0, 0, 0, 0},
+ NO_ARG, TRUE, 0, 0, 0, 0, 0},
{"protocol", OPT_MYSQL_PROTOCOL,
"The protocol of connection (tcp,socket,pipe,memory).",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -750,6 +752,9 @@ get_options(int *argc,char ***argv)
if (!user)
user= (char *)"root";
+ if (create_string || auto_generate_sql )
+ opt_preserve= FALSE;
+
if (auto_generate_sql && (create_string || user_supplied_query))
{
fprintf(stderr,
@@ -1012,7 +1017,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
}
}
#endif
-#ifndef __WIN__
+#if !(defined(__WIN__) || defined(__NETWARE__))
#ifdef HAVE_LIBPTHREAD
else
#endif
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 5bcd086672d..50d814e3f9b 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -209,9 +209,9 @@ struct st_replace_regex
*/
char* buf;
char* even_buf;
- uint even_buf_len;
char* odd_buf;
- uint odd_buf_len;
+ int even_buf_len;
+ int odd_buf_len;
};
struct st_replace_regex *glob_replace_regex= 0;
@@ -408,8 +408,10 @@ const char *command_names[]=
"enable_rpl_parse",
"disable_rpl_parse",
"eval_result",
+ /* Enable/disable that the _query_ is logged to result file */
"enable_query_log",
"disable_query_log",
+ /* Enable/disable that the _result_ from a query is logged to result file */
"enable_result_log",
"disable_result_log",
"server_start",
@@ -461,6 +463,7 @@ static VAR* var_init(VAR* v, const char *name, int name_len, const char *val,
static void var_free(void* v);
void dump_result_to_reject_file(const char *record_file, char *buf, int size);
+void dump_result_to_log_file(const char *record_file, char *buf, int size);
int close_connection(struct st_query*);
static void set_charset(struct st_query*);
@@ -652,6 +655,8 @@ static void die(const char *fmt, ...)
{
va_list args;
DBUG_ENTER("die");
+
+ /* Print the error message */
va_start(args, fmt);
if (fmt)
{
@@ -666,6 +671,12 @@ static void die(const char *fmt, ...)
fflush(stderr);
}
va_end(args);
+
+ /* Dump the result that has been accumulated so far to .log file */
+ if (result_file && ds_res.length)
+ dump_result_to_log_file(result_file, ds_res.str, ds_res.length);
+
+ /* Clean up and exit */
free_used_memory();
my_end(MY_CHECK_ERROR);
@@ -789,8 +800,8 @@ err:
check_result
ds - content to be checked
fname - name of file to check against
- require_option - if set and check fails, the test will be aborted with the special
- exit code "not supported test"
+ require_option - if set and check fails, the test will be aborted
+ with the special exit code "not supported test"
RETURN VALUES
error - the function will not return
@@ -1267,6 +1278,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end)
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL* mysql = &cur_con->mysql;
+ DBUG_ENTER("var_query_set");
LINT_INIT(res);
while (end > query && *end != '`')
@@ -1329,7 +1341,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end)
eval_expr(var, "", 0);
mysql_free_result(res);
- return 0;
+ DBUG_RETURN(0);
}
void var_copy(VAR *dest, VAR *src)
@@ -1506,6 +1518,7 @@ void do_system(struct st_query *command)
}
command->last_argument= command->end;
+ dynstr_free(&ds_cmd);
DBUG_VOID_RETURN;
}
@@ -1546,7 +1559,7 @@ int do_echo(struct st_query *command)
dynstr_append_mem(ds, "\n", 1);
dynstr_free(&ds_echo);
command->last_argument= command->end;
- return 0;
+ return(0);
}
@@ -1649,7 +1662,7 @@ int do_save_master_pos()
if (have_ndbcluster)
{
- ulonglong epoch, tmp_epoch= 0;
+ ulonglong epoch=0, tmp_epoch= 0;
int count= 0;
do
@@ -3490,6 +3503,12 @@ void dump_result_to_reject_file(const char *record_file, char *buf, int size)
str_to_file(fn_format(reject_file, record_file,"",".reject",2), buf, size);
}
+void dump_result_to_log_file(const char *record_file, char *buf, int size)
+{
+ char log_file[FN_REFLEN];
+ str_to_file(fn_format(log_file, record_file,"",".log",2), buf, size);
+}
+
static void check_regerr(my_regex_t* r, int err)
{
char err_buf[1024];
@@ -4288,7 +4307,17 @@ static void handle_error(const char *query, struct st_query *q,
DBUG_ENTER("handle_error");
if (q->require_file)
+ {
+ /*
+ The query after a "--require" failed. This is fine as long the server
+ returned a valid reponse. Don't allow 2013 or 2006 to trigger an
+ abort_not_supported_test
+ */
+ if (err_errno == CR_SERVER_LOST ||
+ err_errno == CR_SERVER_GONE_ERROR)
+ die("require query '%s' failed: %d: %s", query, err_errno, err_error);
abort_not_supported_test();
+ }
if (q->abort_on_error)
die("query '%s' failed: %d: %s", query, err_errno, err_error);