diff options
author | unknown <hf@deer.(none)> | 2005-01-11 21:00:53 +0400 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2005-01-11 21:00:53 +0400 |
commit | 4f113ac4f385af6a8dd3de4e9a1b117f211cce23 (patch) | |
tree | a016853c9385e1555657e606886d3588657139ab | |
parent | d067695909d6aa58e30dd43eedc2a8e3a7fc588c (diff) | |
parent | 7bb97a4ad8aee442d657de23093d1c9f4a2013d5 (diff) | |
download | mariadb-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.dsp | 2 | ||||
-rw-r--r-- | client/mysql.cc | 12 | ||||
-rw-r--r-- | include/my_sys.h | 2 | ||||
-rw-r--r-- | libmysqld/lib_sql.cc | 5 | ||||
-rw-r--r-- | libmysqld/libmysqld.c | 3 | ||||
-rw-r--r-- | mysql-test/ndb/ndb_config_2_node.ini | 6 | ||||
-rw-r--r-- | mysql-test/r/ctype_utf8.result | 12 | ||||
-rw-r--r-- | mysql-test/t/ctype_utf8.test | 9 | ||||
-rw-r--r-- | mysys/default.c | 39 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/backup/Backup.cpp | 6 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp | 57 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/suma/Suma.cpp | 7 | ||||
-rw-r--r-- | ndb/src/mgmsrv/InitConfigFileParser.cpp | 12 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 15 | ||||
-rw-r--r-- | sql/sql_base.cc | 1 | ||||
-rw-r--r-- | sql/strfunc.cc | 4 |
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, |