Commit 1315f390 authored by unknown's avatar unknown

SCRUM

client capabilities included into libmysqld
some API methods became "virtual"
lots of duplicated code removed

IMHO all the above made library's code way more pleasant to look at, didn't it?


BitKeeper/deleted/.del-lib_vio.c~d779731a1e391220:
  Delete: libmysqld/lib_vio.c
BitKeeper/etc/ignore:
  Added libmysqld/client.c libmysqld/client_settings.h libmysqld/libmysql.c libmysqld/pack.c to the ignore list
client/mysqltest.c:
  we don't need this now
include/mysql.h:
  MYSQL and related structures unified
  four methods made "virtual"
  relative wrappers added
include/mysql_com.h:
  todo added
include/mysql_embed.h:
  now we include implementations of Vio structure in libmysqld
include/sql_common.h:
  declarations changed
include/violite.h:
  implementation of Vio included in libmysqld
libmysql/client_settings.h:
  changes to make this working with both client and embedded
libmysql/libmysql.c:
  global variables and my_net_local_init moved to sql-common/pack.c
libmysqld/Makefile.am:
  libmysql.c, client.c, pack.c symlinked and added to sources
  lib_vio.c removed
libmysqld/examples/Makefile.am:
  now we need CLIENT_LIBS here
libmysqld/lib_sql.cc:
  code duplications removed
  emb_advanced_command was made from simple_command
libmysqld/libmysqld.c:
  duplicated code removed
sql-common/client.c:
  code trimmed with new model of calling
sql-common/pack.c:
  some code moved here from libmysql.c and protocol.cc
sql/client_settings.h:
  we don't need mysql_use_result for mini_client
sql/net_serv.cc:
  file included in embedded server
sql/protocol.cc:
  code moved to sql-common/pack.c
parent 1741361e
...@@ -622,3 +622,7 @@ vio/test-ssl ...@@ -622,3 +622,7 @@ vio/test-ssl
vio/test-sslclient vio/test-sslclient
vio/test-sslserver vio/test-sslserver
vio/viotest-ssl vio/viotest-ssl
libmysqld/client.c
libmysqld/client_settings.h
libmysqld/libmysql.c
libmysqld/pack.c
...@@ -319,7 +319,7 @@ static uint out_length; ...@@ -319,7 +319,7 @@ static uint out_length;
static int eval_result = 0; static int eval_result = 0;
/* Disable functions that only exist in MySQL 4.0 */ /* Disable functions that only exist in MySQL 4.0 */
#if MYSQL_VERSION_ID < 40000 || defined(EMBEDDED_LIBRARY) #if MYSQL_VERSION_ID < 40000
void mysql_enable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} void mysql_enable_rpl_parse(MYSQL* mysql __attribute__((unused))) {}
void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {}
int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; } int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; }
......
...@@ -201,6 +201,7 @@ enum mysql_rpl_type ...@@ -201,6 +201,7 @@ enum mysql_rpl_type
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
}; };
struct st_mysql_methods;
#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) #if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
...@@ -247,11 +248,13 @@ typedef struct st_mysql ...@@ -247,11 +248,13 @@ typedef struct st_mysql
struct st_mysql* last_used_con; struct st_mysql* last_used_con;
LIST *stmts; /* list of all statements */ LIST *stmts; /* list of all statements */
const struct st_mysql_methods *methods;
#if !defined(CHECK_EMBEDDED_DIFFERENCES) #if !defined(CHECK_EMBEDDED_DIFFERENCES)
struct st_mysql_res *result; struct st_mysql_res *result;
void *thd; void *thd;
unsigned int last_errno; unsigned int last_errno;
char *last_error; char *last_error;
char sqlstate[SQLSTATE_LENGTH+1]; /* Used by embedded server */
#endif #endif
} MYSQL; } MYSQL;
...@@ -378,12 +381,10 @@ MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, ...@@ -378,12 +381,10 @@ MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
unsigned int port, unsigned int port,
const char *unix_socket, const char *unix_socket,
unsigned long clientflag); unsigned long clientflag);
void STDCALL mysql_close(MYSQL *sock);
int STDCALL mysql_select_db(MYSQL *mysql, const char *db); int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
int STDCALL mysql_query(MYSQL *mysql, const char *q); int STDCALL mysql_query(MYSQL *mysql, const char *q);
int STDCALL mysql_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
unsigned long length); unsigned long length);
my_bool STDCALL mysql_read_query_result(MYSQL *mysql);
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
unsigned long length); unsigned long length);
/* perform query on master */ /* perform query on master */
...@@ -444,8 +445,6 @@ MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); ...@@ -444,8 +445,6 @@ MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
const char *wild); const char *wild);
MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
const char *arg); const char *arg);
void STDCALL mysql_free_result(MYSQL_RES *result); void STDCALL mysql_free_result(MYSQL_RES *result);
...@@ -566,6 +565,25 @@ typedef struct st_mysql_stmt ...@@ -566,6 +565,25 @@ typedef struct st_mysql_stmt
} MYSQL_STMT; } MYSQL_STMT;
#define mysql_close(sock) (*(sock)->methods->close)(sock)
#define mysql_read_query_result(mysql) (*(mysql)->methods->read_query_result)(mysql)
#define mysql_store_result(mysql) (*(mysql)->methods->store_result)(mysql)
#define mysql_use_result(mysql) (*(mysql)->methods->use_result)(mysql)
typedef struct st_mysql_methods
{
void STDCALL (*close)(MYSQL *sock);
my_bool STDCALL (*read_query_result)(MYSQL *mysql);
my_bool STDCALL (*advanced_command)(MYSQL *mysql,
enum enum_server_command command,
const char *header,
ulong header_length,
const char *arg,
ulong arg_length, my_bool skip_check);
MYSQL_RES * STDCALL (*store_result)(MYSQL *mysql);
MYSQL_RES * STDCALL (*use_result)(MYSQL *mysql);
} MYSQL_METHODS;
MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query, MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query,
unsigned long length); unsigned long length);
int STDCALL mysql_execute(MYSQL_STMT * stmt); int STDCALL mysql_execute(MYSQL_STMT * stmt);
......
...@@ -232,6 +232,9 @@ void my_net_local_init(NET *net); ...@@ -232,6 +232,9 @@ void my_net_local_init(NET *net);
void net_end(NET *net); void net_end(NET *net);
void net_clear(NET *net); void net_clear(NET *net);
my_bool net_realloc(NET *net, unsigned long length); my_bool net_realloc(NET *net, unsigned long length);
/*HFTODO - should remove it
*/
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
my_bool net_flush(NET *net); my_bool net_flush(NET *net);
#else #else
......
...@@ -19,11 +19,13 @@ ...@@ -19,11 +19,13 @@
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
/* Things we don't need in the embedded version of MySQL */ /* Things we don't need in the embedded version of MySQL */
/*HFTODO
#undef HAVE_VIO - if we don't want client in embedded library
*/
#undef HAVE_PSTACK /* No stacktrace */ #undef HAVE_PSTACK /* No stacktrace */
#undef HAVE_DLOPEN /* No udf functions */ #undef HAVE_DLOPEN /* No udf functions */
#undef HAVE_OPENSSL #undef HAVE_OPENSSL
#undef HAVE_VIO
#undef HAVE_ISAM #undef HAVE_ISAM
#undef HAVE_SMEM /* No shared memory */ #undef HAVE_SMEM /* No shared memory */
......
...@@ -27,9 +27,6 @@ my_ulonglong net_field_length_ll(uchar **packet); ...@@ -27,9 +27,6 @@ my_ulonglong net_field_length_ll(uchar **packet);
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
my_bool default_value, uint server_capabilities); my_bool default_value, uint server_capabilities);
my_bool advanced_command(MYSQL *mysql, enum enum_server_command command,
const char *header, ulong header_length,
const char *arg, ulong arg_length, my_bool skip_check);
void free_rows(MYSQL_DATA *cur); void free_rows(MYSQL_DATA *cur);
MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields, MYSQL_DATA *read_rows (MYSQL *mysql,MYSQL_FIELD *fields,
uint field_count); uint field_count);
...@@ -38,6 +35,8 @@ void fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count); ...@@ -38,6 +35,8 @@ void fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count);
void free_old_query(MYSQL *mysql); void free_old_query(MYSQL *mysql);
void end_server(MYSQL *mysql); void end_server(MYSQL *mysql);
my_bool mysql_reconnect(MYSQL *mysql); my_bool mysql_reconnect(MYSQL *mysql);
void mysql_read_default_options(struct st_mysql_options *options,
const char *filename,const char *group);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -220,7 +220,8 @@ enum SSL_type ...@@ -220,7 +220,8 @@ enum SSL_type
}; };
#ifndef EMBEDDED_LIBRARY /* HFTODO - hide this if we don't want client in embedded server
*/
/* This structure is for every connection on both sides */ /* This structure is for every connection on both sides */
struct st_vio struct st_vio
{ {
...@@ -263,5 +264,4 @@ struct st_vio ...@@ -263,5 +264,4 @@ struct st_vio
#endif /* HAVE_SMEM */ #endif /* HAVE_SMEM */
#endif /* HAVE_VIO */ #endif /* HAVE_VIO */
}; };
#endif /* EMBEDDED_LIBRARY */
#endif /* vio_violite_h_ */ #endif /* vio_violite_h_ */
...@@ -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 */
static my_bool mysql_client_init=0;
extern uint mysql_port; extern uint mysql_port;
extern my_string mysql_unix_port; extern my_string mysql_unix_port;
...@@ -35,7 +34,7 @@ char *shared_memory_base_name=0; ...@@ -35,7 +34,7 @@ char *shared_memory_base_name=0;
const char *def_shared_memory_base_name=default_shared_memory_base_name; const char *def_shared_memory_base_name=default_shared_memory_base_name;
#endif #endif
static my_bool org_my_init_done=0; extern my_bool org_my_init_done;
sig_handler pipe_sig_handler(int sig __attribute__((unused))); sig_handler pipe_sig_handler(int sig __attribute__((unused)));
my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list); my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list);
...@@ -56,3 +55,8 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename); ...@@ -56,3 +55,8 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename);
#define set_sigpipe(mysql) #define set_sigpipe(mysql)
#define reset_sigpipe(mysql) #define reset_sigpipe(mysql)
#endif #endif
#define CLI_MYSQL_USE_RESULT cli_mysql_use_result
MYSQL_RES * STDCALL cli_mysql_use_result(MYSQL *mysql);
...@@ -58,13 +58,20 @@ ...@@ -58,13 +58,20 @@
#endif #endif
#include <sql_common.h> #include <sql_common.h>
#include "client_settings.h"
#ifdef EMBEDDED_LIBRARY
#ifdef net_flush
#undef net_flush
#endif
my_bool net_flush(NET *net);
#endif
uint mysql_port=0; uint mysql_port=0;
my_string mysql_unix_port=0; my_string mysql_unix_port=0;
ulong net_buffer_length=8192;
ulong max_allowed_packet= 1024L*1024L*1024L;
ulong net_read_timeout= NET_READ_TIMEOUT;
ulong net_write_timeout= NET_WRITE_TIMEOUT;
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG \ #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG \
| CLIENT_LOCAL_FILES | CLIENT_TRANSACTIONS \ | CLIENT_LOCAL_FILES | CLIENT_TRANSACTIONS \
...@@ -101,8 +108,9 @@ sig_handler pipe_sig_handler(int sig); ...@@ -101,8 +108,9 @@ sig_handler pipe_sig_handler(int sig);
static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to, static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to,
const char *from, ulong length); const char *from, ulong length);
my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list); my_bool stmt_close(MYSQL_STMT *stmt, my_bool skip_list);
static my_bool org_my_init_done=0; my_bool org_my_init_done=0;
#ifndef EMBEDDED_LIBRARY
int STDCALL mysql_server_init(int argc __attribute__((unused)), int STDCALL mysql_server_init(int argc __attribute__((unused)),
char **argv __attribute__((unused)), char **argv __attribute__((unused)),
char **groups __attribute__((unused))) char **groups __attribute__((unused)))
...@@ -119,6 +127,7 @@ void STDCALL mysql_server_end() ...@@ -119,6 +127,7 @@ void STDCALL mysql_server_end()
else else
mysql_thread_end(); mysql_thread_end();
} }
#endif /*EMBEDDED_LIBRARY*/
my_bool STDCALL mysql_thread_init() my_bool STDCALL mysql_thread_init()
{ {
...@@ -140,17 +149,6 @@ void STDCALL mysql_thread_end() ...@@ -140,17 +149,6 @@ void STDCALL mysql_thread_end()
Let the user specify that we don't want SIGPIPE; This doesn't however work Let the user specify that we don't want SIGPIPE; This doesn't however work
with threaded applications as we can have multiple read in progress. with threaded applications as we can have multiple read in progress.
*/ */
#if !defined(__WIN__) && defined(SIGPIPE) && !defined(THREAD)
#define init_sigpipe_variables sig_return old_signal_handler=(sig_return) 0
#define set_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) old_signal_handler=signal(SIGPIPE,pipe_sig_handler)
#define reset_sigpipe(mysql) if ((mysql)->client_flag & CLIENT_IGNORE_SIGPIPE) signal(SIGPIPE,old_signal_handler);
#else
#define init_sigpipe_variables
#define set_sigpipe(mysql)
#define reset_sigpipe(mysql)
#endif
static MYSQL* spawn_init(MYSQL* parent, const char* host, static MYSQL* spawn_init(MYSQL* parent, const char* host,
unsigned int port, unsigned int port,
const char* user, const char* user,
...@@ -846,8 +844,7 @@ STDCALL mysql_add_slave(MYSQL* mysql, const char* host, ...@@ -846,8 +844,7 @@ STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
have to wait for the client (and will not wait more than 30 sec/packet). have to wait for the client (and will not wait more than 30 sec/packet).
**************************************************************************/ **************************************************************************/
MYSQL_RES * STDCALL MYSQL_RES * STDCALL CLI_MYSQL_USE_RESULT(MYSQL *mysql)
mysql_use_result(MYSQL *mysql)
{ {
MYSQL_RES *result; MYSQL_RES *result;
DBUG_ENTER("mysql_use_result"); DBUG_ENTER("mysql_use_result");
...@@ -1253,19 +1250,6 @@ uint STDCALL mysql_thread_safe(void) ...@@ -1253,19 +1250,6 @@ uint STDCALL mysql_thread_safe(void)
Some support functions Some support functions
****************************************************************************/ ****************************************************************************/
/*
Functions called my my_net_init() to set some application specific variables
*/
void my_net_local_init(NET *net)
{
net->max_packet= (uint) net_buffer_length;
net->read_timeout= (uint) net_read_timeout;
net->write_timeout=(uint) net_write_timeout;
net->retry_count= 1;
net->max_packet_size= max(net_buffer_length, max_allowed_packet);
}
/* /*
Add escape characters to a string (blob?) to make it suitable for a insert Add escape characters to a string (blob?) to make it suitable for a insert
to should at least have place for length*2+1 chars to should at least have place for length*2+1 chars
...@@ -1999,8 +1983,9 @@ static my_bool execute(MYSQL_STMT * stmt, char *packet, ulong length) ...@@ -1999,8 +1983,9 @@ static my_bool execute(MYSQL_STMT * stmt, char *packet, ulong length)
mysql->last_used_con= mysql; mysql->last_used_con= mysql;
int4store(buff, stmt->stmt_id); /* Send stmt id to server */ int4store(buff, stmt->stmt_id); /* Send stmt id to server */
if (advanced_command(mysql, COM_EXECUTE, buff, MYSQL_STMT_HEADER, packet, if ((*mysql->methods->advanced_command)(mysql, COM_EXECUTE, buff,
length, 1) || MYSQL_STMT_HEADER, packet,
length, 1) ||
mysql_read_query_result(mysql)) mysql_read_query_result(mysql))
{ {
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate); set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
...@@ -2292,8 +2277,9 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number, ...@@ -2292,8 +2277,9 @@ mysql_send_long_data(MYSQL_STMT *stmt, uint param_number,
Note that we don't get any ok packet from the server in this case Note that we don't get any ok packet from the server in this case
This is intentional to save bandwidth. This is intentional to save bandwidth.
*/ */
if (advanced_command(mysql, COM_LONG_DATA, extra_data, if ((*mysql->methods->advanced_command)(mysql, COM_LONG_DATA, extra_data,
MYSQL_LONG_DATA_HEADER, data, length, 1)) MYSQL_LONG_DATA_HEADER, data,
length, 1))
{ {
set_stmt_errmsg(stmt, mysql->net.last_error, set_stmt_errmsg(stmt, mysql->net.last_error,
mysql->net.last_errno, mysql->net.sqlstate); mysql->net.last_errno, mysql->net.sqlstate);
......
...@@ -32,7 +32,7 @@ noinst_LIBRARIES = libmysqld_int.a ...@@ -32,7 +32,7 @@ noinst_LIBRARIES = libmysqld_int.a
pkglib_LIBRARIES = libmysqld.a pkglib_LIBRARIES = libmysqld.a
SUBDIRS = . examples SUBDIRS = . examples
libmysqld_sources= libmysqld.c lib_sql.cc libmysqld_sources= libmysqld.c lib_sql.cc
libmysqlsources = errmsg.c get_password.c libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c
noinst_HEADERS = embedded_priv.h noinst_HEADERS = embedded_priv.h
...@@ -57,8 +57,6 @@ sqlsources = derror.cc field.cc field_conv.cc filesort.cc \ ...@@ -57,8 +57,6 @@ sqlsources = derror.cc field.cc field_conv.cc filesort.cc \
unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc \ unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc \
spatial.cc gstream.cc sql_help.cc spatial.cc gstream.cc sql_help.cc
EXTRA_DIST = lib_vio.c
libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
libmysqld_a_SOURCES= libmysqld_a_SOURCES=
...@@ -74,7 +72,8 @@ INC_LIB= $(top_builddir)/regex/libregex.a \ ...@@ -74,7 +72,8 @@ INC_LIB= $(top_builddir)/regex/libregex.a \
$(top_builddir)/mysys/libmysys.a \ $(top_builddir)/mysys/libmysys.a \
$(top_builddir)/strings/libmystrings.a \ $(top_builddir)/strings/libmystrings.a \
$(top_builddir)/dbug/libdbug.a \ $(top_builddir)/dbug/libdbug.a \
$(top_builddir)/regex/libregex.a $(top_builddir)/regex/libregex.a \
$(top_builddir)/vio/libvio.a
# #
# To make it easy for the end user to use the embedded library we # To make it easy for the end user to use the embedded library we
...@@ -115,11 +114,14 @@ link_sources: ...@@ -115,11 +114,14 @@ link_sources:
for f in $(libmysqlsources); do \ for f in $(libmysqlsources); do \
rm -f $(srcdir)/$$f; \ rm -f $(srcdir)/$$f; \
@LN_CP_F@ $(srcdir)/../libmysql/$$f $(srcdir)/$$f; \ @LN_CP_F@ $(srcdir)/../libmysql/$$f $(srcdir)/$$f; \
done done; \
@LN_CP_F@ $(srcdir)/../libmysql/client_settings.h $(srcdir)/client_settings.h;
clean-local: clean-local:
rm -f `echo $(sqlsources) $(libmysqlsources) | sed "s;\.lo;.c;g"` \ rm -f `echo $(sqlsources) $(libmysqlsources) | sed "s;\.lo;.c;g"` \
$(top_srcdir)/linked_libmysqld_sources $(top_srcdir)/linked_libmysqld_sources; \
rm -f client_settings.h
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
...@@ -10,7 +10,7 @@ link_sources: ...@@ -10,7 +10,7 @@ link_sources:
DEFS = -DEMBEDDED_LIBRARY DEFS = -DEMBEDDED_LIBRARY
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \ INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \
-I$(top_srcdir) -I$(top_srcdir)/client $(openssl_includes) -I$(top_srcdir) -I$(top_srcdir)/client $(openssl_includes)
LIBS = @LIBS@ @WRAPLIBS@ LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@
LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @bdb_libs_with_path@ @LIBDL@ $(CXXLDFLAGS) LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @bdb_libs_with_path@ @LIBDL@ $(CXXLDFLAGS)
mysqltest_SOURCES = mysqltest.c mysqltest_SOURCES = mysqltest.c
......
...@@ -47,9 +47,10 @@ static bool check_user(THD *thd, enum_server_command command, ...@@ -47,9 +47,10 @@ static bool check_user(THD *thd, enum_server_command command,
char * get_mysql_home(){ return mysql_home;}; char * get_mysql_home(){ return mysql_home;};
char * get_mysql_real_data_home(){ return mysql_real_data_home;}; char * get_mysql_real_data_home(){ return mysql_real_data_home;};
my_bool simple_command(MYSQL *mysql,enum enum_server_command command, my_bool
const char *arg, emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
ulong length, my_bool skipp_check) const char *header, ulong header_length,
const char *arg, ulong arg_length, my_bool skip_check)
{ {
my_bool result= 1; my_bool result= 1;
THD *thd=(THD *) mysql->thd; THD *thd=(THD *) mysql->thd;
...@@ -67,9 +68,9 @@ my_bool simple_command(MYSQL *mysql,enum enum_server_command command, ...@@ -67,9 +68,9 @@ my_bool simple_command(MYSQL *mysql,enum enum_server_command command,
mysql->affected_rows= ~(my_ulonglong) 0; mysql->affected_rows= ~(my_ulonglong) 0;
thd->store_globals(); // Fix if more than one connect thd->store_globals(); // Fix if more than one connect
result= dispatch_command(command, thd, (char *) arg, length + 1); result= dispatch_command(command, thd, (char *) arg, arg_length + 1);
if (!skipp_check) if (!skip_check)
result= thd->net.last_errno ? -1 : 0; result= thd->net.last_errno ? -1 : 0;
mysql->last_error= thd->net.last_error; mysql->last_error= thd->net.last_error;
...@@ -144,7 +145,6 @@ char **copy_arguments(int argc, char **argv) ...@@ -144,7 +145,6 @@ char **copy_arguments(int argc, char **argv)
extern "C" extern "C"
{ {
ulong max_allowed_packet, net_buffer_length;
char ** copy_arguments_ptr= 0; char ** copy_arguments_ptr= 0;
int STDCALL mysql_server_init(int argc, char **argv, char **groups) int STDCALL mysql_server_init(int argc, char **argv, char **groups)
...@@ -281,21 +281,6 @@ void STDCALL mysql_server_end() ...@@ -281,21 +281,6 @@ void STDCALL mysql_server_end()
my_end(0); my_end(0);
} }
my_bool STDCALL mysql_thread_init()
{
#ifdef THREAD
return my_thread_init();
#else
return 0;
#endif
}
void STDCALL mysql_thread_end()
{
#ifdef THREAD
my_thread_end();
#endif
}
} /* extern "C" */ } /* extern "C" */
C_MODE_START C_MODE_START
...@@ -454,11 +439,6 @@ send_eof(THD *thd, bool no_flush) ...@@ -454,11 +439,6 @@ send_eof(THD *thd, bool no_flush)
{ {
} }
uint STDCALL mysql_warning_count(MYSQL *mysql)
{
return ((THD *)mysql->thd)->total_warn_count;
}
void Protocol_simple::prepare_for_resend() void Protocol_simple::prepare_for_resend()
{ {
MYSQL_ROWS *cur; MYSQL_ROWS *cur;
......
/* Copyright (C) 2000 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/*
Note that we can't have assertion on file descriptors; The reason for
this is that during mysql shutdown, another thread can close a file
we are working on. In this case we should just return read errors from
the file descriptior.
*/
#ifdef DUMMY
#include <my_global.h>
#include "mysql_embed.h"
#include "mysql.h"
#ifndef HAVE_VIO /* is Vio enabled */
#include <errno.h>
#include <my_sys.h>
#include <violite.h>
#include <my_net.h>
#include <m_string.h>
#include <assert.h>
#ifndef __WIN__
#define HANDLE void *
#endif
struct st_vio
{
enum enum_vio_type type; /* Type of connection */
void *dest_thd;
char *packets, **last_packet;
char *where_in_packet, *end_of_packet;
my_bool reading;
MEM_ROOT root;
};
/* Initialize the communication buffer */
Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost)
{
DBUG_ENTER("vio_new");
Vio * vio;
if ((vio= (Vio *) my_malloc(sizeof(*vio),MYF(MY_WME|MY_ZEROFILL))))
{
init_alloc_root(&vio->root, 8192, 8192);
vio->root.min_malloc = sizeof(char *) + 4;
vio->last_packet = &vio->packets;
vio->type = type;
}
DBUG_RETURN(vio);
}
#ifdef __WIN__
Vio *vio_new_win32pipe(HANDLE hPipe)
{
return (NULL);
}
#endif
void vio_delete(Vio * vio)
{
DBUG_ENTER("vio_delete");
if (vio)
{
if (vio->type != VIO_CLOSED)
vio_close(vio);
free_root(&vio->root, MYF(0));
my_free((gptr) vio, MYF(0));
}
DBUG_VOID_RETURN;
}
void vio_reset(Vio *vio)
{
DBUG_ENTER("vio_reset");
free_root(&vio->root, MYF(MY_KEEP_PREALLOC));
vio->packets = vio->where_in_packet = vio->end_of_packet = 0;
vio->last_packet = &vio->packets;
DBUG_VOID_RETURN;
}
int vio_errno(Vio *vio __attribute__((unused)))
{
return socket_errno; /* On Win32 this mapped to WSAGetLastError() */
}
int vio_read(Vio * vio, gptr buf, int size)
{
vio->reading = 1;
if (vio->where_in_packet >= vio->end_of_packet)
{
DBUG_ASSERT(vio->packets);
vio->where_in_packet = vio->packets + sizeof(char *) + 4;
vio->end_of_packet = vio->where_in_packet +
uint4korr(vio->packets + sizeof(char *));
vio->packets = *(char **)vio->packets;
}
if (vio->where_in_packet + size > vio->end_of_packet)
size = vio->end_of_packet - vio->where_in_packet;
memcpy(buf, vio->where_in_packet, size);
vio->where_in_packet += size;
return (size);
}
int vio_write(Vio * vio, const gptr buf, int size)
{
DBUG_ENTER("vio_write");
char *packet;
if (vio->reading)
{
vio->reading = 0;
vio_reset(vio);
}
if ((packet = alloc_root(&vio->root, sizeof(char*) + 4 + size)))
{
*vio->last_packet = packet;
vio->last_packet = (char **)packet;
*((char **)packet) = 0; /* Set forward link to 0 */
packet += sizeof(char *);
int4store(packet, size);
memcpy(packet + 4, buf, size);
}
else
size= -1;
DBUG_RETURN(size);
}
int vio_blocking(Vio * vio, my_bool set_blocking_mode, my_bool *old_mode)
{
return (0);
}
my_bool
vio_is_blocking(Vio * vio)
{
return(0);
}
int vio_fastsend(Vio * vio)
{
return(0);
}
int vio_keepalive(Vio* vio, my_bool set_keep_alive)
{
return (0);
}
my_bool
vio_should_retry(Vio * vio __attribute__((unused)))
{
int en = socket_errno;
return (en == SOCKET_EAGAIN || en == SOCKET_EINTR ||
en == SOCKET_EWOULDBLOCK);
}
int vio_close(Vio * vio)
{
return(0);
}
const char *vio_description(Vio * vio)
{
return "embedded vio";
}
enum enum_vio_type vio_type(Vio* vio)
{
return VIO_CLOSED;
}
my_socket vio_fd(Vio* vio)
{
return 0;
}
my_bool vio_peer_addr(Vio * vio, char *buf, uint16 *port)
{
return(0);
}
void vio_in_addr(Vio *vio, struct in_addr *in)
{
}
my_bool vio_poll_read(Vio *vio,uint timeout)
{
return 0;
}
int create_vio(NET *net, int separate_thread)
{
Vio * v = net->vio;
if (!v)
{
v = vio_new(0, separate_thread ? VIO_CLOSED : VIO_TYPE_TCPIP, 0);
net->vio = v;
}
return !v;
}
void set_thd(Vio *v, void *thd)
{
if (v)
{
v -> dest_thd = thd;
}
}
#endif /* HAVE_VIO */
#endif /* DUMMY */
This diff is collapsed.
...@@ -40,6 +40,32 @@ ...@@ -40,6 +40,32 @@
#if defined(MYSQL_SERVER) || defined(HAVE_EXTERNAL_CLIENT) #if defined(MYSQL_SERVER) || defined(HAVE_EXTERNAL_CLIENT)
#include "mysql.h" #include "mysql.h"
#ifdef EMBEDDED_LIBRARY
#ifdef MYSQL_SERVER
#undef MYSQL_SERVER
#endif
#ifndef MYSQL_CLIENT
#define MYSQL_CLIENT
#endif
#define CLI_MYSQL_REAL_CONNECT cli_mysql_real_connect
#ifdef net_flush
#undef net_flush
#endif
my_bool net_flush(NET *net);
#else /*EMBEDDED_LIBRARY*/
#define CLI_MYSQL_REAL_CONNECT mysql_real_connect
#endif /*EMBEDDED_LIBRARY*/
#ifdef MYSQL_CLIENT
static my_bool mysql_client_init=0;
#endif
#if !defined(MYSQL_SERVER) && defined(__WIN__) || defined(_WIN32) || defined(_WIN64) #if !defined(MYSQL_SERVER) && defined(__WIN__) || defined(_WIN32) || defined(_WIN64)
#include <winsock.h> #include <winsock.h>
#include <odbcinst.h> #include <odbcinst.h>
...@@ -563,8 +589,8 @@ void free_rows(MYSQL_DATA *cur) ...@@ -563,8 +589,8 @@ void free_rows(MYSQL_DATA *cur)
} }
} }
my_bool static my_bool
advanced_command(MYSQL *mysql, enum enum_server_command command, cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
const char *header, ulong header_length, const char *header, ulong header_length,
const char *arg, ulong arg_length, my_bool skip_check) const char *arg, ulong arg_length, my_bool skip_check)
{ {
...@@ -632,7 +658,9 @@ my_bool ...@@ -632,7 +658,9 @@ my_bool
simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg,
ulong length, my_bool skip_check) ulong length, my_bool skip_check)
{ {
return advanced_command(mysql, command, NullS, 0, arg, length, skip_check); return
(*mysql->methods->advanced_command)(mysql, command,
NullS, 0, arg, length, skip_check);
} }
void free_old_query(MYSQL *mysql) void free_old_query(MYSQL *mysql)
...@@ -747,8 +775,8 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd) ...@@ -747,8 +775,8 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd)
return 0; return 0;
} }
static void mysql_read_default_options(struct st_mysql_options *options, void mysql_read_default_options(struct st_mysql_options *options,
const char *filename,const char *group) const char *filename,const char *group)
{ {
int argc; int argc;
char *argv_buff[1],**argv; char *argv_buff[1],**argv;
...@@ -1428,10 +1456,23 @@ my_bool mysql_autenticate(MYSQL *mysql, const char *passwd) ...@@ -1428,10 +1456,23 @@ my_bool mysql_autenticate(MYSQL *mysql, const char *passwd)
before calling mysql_real_connect ! before calling mysql_real_connect !
*/ */
MYSQL * STDCALL static void STDCALL cli_mysql_close(MYSQL *mysql);
mysql_real_connect(MYSQL *mysql,const char *host, const char *user, static my_bool STDCALL cli_mysql_read_query_result(MYSQL *mysql);
const char *passwd, const char *db, static MYSQL_RES * STDCALL cli_mysql_store_result(MYSQL *mysql);
uint port, const char *unix_socket,ulong client_flag)
static MYSQL_METHODS client_methods=
{
cli_mysql_close,
cli_mysql_read_query_result,
cli_advanced_command,
cli_mysql_store_result,
CLI_MYSQL_USE_RESULT
};
MYSQL * STDCALL
CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
const char *passwd, const char *db,
uint port, const char *unix_socket,ulong client_flag)
{ {
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
char *charset_name; char *charset_name;
...@@ -1466,6 +1507,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -1466,6 +1507,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
user ? user : "(Null)")); user ? user : "(Null)"));
/* Don't give sigpipe errors if the client doesn't want them */ /* Don't give sigpipe errors if the client doesn't want them */
mysql->methods= &client_methods;
set_sigpipe(mysql); set_sigpipe(mysql);
net->vio = 0; /* If something goes wrong */ net->vio = 0; /* If something goes wrong */
mysql->client_flag=0; /* For handshake */ mysql->client_flag=0; /* For handshake */
...@@ -2176,8 +2218,7 @@ mysql_ssl_free(MYSQL *mysql __attribute__((unused))) ...@@ -2176,8 +2218,7 @@ mysql_ssl_free(MYSQL *mysql __attribute__((unused)))
If handle is alloced by mysql connect free it. If handle is alloced by mysql connect free it.
*************************************************************************/ *************************************************************************/
void STDCALL static void STDCALL cli_mysql_close(MYSQL *mysql)
mysql_close(MYSQL *mysql)
{ {
DBUG_ENTER("mysql_close"); DBUG_ENTER("mysql_close");
if (mysql) /* Some simple safety */ if (mysql) /* Some simple safety */
...@@ -2259,7 +2300,7 @@ mysql_close(MYSQL *mysql) ...@@ -2259,7 +2300,7 @@ mysql_close(MYSQL *mysql)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
my_bool STDCALL mysql_read_query_result(MYSQL *mysql) static my_bool STDCALL cli_mysql_read_query_result(MYSQL *mysql)
{ {
uchar *pos; uchar *pos;
ulong field_count; ulong field_count;
...@@ -2378,8 +2419,7 @@ mysql_real_query(MYSQL *mysql, const char *query, ulong length) ...@@ -2378,8 +2419,7 @@ mysql_real_query(MYSQL *mysql, const char *query, ulong length)
mysql_data_seek may be used. mysql_data_seek may be used.
**************************************************************************/ **************************************************************************/
MYSQL_RES * STDCALL static MYSQL_RES * STDCALL cli_mysql_store_result(MYSQL *mysql)
mysql_store_result(MYSQL *mysql)
{ {
MYSQL_RES *result; MYSQL_RES *result;
DBUG_ENTER("mysql_store_result"); DBUG_ENTER("mysql_store_result");
......
/* Copyright (C) 2000-2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <my_global.h> #include <my_global.h>
#include <mysql_com.h> #include <mysql_com.h>
#include <mysql.h> #include <mysql.h>
ulong net_buffer_length=8192;
ulong max_allowed_packet= 1024L*1024L*1024L;
ulong net_read_timeout= NET_READ_TIMEOUT;
ulong net_write_timeout= NET_WRITE_TIMEOUT;
/* Get the length of next field. Change parameter to point at fieldstart */ /* Get the length of next field. Change parameter to point at fieldstart */
ulong STDCALL net_field_length(uchar **packet) ulong STDCALL net_field_length(uchar **packet)
{ {
...@@ -62,3 +83,16 @@ my_ulonglong net_field_length_ll(uchar **packet) ...@@ -62,3 +83,16 @@ my_ulonglong net_field_length_ll(uchar **packet)
#endif #endif
} }
/*
Functions called my my_net_init() to set some application specific variables
*/
void my_net_local_init(NET *net)
{
net->max_packet= (uint) net_buffer_length;
net->read_timeout= (uint) net_read_timeout;
net->write_timeout=(uint) net_write_timeout;
net->retry_count= 1;
net->max_packet_size= max(net_buffer_length, max_allowed_packet);
}
...@@ -32,3 +32,5 @@ extern ulong slave_net_timeout; ...@@ -32,3 +32,5 @@ extern ulong slave_net_timeout;
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
#undef HAVE_SMEM #undef HAVE_SMEM
#endif #endif
#define CLI_MYSQL_USE_RESULT NULL
...@@ -30,7 +30,10 @@ ...@@ -30,7 +30,10 @@
3 byte length & 1 byte package-number. 3 byte length & 1 byte package-number.
*/ */
#ifndef EMBEDDED_LIBRARY /*
HFTODO this must be hidden if we don't want client capabilities in
embedded library
*/
#ifdef __WIN__ #ifdef __WIN__
#include <winsock.h> #include <winsock.h>
#endif #endif
...@@ -46,6 +49,19 @@ ...@@ -46,6 +49,19 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#ifdef EMBEDDED_LIBRARY
#ifdef net_flush
#undef net_flush
#endif
extern "C" {
my_bool net_flush(NET *net);
}
#endif /*EMBEDDED_LIBRARY */
/* /*
The following handles the differences when this is linked between the The following handles the differences when this is linked between the
client and the server. client and the server.
...@@ -959,5 +975,4 @@ my_net_read(NET *net) ...@@ -959,5 +975,4 @@ my_net_read(NET *net)
return len; return len;
} }
#endif /* EMBEDDED_LIBRARY */
...@@ -236,29 +236,6 @@ net_printf(THD *thd, uint errcode, ...) ...@@ -236,29 +236,6 @@ net_printf(THD *thd, uint errcode, ...)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/*
Function called by my_net_init() to set some check variables
*/
#ifndef EMBEDDED_LIBRARY
extern "C" {
void my_net_local_init(NET *net)
{
net->max_packet= (uint) global_system_variables.net_buffer_length;
net->read_timeout= (uint) global_system_variables.net_read_timeout;
net->write_timeout=(uint) global_system_variables.net_write_timeout;
net->retry_count= (uint) global_system_variables.net_retry_count;
net->max_packet_size= max(global_system_variables.net_buffer_length,
global_system_variables.max_allowed_packet);
}
}
#else /* EMBEDDED_LIBRARY */
void my_net_local_init(NET *net __attribute__(unused))
{
}
#endif /* EMBEDDED_LIBRARY */
/* /*
Return ok to the client. Return ok to the client.
......
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