summaryrefslogtreecommitdiff
path: root/libmysqld
diff options
context:
space:
mode:
Diffstat (limited to 'libmysqld')
-rw-r--r--libmysqld/Makefile.am2
-rw-r--r--libmysqld/examples/Makefile.am2
-rw-r--r--libmysqld/lib_sql.cc59
-rwxr-xr-xlibmysqld/libmysqld.rc125
-rwxr-xr-xlibmysqld/resource.h15
5 files changed, 183 insertions, 20 deletions
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index 28f0d5111e6..f0cda9ae524 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -27,7 +27,7 @@ DEFS = -DEMBEDDED_LIBRARY -DMYSQL_SERVER \
-DSHAREDIR="\"$(MYSQLSHAREdir)\""
INCLUDES= @MT_INCLUDES@ @bdb_includes@ -I$(top_srcdir)/include \
-I$(top_srcdir)/sql -I$(top_srcdir)/regex \
- $(openssl_includes)
+ $(openssl_includes) @ZLIB_INCLUDES@
noinst_LIBRARIES = libmysqld_int.a
pkglib_LIBRARIES = libmysqld.a
diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am
index b3db54d305a..2712e0dff48 100644
--- a/libmysqld/examples/Makefile.am
+++ b/libmysqld/examples/Makefile.am
@@ -16,7 +16,7 @@ DEFS = -DEMBEDDED_LIBRARY
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \
-I$(top_srcdir) -I$(top_srcdir)/client $(openssl_includes)
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@ @LIBDL@ $(CXXLDFLAGS)
mysqltest_LINK = $(CXXLINK)
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index b1c0ef57fac..fdc1acea09b 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -72,6 +72,11 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
THD *thd=(THD *) mysql->thd;
NET *net= &mysql->net;
+ if (thd->data)
+ {
+ free_rows(thd->data);
+ thd->data= 0;
+ }
/* Check that we are calling the client functions in right order */
if (mysql->status != MYSQL_STATUS_READY)
{
@@ -84,6 +89,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
thd->clear_error();
mysql->affected_rows= ~(my_ulonglong) 0;
mysql->field_count= 0;
+ net->last_errno= 0;
thd->store_globals(); // Fix if more than one connect
/*
@@ -107,17 +113,38 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
if (!skip_check)
result= thd->net.last_errno ? -1 : 0;
- embedded_get_error(mysql);
+ /*
+ If mysql->field_count is set it means the parsing of the query was OK
+ and metadata was returned (see Protocol::send_fields).
+ In this case we postpone the error to be returned in mysql_stmt_store_result
+ (see emb_read_rows) to behave just as standalone server.
+ */
+ if (!mysql->field_count)
+ embedded_get_error(mysql);
mysql->server_status= thd->server_status;
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
return result;
}
+static void emb_flush_use_result(MYSQL *mysql)
+{
+ MYSQL_DATA *data= ((THD*)(mysql->thd))->data;
+
+ if (data)
+ {
+ free_rows(data);
+ ((THD*)(mysql->thd))->data= NULL;
+ }
+}
+
static MYSQL_DATA *
emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)),
unsigned int fields __attribute__((unused)))
{
MYSQL_DATA *result= ((THD*)mysql->thd)->data;
+ embedded_get_error(mysql);
+ if (mysql->net.last_errno)
+ return NULL;
if (!result)
{
if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
@@ -195,11 +222,6 @@ static int emb_stmt_execute(MYSQL_STMT *stmt)
THD *thd= (THD*)stmt->mysql->thd;
thd->client_param_count= stmt->param_count;
thd->client_params= stmt->params;
- if (thd->data)
- {
- free_rows(thd->data);
- thd->data= 0;
- }
if (emb_advanced_command(stmt->mysql, COM_EXECUTE,0,0,
(const char*)&stmt->stmt_id,sizeof(stmt->stmt_id),
1) ||
@@ -227,6 +249,9 @@ int emb_read_binary_rows(MYSQL_STMT *stmt)
int emb_unbuffered_fetch(MYSQL *mysql, char **row)
{
MYSQL_DATA *data= ((THD*)mysql->thd)->data;
+ embedded_get_error(mysql);
+ if (mysql->net.last_errno)
+ return mysql->net.last_errno;
if (!data || !data->data)
{
*row= NULL;
@@ -293,6 +318,7 @@ MYSQL_METHODS embedded_methods=
emb_read_rows,
emb_mysql_store_result,
emb_fetch_lengths,
+ emb_flush_use_result,
emb_list_fields,
emb_read_prepare_result,
emb_stmt_execute,
@@ -442,14 +468,6 @@ int init_embedded_server(int argc, char **argv, char **groups)
}
}
- /*
- Update mysqld variables from client variables if set
- The client variables are set also by get_one_option() in mysqld.cc
- */
- if (max_allowed_packet)
- global_system_variables.max_allowed_packet= max_allowed_packet;
- if (net_buffer_length)
- global_system_variables.net_buffer_length= net_buffer_length;
return 0;
}
@@ -478,18 +496,20 @@ void *create_embedded_thd(int client_flag, char *db)
if (thd->store_globals())
{
fprintf(stderr,"store_globals failed.\n");
- return NULL;
+ goto err;
}
thd->mysys_var= my_thread_var;
thd->dbug_thread_id= my_thread_id();
thd->thread_stack= (char*) &thd;
+/* TODO - add init_connect command execution */
+
thd->proc_info=0; // Remove 'login'
thd->command=COM_SLEEP;
thd->version=refresh_version;
thd->set_time();
- init_sql_alloc(&thd->mem_root,8192,8192);
+ thd->init_for_queries();
thd->client_capabilities= client_flag;
thd->db= db;
@@ -504,6 +524,9 @@ void *create_embedded_thd(int client_flag, char *db)
thread_count++;
return thd;
+err:
+ delete(thd);
+ return NULL;
}
#ifdef NO_EMBEDDED_ACCESS_CHECKS
@@ -609,9 +632,9 @@ bool Protocol::send_fields(List<Item> *list, int flags)
client_field->org_table_length= strlen(client_field->org_table);
client_field->charsetnr= server_field.charsetnr;
- client_field->catalog= strdup_root(field_alloc, "std");
+ client_field->catalog= strdup_root(field_alloc, "def");
client_field->catalog_length= 3;
-
+
if (INTERNAL_NUM_FIELD(client_field))
client_field->flags|= NUM_FLAG;
diff --git a/libmysqld/libmysqld.rc b/libmysqld/libmysqld.rc
new file mode 100755
index 00000000000..5b6142faddf
--- /dev/null
+++ b/libmysqld/libmysqld.rc
@@ -0,0 +1,125 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 4,0,20,0
+ PRODUCTVERSION 4,0,20,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x9L
+#else
+ FILEFLAGS 0x8L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+#ifdef _DEBUG
+ VALUE "Comments", "Embedded Server\0"
+ VALUE "CompanyName", "MySQL AB\0"
+ VALUE "FileDescription", "Embedded Server\0"
+ VALUE "FileVersion", "4.0.20\0"
+ VALUE "InternalName", "Embedded Server\0"
+ VALUE "LegalCopyright", "Copyright © 2004\0"
+ VALUE "LegalTrademarks", "MySQL and MySQL AB\0"
+ VALUE "OriginalFilename", "libmysqld.dll debug\0"
+ VALUE "PrivateBuild", "libmysqld.dll debug \0"
+ VALUE "ProductName", "libmysqld.dll debug\0"
+ VALUE "ProductVersion", "4.0.20\0"
+ VALUE "SpecialBuild", "\0"
+#else
+ VALUE "Comments", "Embedded Server\0"
+ VALUE "CompanyName", "MySQL AB\0"
+ VALUE "FileDescription", "Embedded Server\0"
+ VALUE "FileVersion", "4.0.20\0"
+ VALUE "InternalName", "Embedded Server\0"
+ VALUE "LegalCopyright", "Copyright © 2004\0"
+ VALUE "LegalTrademarks", "MySQL and MySQL AB\0"
+ VALUE "OriginalFilename", "libmysqld.dll release\0"
+ VALUE "PrivateBuild", "libmysqld.dll release \0"
+ VALUE "ProductName", "libmysqld.dll release\0"
+ VALUE "ProductVersion", "4.0.20\0"
+ VALUE "SpecialBuild", "\0"
+#endif
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // !_MAC
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/libmysqld/resource.h b/libmysqld/resource.h
new file mode 100755
index 00000000000..f770fe490a6
--- /dev/null
+++ b/libmysqld/resource.h
@@ -0,0 +1,15 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by libmysqld.rc
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif