> diff -Nrup a/client/CMakeLists.txt b/client/CMakeLists.txt
> --- a/client/CMakeLists.txt 2007-06-16 00:17:17 -04:00
> +++ b/client/CMakeLists.txt 2007-07-27 11:50:30 -04:00
> @@ -104,40 +104,43 @@ ADD_LIBRARY(mysqlclient ../mysys/array.c
<cut>
> +IF(NOT EMBEDDED_ONLY)
> + 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 zlib dbug wsock32)
> +
> + ADD_EXECUTABLE(mysqltest mysqltest.c)
> + TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys zlib dbug regex wsock32)
> +
While you're here, you might create a CLIENT_LIBS variable, and put
mysqlclient zlib dbug wsock32 in it; then reference that in each
TARGET_LINK_LIBRARIES directive.
<cut>
> diff -Nrup a/client/client_priv.h b/client/client_priv.h
> --- a/client/client_priv.h 2007-04-18 22:47:49 -04:00
> +++ b/client/client_priv.h 2007-07-27 11:50:30 -04:00
> @@ -48,7 +48,7 @@ enum options_client
> OPT_PROMPT, OPT_IGN_LINES,OPT_TRANSACTION,OPT_MYSQL_PROTOCOL,
> OPT_SHARED_MEMORY_BASE_NAME, OPT_FRM, OPT_SKIP_OPTIMIZATION,
> OPT_COMPATIBLE, OPT_RECONNECT, OPT_DELIMITER, OPT_SECURE_AUTH,
> - OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_CREATE_OPTIONS,
> + OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_CREATE_OPTIONS, OPT_SERVER_ARG,
> OPT_START_POSITION, OPT_STOP_POSITION, OPT_START_DATETIME, OPT_STOP_DATETIME,
> OPT_SIGINT_IGNORE, OPT_HEXBLOB, OPT_ORDER_BY_PRIMARY, OPT_COUNT,
> #ifdef HAVE_NDBCLUSTER_DB
> diff -Nrup a/client/mysql.cc b/client/mysql.cc
> --- a/client/mysql.cc 2007-05-23 18:39:16 -04:00
> +++ b/client/mysql.cc 2007-07-27 11:50:30 -04:00
> @@ -51,6 +51,9 @@ const char *VER= "14.13";
> /* Buffer to hold 'version' and 'version_comment' */
> #define MAX_SERVER_VERSION_LENGTH 128
>
> +/* Array of options to pass to libemysqld */
Typeo
> +#define MAX_SERVER_ARGS 64
I'm OK with this, but I'd probably use a dynamic_array for this kind of
thing.
> +
> void* sql_alloc(unsigned size); // Don't use mysqld alloc for these
> void sql_element_free(void *ptr);
> #include "sql_string.h"
> @@ -302,7 +305,10 @@ static COMMANDS commands[] = {
> };
>
> static const char *load_default_groups[]= { "mysql","client",0 };
> -static const char *server_default_groups[]=
> +
> +static int embedded_server_arg_count= 0;
> +static char *embedded_server_args[MAX_SERVER_ARGS];
> +static const char *embedded_server_groups[]=
> { "server", "embedded", "mysql_SERVER", 0 };
>
> #ifdef HAVE_READLINE
> @@ -347,15 +353,6 @@ static sig_handler handle_sigint(int sig
> int main(int argc,char *argv[])
> {
> char buff[80];
> - char *defaults, *extra_defaults, *group_suffix;
> - char *emb_argv[4];
> - int emb_argc;
> -
> - /* Get --defaults-xxx args for mysql_server_init() */
> - emb_argc= get_defaults_options(argc, argv, &defaults, &extra_defaults,
> - &group_suffix)+1;
> - memcpy((char*) emb_argv, (char*) argv, emb_argc * sizeof(*argv));
> - emb_argv[emb_argc]= 0;
>
> MY_INIT(argv[0]);
> DBUG_ENTER("main");
> @@ -416,7 +413,8 @@ int main(int argc,char *argv[])
> my_end(0);
> exit(1);
> }
> - if (mysql_server_init(emb_argc, emb_argv, (char**) server_default_groups))
> + if (mysql_server_init(embedded_server_arg_count, embedded_server_args,
> + (char**) embedded_server_groups))
> {
> free_defaults(defaults_argv);
> my_end(0);
> @@ -539,6 +537,8 @@ sig_handler mysql_end(int sig)
> my_free(shared_memory_base_name,MYF(MY_ALLOW_ZERO_PTR));
> #endif
> my_free(current_prompt,MYF(MY_ALLOW_ZERO_PTR));
> + while (embedded_server_arg_count > 1)
> + my_free(embedded_server_args[--embedded_server_arg_count],MYF(0));
> mysql_server_end();
> free_defaults(defaults_argv);
> my_end(info_flag ? MY_CHECK_ERROR : 0);
> @@ -761,6 +761,8 @@ static struct my_option my_long_options[
> {"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it"
> " uses old (pre-4.1.1) protocol", (uchar**) &opt_secure_auth,
> (uchar**) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
> + {"server-arg", OPT_SERVER_ARG, "Send embedded server this as a parameter.",
> + 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
> {"show-warnings", OPT_SHOW_WARNINGS, "Show warnings after every statement.",
> (uchar**) &show_warnings, (uchar**) &show_warnings, 0, GET_BOOL, NO_ARG,
>
> 0, 0, 0, 0, 0, 0},
> @@ -888,7 +890,29 @@ get_one_option(int optid, const struct m
> opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
> opt->name);
> break;
> - break;
> + case OPT_SERVER_ARG:
> +#ifdef EMBEDDED_LIBRARY
> + /*
> + When the embedded server is being tested, the client needs to be
> + able to pass command-line arguments to the embedded server so it can
> + locate the language files and data directory.
> + */
> + if (!embedded_server_arg_count)
> + {
> + embedded_server_arg_count= 1;
> + embedded_server_args[0]= (char*) "";
> + }
> + if (embedded_server_arg_count == MAX_SERVER_ARGS-1 ||
> + !(embedded_server_args[embedded_server_arg_count++]=
> + my_strdup(argument, MYF(MY_FAE))))
> + {
> + put_info("Can't use server argument", INFO_ERROR);
> + return 0;
This should be "return 1". So should the return in the OPT_DELIMITER
case. The caller (handle_options()) never checks the return value,
which is another issue.
> + }
> +#else /*EMBEDDED_LIBRARY */
> + printf("WARNING: --server-arg option not supported in this configuration.\n");
> +#endif
> + break;
> case 'A':
> opt_rehash= 0;
> break;
> diff -Nrup a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
> --- a/libmysqld/CMakeLists.txt 2007-06-15 14:31:55 -04:00
> +++ b/libmysqld/CMakeLists.txt 2007-07-27 11:50:31 -04:00
> @@ -25,16 +25,20 @@ ADD_DEFINITIONS(-DUSE_TLS -DMYSQL_SERVER
> ADD_DEFINITIONS(-DUSING_CMAKE)
>
> INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
> - ${CMAKE_SOURCE_DIR}/libmysqld
> - ${CMAKE_SOURCE_DIR}/libmysql
> + ${CMAKE_SOURCE_DIR}/libmysqld
> + ${CMAKE_SOURCE_DIR}/libmysql
> ${CMAKE_SOURCE_DIR}/sql
> ${CMAKE_SOURCE_DIR}/regex
> ${CMAKE_SOURCE_DIR}/extra/yassl/include
> ${CMAKE_SOURCE_DIR}/zlib
> )
>
> -SET_SOURCE_FILES_PROPERTIES(${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
> - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h
> +SET_SOURCE_FILES_PROPERTIES(sql_yacc.cc
> + sql_yacc.h
> + message.h
> + message.rc
> + ${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc
> + lex_hash.h
> PROPERTIES GENERATED 1)
I think this is part of bug #30103, "CMake build solution does not
remove auto-generated resources". Maybe it doesn't need to be done
here?
> ADD_LIBRARY(mysqldemb emb_qcache.cc libmysqld.c lib_sql.cc
> @@ -80,10 +84,54 @@ ADD_LIBRARY(mysqldemb emb_qcache.cc libm
> ../sql/scheduler.cc
> ../vio/vio.c ../vio/viosocket.c ../vio/viossl.c
> ../vio/viosslfactories.c
> - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
> - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h)
> + sql_yacc.cc
> + sql_yacc.h
> + message.h
> + message.rc
> + lex_hash.h)
> ADD_DEPENDENCIES(mysqldemb GenError)
Ditto.
>
> +# Sql Parser custom command
<cut>
> diff -Nrup a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
> --- a/mysql-test/mysql-test-run.pl 2007-06-29 08:18:18 -04:00
> +++ b/mysql-test/mysql-test-run.pl 2007-07-27 11:50:31 -04:00
> @@ -692,6 +692,37 @@ sub command_line_setup () {
>
> $glob_timers= mtr_init_timers();
>
> + # --------------------------------------------------------------------------
> + # Embedded server flag
> + # --------------------------------------------------------------------------
> + if ( $opt_embedded_server )
> + {
<cut>
> + }
> +
OK
> #
> # Find the mysqld executable to be able to find the mysqld version
> # number as early as possible
<cut>
Looks good overall to me.
Regards,
Timothy
--
-- Timothy Smith Team Lead, Maintenance; Dolores, Colorado, USA
-- MySQL Inc., www.mysql.com The best DATABASE COMPANY in the GALAXY!