summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2005-01-11 21:00:53 +0400
committerunknown <hf@deer.(none)>2005-01-11 21:00:53 +0400
commit4f113ac4f385af6a8dd3de4e9a1b117f211cce23 (patch)
treea016853c9385e1555657e606886d3588657139ab
parentd067695909d6aa58e30dd43eedc2a8e3a7fc588c (diff)
parent7bb97a4ad8aee442d657de23093d1c9f4a2013d5 (diff)
downloadmariadb-git-4f113ac4f385af6a8dd3de4e9a1b117f211cce23.tar.gz
Merging conflicts resolved
VC++Files/libmysqld/libmysqld.dsp: Auto merged client/mysql.cc: Auto merged include/my_sys.h: Auto merged libmysqld/lib_sql.cc: Auto merged mysql-test/r/ctype_utf8.result: Auto merged ndb/src/kernel/blocks/backup/Backup.cpp: Auto merged ndb/src/kernel/blocks/suma/Suma.cpp: Auto merged ndb/src/mgmsrv/InitConfigFileParser.cpp: Auto merged sql/item_strfunc.cc: Auto merged sql/strfunc.cc: Auto merged VC++Files/sql/mysqld.dsp: Libraries changed mysys/default.c: get_defaults_files implementation added sql/sql_base.cc: merging sql/sql_show.cc: merging
-rw-r--r--VC++Files/libmysqld/libmysqld.dsp2
-rw-r--r--client/mysql.cc12
-rw-r--r--include/my_sys.h2
-rw-r--r--libmysqld/lib_sql.cc5
-rw-r--r--libmysqld/libmysqld.c3
-rw-r--r--mysql-test/ndb/ndb_config_2_node.ini6
-rw-r--r--mysql-test/r/ctype_utf8.result12
-rw-r--r--mysql-test/t/ctype_utf8.test9
-rw-r--r--mysys/default.c39
-rw-r--r--ndb/src/kernel/blocks/backup/Backup.cpp6
-rw-r--r--ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp57
-rw-r--r--ndb/src/kernel/blocks/suma/Suma.cpp7
-rw-r--r--ndb/src/mgmsrv/InitConfigFileParser.cpp12
-rw-r--r--sql/item_strfunc.cc15
-rw-r--r--sql/sql_base.cc1
-rw-r--r--sql/strfunc.cc4
16 files changed, 142 insertions, 50 deletions
diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp
index 16ab7d63abc..99912228445 100644
--- a/VC++Files/libmysqld/libmysqld.dsp
+++ b/VC++Files/libmysqld/libmysqld.dsp
@@ -73,7 +73,7 @@ LINK32=xilink6.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../libmysqld" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c
+# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../libmysqld" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "SAFEMALLOC" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c
# SUBTRACT CPP /X /Fr
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
diff --git a/client/mysql.cc b/client/mysql.cc
index e605c2d7db4..7e7b2e291d5 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -330,6 +330,16 @@ static sig_handler mysql_end(int sig);
int main(int argc,char *argv[])
{
char buff[80];
+ char *defaults, *extra_defaults;
+ char *emb_argv[3];
+ int emb_argc= 1;
+
+ emb_argv[0]= argv[0];
+ get_defaults_files(argc, argv, &defaults, &extra_defaults);
+ if (defaults)
+ emb_argv[emb_argc++]= defaults;
+ if (extra_defaults)
+ emb_argv[emb_argc++]= extra_defaults;
MY_INIT(argv[0]);
DBUG_ENTER("main");
@@ -375,7 +385,7 @@ int main(int argc,char *argv[])
my_end(0);
exit(1);
}
- if (mysql_server_init(0, NULL, (char**) server_default_groups))
+ if (mysql_server_init(emb_argc, emb_argv, (char**) server_default_groups))
{
free_defaults(defaults_argv);
my_end(0);
diff --git a/include/my_sys.h b/include/my_sys.h
index cbcd6f0f833..5b0390c7d72 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -769,6 +769,8 @@ extern void reset_root_defaults(MEM_ROOT *mem_root, uint block_size,
extern char *strdup_root(MEM_ROOT *root,const char *str);
extern char *strmake_root(MEM_ROOT *root,const char *str,uint len);
extern char *memdup_root(MEM_ROOT *root,const char *str,uint len);
+extern void get_defaults_files(int argc, char **argv,
+ char **defaults, char **extra_defaults);
extern int load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv);
extern int process_default_option_files(const char *conf_file,
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index ffbde84f673..353f8cd6430 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -219,12 +219,13 @@ static my_bool emb_mysql_read_query_result(MYSQL *mysql)
static int emb_stmt_execute(MYSQL_STMT *stmt)
{
DBUG_ENTER("emb_stmt_execute");
+ char header[4];
+ int4store(header, stmt->stmt_id);
THD *thd= (THD*)stmt->mysql->thd;
thd->client_param_count= stmt->param_count;
thd->client_params= stmt->params;
if (emb_advanced_command(stmt->mysql, COM_EXECUTE,0,0,
- (const char*)&stmt->stmt_id,sizeof(stmt->stmt_id),
- 1) ||
+ header, sizeof(header), 1) ||
emb_mysql_read_query_result(stmt->mysql))
{
NET *net= &stmt->mysql->net;
diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c
index a2c4be1a078..6fa41fb3fd0 100644
--- a/libmysqld/libmysqld.c
+++ b/libmysqld/libmysqld.c
@@ -143,6 +143,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
db ? db : "(Null)",
user ? user : "(Null)"));
+ if (!host || !host[0])
+ host= mysql->options.host;
+
if (mysql->options.methods_to_use == MYSQL_OPT_USE_REMOTE_CONNECTION ||
(mysql->options.methods_to_use == MYSQL_OPT_GUESS_CONNECTION &&
host && *host && strcmp(host,LOCAL_HOST)))
diff --git a/mysql-test/ndb/ndb_config_2_node.ini b/mysql-test/ndb/ndb_config_2_node.ini
index 8c89d2aa2cc..c831a5c7ffa 100644
--- a/mysql-test/ndb/ndb_config_2_node.ini
+++ b/mysql-test/ndb/ndb_config_2_node.ini
@@ -9,13 +9,13 @@ DataDir= CHOOSE_FILESYSTEM
MaxNoOfOrderedIndexes= CHOOSE_MaxNoOfOrderedIndexes
[ndbd]
-HostName= CHOOSE_HOSTNAME_1
+HostName= CHOOSE_HOSTNAME_1 # hostname is a valid network adress
[ndbd]
-HostName= CHOOSE_HOSTNAME_2
+HostName= CHOOSE_HOSTNAME_2 # hostname is a valid network adress
[ndb_mgmd]
-DataDir= CHOOSE_FILESYSTEM
+DataDir= CHOOSE_FILESYSTEM #
PortNumber= CHOOSE_PORT_MGM
[mysqld]
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 784285aaa4b..c7d1d94e208 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -817,3 +817,15 @@ drop table t1;
select 'c' like '\_' as want0;
want0
0
+create table t1 (id integer, a varchar(100) character set utf8 collate utf8_unicode_ci);
+insert into t1 values (1, 'Test');
+select * from t1 where soundex(a) = soundex('Test');
+id a
+1 Test
+select * from t1 where soundex(a) = soundex('TEST');
+id a
+1 Test
+select * from t1 where soundex(a) = soundex('test');
+id a
+1 Test
+drop table t1;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index 42031be8f3c..214c2712665 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -666,3 +666,12 @@ drop table t1;
#
select 'c' like '\_' as want0;
+#
+# Bug #7730 Server crash using soundex on an utf8 table
+#
+create table t1 (id integer, a varchar(100) character set utf8 collate utf8_unicode_ci);
+insert into t1 values (1, 'Test');
+select * from t1 where soundex(a) = soundex('Test');
+select * from t1 where soundex(a) = soundex('TEST');
+select * from t1 where soundex(a) = soundex('test');
+drop table t1;
diff --git a/mysys/default.c b/mysys/default.c
index 3de134d936f..9fc1bc8aa56 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -262,6 +262,36 @@ static int handle_default_option(void *in_ctx, const char *group_name,
/*
+ Gets --defaults-file and --defaults-extra-file options from command line.
+
+ SYNOPSIS
+ get_defaults_files()
+ argc Pointer to argc of original program
+ argv Pointer to argv of original program
+ defaults --defaults-file option
+ extra_defaults --defaults-extra-file option
+
+ RETURN
+ defaults and extra_defaults will be set to appropriate items
+ of argv array, or to NULL if there are no such options
+*/
+
+void get_defaults_files(int argc, char **argv,
+ char **defaults, char **extra_defaults)
+{
+ *defaults=0;
+ *extra_defaults=0;
+ if (argc >= 2)
+ {
+ if (is_prefix(argv[1],"--defaults-file="))
+ *defaults= argv[1];
+ else if (is_prefix(argv[1],"--defaults-extra-file="))
+ *extra_defaults= argv[1];
+ }
+}
+
+
+/*
Read options from configurations files
SYNOPSIS
@@ -325,6 +355,15 @@ int load_defaults(const char *conf_file, const char **groups,
DBUG_RETURN(0);
}
+ get_defaults_files(*argc, *argv,
+ (char **)&forced_default_file, &defaults_extra_file);
+ if (forced_default_file)
+ forced_default_file= strchr(forced_default_file,'=')+1;
+ if (defaults_extra_file)
+ defaults_extra_file= strchr(defaults_extra_file,'=')+1;
+
+ args_used+= (forced_default_file ? 1 : 0) + (defaults_extra_file ? 1 : 0);
+
group.count=0;
group.name= "defaults";
group.type_names= groups;
diff --git a/ndb/src/kernel/blocks/backup/Backup.cpp b/ndb/src/kernel/blocks/backup/Backup.cpp
index 07aeb771c97..d72efdd0a52 100644
--- a/ndb/src/kernel/blocks/backup/Backup.cpp
+++ b/ndb/src/kernel/blocks/backup/Backup.cpp
@@ -992,7 +992,11 @@ Backup::execUTIL_SEQUENCE_CONF(Signal* signal)
}//if
ndbrequire(ptr.p->masterData.state.getState() == DEFINING);
- ptr.p->backupId = conf->sequenceValue[0];
+ {
+ Uint64 backupId;
+ memcpy(&backupId,conf->sequenceValue,8);
+ ptr.p->backupId= (Uint32)backupId;
+ }
ptr.p->backupKey[0] = (getOwnNodeId() << 16) | (ptr.p->backupId & 0xFFFF);
ptr.p->backupKey[1] = NdbTick_CurrentMillisecond();
diff --git a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
index a01f094cffd..ddf1681479c 100644
--- a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+++ b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
@@ -27,6 +27,14 @@
#include <NdbThread.h>
#include <signaldata/FsOpenReq.hpp>
+// use this to test broken pread code
+//#define HAVE_BROKEN_PREAD
+
+#ifdef HAVE_BROKEN_PREAD
+#undef HAVE_PWRITE
+#undef HAVE_PREAD
+#endif
+
#if defined NDB_WIN32 || defined NDB_OSE || defined NDB_SOFTOSE
#else
// For readv and writev
@@ -379,9 +387,12 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
if(dwSFP != offset) {
return GetLastError();
}
-#elif defined NDB_OSE || defined NDB_SOFTOSE
- return_value = lseek(theFd, offset, SEEK_SET);
- if (return_value != offset) {
+#elif ! defined(HAVE_PREAD)
+ off_t seek_val;
+ while((seek_val= lseek(theFd, offset, SEEK_SET)) == (off_t)-1
+ && errno == EINTR);
+ if(seek_val == (off_t)-1)
+ {
return errno;
}
#endif
@@ -400,10 +411,10 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
return GetLastError();
}
bytes_read = dwBytesRead;
-#elif defined NDB_OSE || defined NDB_SOFTOSE
+#elif ! defined(HAVE_PREAD)
return_value = ::read(theFd, buf, size);
#else // UNIX
- return_value = my_pread(theFd, buf, size, offset,0);
+ return_value = ::pread(theFd, buf, size, offset);
#endif
#ifndef NDB_WIN32
if (return_value == -1 && errno == EINTR) {
@@ -453,7 +464,7 @@ AsyncFile::readReq( Request * request)
void
AsyncFile::readvReq( Request * request)
{
-#if defined NDB_OSE || defined NDB_SOFTOSE
+#if ! defined(HAVE_PREAD)
readReq(request);
return;
#elif defined NDB_WIN32
@@ -483,7 +494,7 @@ AsyncFile::readvReq( Request * request)
int
AsyncFile::extendfile(Request* request) {
-#if defined NDB_OSE || defined NDB_SOFTOSE
+#if ! defined(HAVE_PWRITE)
// Find max size of this file in this request
int maxOffset = 0;
int maxSize = 0;
@@ -592,27 +603,13 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
if(dwSFP != offset) {
return GetLastError();
}
-#elif defined NDB_OSE || defined NDB_SOFTOSE
- return_value = lseek(theFd, offset, SEEK_SET);
- if (return_value != offset) {
- DEBUG(ndbout_c("AsyncFile::writeReq, err1: return_value=%d, offset=%d\n",
- return_value, chunk_offset));
- PRINT_ERRORANDFLAGS(0);
- if (errno == 78) {
- // Could not write beyond end of file, try to extend file
- DEBUG(ndbout_c("AsyncFile::writeReq, Extend. file! filename=\"%s\" \n",
- theFileName.c_str()));
- return_value = extendfile(request);
- if (return_value == -1) {
- return errno;
- }
- return_value = lseek(theFd, offset, SEEK_SET);
- if (return_value != offset) {
- return errno;
- }
- } else {
- return errno;
- }
+#elif ! defined(HAVE_PWRITE)
+ off_t seek_val;
+ while((seek_val= lseek(theFd, offset, SEEK_SET)) == (off_t)-1
+ && errno == EINTR);
+ if(seek_val == (off_t)-1)
+ {
+ return errno;
}
#endif
@@ -634,10 +631,10 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
DEBUG(ndbout_c("Warning partial write %d != %d", bytes_written, bytes_to_write));
}
-#elif defined NDB_OSE || defined NDB_SOFTOSE
+#elif ! defined(HAVE_PWRITE)
return_value = ::write(theFd, buf, bytes_to_write);
#else // UNIX
- return_value = my_pwrite(theFd, buf, bytes_to_write, offset, 0);
+ return_value = ::pwrite(theFd, buf, bytes_to_write, offset);
#endif
#ifndef NDB_WIN32
if (return_value == -1 && errno == EINTR) {
diff --git a/ndb/src/kernel/blocks/suma/Suma.cpp b/ndb/src/kernel/blocks/suma/Suma.cpp
index 88e6dea35ac..44ac054dd67 100644
--- a/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -824,7 +824,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
return;
}
- Uint32 subId = conf->sequenceValue[0];
+ Uint64 subId;
+ memcpy(&subId,conf->sequenceValue,8);
Uint32 subData = conf->senderData;
SubscriberPtr subbPtr;
@@ -832,8 +833,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
CreateSubscriptionIdConf * subconf = (CreateSubscriptionIdConf*)conf;
- subconf->subscriptionId = subId;
- subconf->subscriptionKey =(getOwnNodeId() << 16) | (subId & 0xFFFF);
+ subconf->subscriptionId = (Uint32)subId;
+ subconf->subscriptionKey =(getOwnNodeId() << 16) | (Uint32)(subId & 0xFFFF);
subconf->subscriberData = subbPtr.p->m_senderData;
sendSignal(subbPtr.p->m_subscriberRef, GSN_CREATE_SUBID_CONF, signal,
diff --git a/ndb/src/mgmsrv/InitConfigFileParser.cpp b/ndb/src/mgmsrv/InitConfigFileParser.cpp
index 5cc5c3e9b32..822e10c89aa 100644
--- a/ndb/src/mgmsrv/InitConfigFileParser.cpp
+++ b/ndb/src/mgmsrv/InitConfigFileParser.cpp
@@ -228,14 +228,22 @@ bool InitConfigFileParser::parseNameValuePair(Context& ctx, const char* line)
Vector<BaseString> tmp_string_split;
if (BaseString(line).split(tmp_string_split,
- BaseString("=:"),
- 2) != 2)
+ "=:", 2) != 2)
{
ctx.reportError("Parse error");
return false;
}
// *************************************
+ // Remove all after #
+ // *************************************
+
+ Vector<BaseString> tmp_string_split2;
+ tmp_string_split[1].split(tmp_string_split2,
+ "#", 2);
+ tmp_string_split[1]=tmp_string_split2[0];
+
+ // *************************************
// Remove leading and trailing chars
// *************************************
{
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 3c4ffd3e4f3..9e28acdd091 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1578,9 +1578,14 @@ void Item_func_soundex::fix_length_and_dec()
else return 0
*/
-static char get_scode(CHARSET_INFO *cs,char *ptr)
+static char soundex_toupper(char ch)
{
- uchar ch=my_toupper(cs,*ptr);
+ return (ch >= 'a' && ch <= 'z') ? ch - 'a' + 'A' : ch;
+}
+
+static char get_scode(char *ptr)
+{
+ uchar ch= soundex_toupper(*ptr);
if (ch < 'A' || ch > 'Z')
{
// Thread extended alfa (country spec)
@@ -1610,8 +1615,8 @@ String *Item_func_soundex::val_str(String *str)
from++; /* purecov: inspected */
if (from == end)
return &my_empty_string; // No alpha characters.
- *to++ = my_toupper(cs,*from); // Copy first letter
- last_ch = get_scode(cs,from); // code of the first letter
+ *to++ = soundex_toupper(*from); // Copy first letter
+ last_ch = get_scode(from); // code of the first letter
// for the first 'double-letter check.
// Loop on input letters until
// end of input (null) or output
@@ -1620,7 +1625,7 @@ String *Item_func_soundex::val_str(String *str)
{
if (!my_isalpha(cs,*from))
continue;
- ch=get_scode(cs,from);
+ ch=get_scode(from);
if ((ch != '0') && (ch != last_ch)) // if not skipped or double
{
*to++ = ch; // letter, copy to output
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 48855892567..2233d6f3960 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -2644,6 +2644,7 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields,
List<Item> *sum_func_list,
uint wild_num)
{
+ DBUG_ENTER("setup_wild");
if (!wild_num)
return(0);
diff --git a/sql/strfunc.cc b/sql/strfunc.cc
index 824aa15097e..ca1a4b64af9 100644
--- a/sql/strfunc.cc
+++ b/sql/strfunc.cc
@@ -147,7 +147,7 @@ uint find_type(TYPELIB *lib, const char *find, uint length, bool part_match)
uint find_type2(TYPELIB *typelib, const char *x, uint length, CHARSET_INFO *cs)
{
- int find,pos,findpos;
+ int find,pos;
const char *j;
DBUG_ENTER("find_type2");
DBUG_PRINT("enter",("x: '%.*s' lib: 0x%lx", length, x, typelib));
@@ -157,7 +157,7 @@ uint find_type2(TYPELIB *typelib, const char *x, uint length, CHARSET_INFO *cs)
DBUG_PRINT("exit",("no count"));
DBUG_RETURN(0);
}
- LINT_INIT(findpos);
+
for (find=0, pos=0 ; (j=typelib->type_names[pos]) ; pos++)
{
if (!my_strnncoll(cs, (const uchar*) x, length,