diff options
author | unknown <bell@laptop.sanja.is.com.ua> | 2003-08-18 01:56:31 +0300 |
---|---|---|
committer | unknown <bell@laptop.sanja.is.com.ua> | 2003-08-18 01:56:31 +0300 |
commit | 01441bc590e936b19d3fed293577f6bee07bfbac (patch) | |
tree | fd42b1dde9f635324dae61e14df09dd7cf5f9488 | |
parent | 902111963e2bfec29da5b779a7a1dbbbfbca7d66 (diff) | |
parent | 79e3476071b517900f42dae9f10c73d76f1f4c95 (diff) | |
download | mariadb-git-01441bc590e936b19d3fed293577f6bee07bfbac.tar.gz |
Merge abelkin@bk-internal.mysql.com:/home/bk/mysql-4.0
into laptop.sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.0
-rw-r--r-- | .bzrignore | 1 | ||||
-rw-r--r-- | client/mysqlimport.c | 2 | ||||
-rw-r--r-- | include/config-win.h | 1 | ||||
-rw-r--r-- | myisam/myisamchk.c | 9 | ||||
-rw-r--r-- | mysql-test/r/grant.result | 3 | ||||
-rw-r--r-- | mysql-test/r/rpl_log.result | 5 | ||||
-rw-r--r-- | mysql-test/t/grant.test | 5 | ||||
-rw-r--r-- | mysql-test/t/rpl_log.test | 7 | ||||
-rw-r--r-- | mysys/my_chsize.c | 127 | ||||
-rw-r--r-- | sql/handler.cc | 17 | ||||
-rw-r--r-- | sql/log_event.cc | 24 | ||||
-rw-r--r-- | sql/mysql_priv.h | 3 | ||||
-rw-r--r-- | sql/opt_range.cc | 3 | ||||
-rw-r--r-- | sql/set_var.cc | 22 | ||||
-rw-r--r-- | sql/sql_acl.cc | 2 | ||||
-rw-r--r-- | sql/sql_parse.cc | 9 | ||||
-rw-r--r-- | sql/sql_select.cc | 15 | ||||
-rw-r--r-- | sql/sql_show.cc | 12 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 2 | ||||
-rw-r--r-- | support-files/MacOSX/Makefile.am | 6 | ||||
-rwxr-xr-x | support-files/MacOSX/MySQL | 46 | ||||
-rw-r--r-- | support-files/MacOSX/StartupItem.Description.plist | 15 | ||||
-rw-r--r-- | support-files/MacOSX/StartupItem.Info.plist | 42 | ||||
-rwxr-xr-x | support-files/MacOSX/StartupItem.postinstall | 36 |
24 files changed, 299 insertions, 115 deletions
diff --git a/.bzrignore b/.bzrignore index a18a5008cb0..8514eb6ffb1 100644 --- a/.bzrignore +++ b/.bzrignore @@ -535,3 +535,4 @@ Docs/internals.html Docs/internals.pdf Docs/internals.txt Docs/internals_toc.html +scripts/make_win_src_distribution diff --git a/client/mysqlimport.c b/client/mysqlimport.c index a11b7383517..d7f6c4c0368 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -238,7 +238,7 @@ static int get_options(int *argc, char ***argv) static int write_to_table(char *filename, MYSQL *sock) { char tablename[FN_REFLEN], hard_path[FN_REFLEN], - sql_statement[FN_REFLEN*2+256], *end; + sql_statement[FN_REFLEN*16+256], *end; my_bool local_file; DBUG_ENTER("write_to_table"); DBUG_PRINT("enter",("filename: %s",filename)); diff --git a/include/config-win.h b/include/config-win.h index 69020636893..9f903b3bcd2 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -276,6 +276,7 @@ inline double ulonglong2double(ulonglong value) #define HAVE_ISAM /* We want to have support for ISAM in 4.0 */ #define HAVE_QUERY_CACHE #define SPRINTF_RETURNS_INT +#define HAVE_SETFILEPOINTER #ifdef NOT_USED #define HAVE_SNPRINTF /* Gave link error */ diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 4fadfd2fc5d..a0b4515f1dd 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -1400,21 +1400,22 @@ static int mi_sort_records(MI_CHECK *param, if (!(((ulonglong) 1 << sort_key) & share->state.key_map)) { - mi_check_print_error(param,"Can't sort table '%s' on key %d; No such key", + mi_check_print_warning(param, + "Can't sort table '%s' on key %d; No such key", name,sort_key+1); param->error_printed=0; DBUG_RETURN(0); /* Nothing to do */ } if (keyinfo->flag & HA_FULLTEXT) { - mi_check_print_error(param,"Can't sort table '%s' on FULLTEXT key %d", - name,sort_key+1); + mi_check_print_warning(param,"Can't sort table '%s' on FULLTEXT key %d", + name,sort_key+1); param->error_printed=0; DBUG_RETURN(0); /* Nothing to do */ } if (share->data_file_type == COMPRESSED_RECORD) { - mi_check_print_error(param,"Can't sort read-only table '%s'", name); + mi_check_print_warning(param,"Can't sort read-only table '%s'", name); param->error_printed=0; DBUG_RETURN(0); /* Nothing to do */ } diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index fccd3715af7..4ce22e84dd5 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -108,3 +108,6 @@ flush privileges; drop table t1; GRANT FILE on mysqltest.* to mysqltest_1@localhost; Wrong usage of DB GRANT and GLOBAL PRIVILEGES +select 1; +1 +1 diff --git a/mysql-test/r/rpl_log.result b/mysql-test/r/rpl_log.result index 640e6f02103..2798d1a9fab 100644 --- a/mysql-test/r/rpl_log.result +++ b/mysql-test/r/rpl_log.result @@ -12,7 +12,10 @@ create table t1(n int not null auto_increment primary key); insert into t1 values (NULL); drop table t1; create table t1 (word char(20) not null); -load data infile '../../std_data/words.dat' into table t1; +load data infile '../../std_data/words.dat' into table t1 ignore 1 lines; +select count(*) from t1; +count(*) +69 drop table t1; show binlog events; Log_name Pos Event_type Server_id Orig_log_pos Info diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index 5b20354336c..4433c9cbffc 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -72,5 +72,10 @@ delete from mysql.tables_priv where user='mysqltest_1'; delete from mysql.columns_priv where user='mysqltest_1'; flush privileges; drop table t1; + +# +# Test some error conditions +# --error 1221 GRANT FILE on mysqltest.* to mysqltest_1@localhost; +select 1; -- To test that the previous command didn't cause problems diff --git a/mysql-test/t/rpl_log.test b/mysql-test/t/rpl_log.test index 8cd9d21a087..ad962b585a1 100644 --- a/mysql-test/t/rpl_log.test +++ b/mysql-test/t/rpl_log.test @@ -13,7 +13,8 @@ create table t1(n int not null auto_increment primary key); insert into t1 values (NULL); drop table t1; create table t1 (word char(20) not null); -load data infile '../../std_data/words.dat' into table t1; +load data infile '../../std_data/words.dat' into table t1 ignore 1 lines; +select count(*) from t1; drop table t1; --replace_result $VERSION VERSION show binlog events; @@ -35,8 +36,8 @@ flush logs; # So, depending on a few milliseconds, we end up with 2 rotate events in the # relay log or one, which influences the output of SHOW SLAVE STATUS, making # it not predictable and causing random test failures. -# To make it predictable, we do a useless update now, but which has the interest -# of making the slave catch both rotate events. +# To make it predictable, we do a useless update now, but which has the +# interest of making the slave catch both rotate events. create table t5 (a int); drop table t5; diff --git a/mysys/my_chsize.c b/mysys/my_chsize.c index e8c3c056029..11187cf4522 100644 --- a/mysys/my_chsize.c +++ b/mysys/my_chsize.c @@ -30,7 +30,7 @@ MyFlags Flags DESCRIPTION - my_chsize() truncates file if shorter, else fill with the filler character + my_chsize() truncates file if shorter else fill with the filler character RETURN VALUE 0 Ok @@ -38,89 +38,74 @@ */ int my_chsize(File fd, my_off_t newlength, int filler, myf MyFlags) { + my_off_t oldsize; + char buff[IO_SIZE]; DBUG_ENTER("my_chsize"); DBUG_PRINT("my",("fd: %d length: %lu MyFlags: %d",fd,(ulong) newlength, MyFlags)); - /* if file is shorter, expand with null, else fill unused part with null */ - { - my_off_t oldsize; - char buff[IO_SIZE]; - oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE)); - DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); + oldsize = my_seek(fd, 0L, MY_SEEK_END, MYF(MY_WME+MY_FAE)); + DBUG_PRINT("info",("old_size: %ld", (ulong) oldsize)); -#ifdef __WIN__ - if (oldsize > newlength) - { - LARGE_INTEGER new_length; - HANDLE win_file; - win_file= (HANDLE)_get_osfhandle(fd); - new_length.QuadPart = newlength; - if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN)) - { - if (SetEndOfFile(win_file)) - DBUG_RETURN(0); - } - DBUG_PRINT("error",("errno: %d",errno)); - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno); - DBUG_RETURN(1); - } -#elif defined(HAVE_CHSIZE) - if (oldsize > newlength || filler == 0) + if (oldsize > newlength) +#if defined(HAVE_SETFILEPOINTER) + /* This is for the moment only true on windows */ + { + LARGE_INTEGER new_length; + HANDLE win_file= (HANDLE) _get_osfhandle(fd); + new_length.QuadPart = newlength; + if (SetFilePointerEx(win_file,new_length,NULL,FILE_BEGIN)) { - if (chsize(fd,(off_t) newlength)) - { - DBUG_PRINT("error",("errno: %d",errno)); - my_errno=errno; - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),errno); - DBUG_RETURN(1); - } - else - { - if (filler == 0) - DBUG_RETURN(0); - } + if (SetEndOfFile(win_file)) + DBUG_RETURN(0); } + my_errno= errno; + goto err; + } #elif defined(HAVE_FTRUNCATE) - if (oldsize > newlength) + { + if (ftruncate(fd, (off_t) newlength)) { - if (ftruncate(fd, (off_t) newlength)) - { - my_errno=errno; - DBUG_PRINT("error",("errno: %d",errno)); - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), errno); - DBUG_RETURN(1); - } - DBUG_RETURN(0); - } -#else - if (oldsize > newlength) - { /* Fill diff with null */ - VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE))); - swap(my_off_t, newlength, oldsize); + my_errno= errno; + goto err; } -#endif - /* Full file with 0 until it's as big as requested */ - bfill(buff, IO_SIZE, filler); - while (newlength-oldsize > IO_SIZE) + DBUG_RETURN(0); + } +#elif defined(HAVE_CHSIZE) + { + if (chsize(fd, (off_t) newlength)) { - if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP))) - goto err; - oldsize+= IO_SIZE; - } - if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP))) + my_errno=errno; goto err; + } DBUG_RETURN(0); - err: - if (MyFlags & MY_WME) - my_error(EE_CANT_CHSIZE,MYF(ME_BELL+ME_WAITTANG),my_errno); - DBUG_PRINT("error",("errno: %d",my_errno)); - DBUG_RETURN(1); } -} /* my_chsize */ +#else + { + /* + Fill space between requested length and true length with 'filler' + We should never come here on any modern machine + */ + VOID(my_seek(fd, newlength, MY_SEEK_SET, MYF(MY_WME+MY_FAE))); + swap(my_off_t, newlength, oldsize); + } +#endif + /* Full file with 'filler' until it's as big as requested */ + bfill(buff, IO_SIZE, filler); + while (newlength-oldsize > IO_SIZE) + { + if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP))) + goto err; + oldsize+= IO_SIZE; + } + if (my_write(fd,(byte*) buff,(uint) (newlength-oldsize),MYF(MY_NABP))) + goto err; + DBUG_RETURN(0); +err: + DBUG_PRINT("error", ("errno: %d", errno)); + if (MyFlags & MY_WME) + my_error(EE_CANT_CHSIZE, MYF(ME_BELL+ME_WAITTANG), my_errno); + DBUG_RETURN(1); +} /* my_chsize */ diff --git a/sql/handler.cc b/sql/handler.cc index 505f64dff43..96611301bfa 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1020,14 +1020,25 @@ int ha_create_table(const char *name, HA_CREATE_INFO *create_info, void ha_key_cache(void) { - if (keybuff_size) - (void) init_key_cache((ulong) keybuff_size); + /* + The following mutex is not really needed as long as keybuff_size is + treated as a long value, but we use the mutex here to guard for future + changes. + */ + pthread_mutex_lock(&LOCK_global_system_variables); + long tmp= keybuff_size; + pthread_mutex_unlock(&LOCK_global_system_variables); + if (tmp) + (void) init_key_cache(tmp); } void ha_resize_key_cache(void) { - (void) resize_key_cache((ulong) keybuff_size); + pthread_mutex_lock(&LOCK_global_system_variables); + long tmp= keybuff_size; + pthread_mutex_unlock(&LOCK_global_system_variables); + (void) resize_key_cache(tmp); } diff --git a/sql/log_event.cc b/sql/log_event.cc index f7955be3b09..3451ffab65f 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -329,8 +329,14 @@ void Load_log_event::pack_info(String* packet) pretty_print_str(&tmp, sql_ex.line_start, sql_ex.line_start_len); } - if ((int)skip_lines > 0) - tmp.append( " IGNORE %ld LINES ", (long) skip_lines); + if ((long) skip_lines > 0) + { + char nr_buff[32], *end; + tmp.append( " IGNORE "); + end= longlong10_to_str((longlong) skip_lines, nr_buff, 10); + tmp.append(nr_buff, (uint) (end-nr_buff)); + tmp.append( " LINES"); + } if (num_fields) { @@ -1338,8 +1344,8 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db) pretty_print_str(file, sql_ex.line_start, sql_ex.line_start_len); } - if ((int)skip_lines > 0) - fprintf(file, " IGNORE %ld LINES ", (long) skip_lines); + if ((long) skip_lines > 0) + fprintf(file, " IGNORE %ld LINES", (long) skip_lines); if (num_fields) { @@ -1934,20 +1940,22 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, else if (sql_ex.opt_flags & IGNORE_FLAG) handle_dup= DUP_IGNORE; else + { /* - Note that when replication is running fine, if it was DUP_ERROR on the + When replication is running fine, if it was DUP_ERROR on the master then we could choose DUP_IGNORE here, because if DUP_ERROR suceeded on master, and data is identical on the master and slave, then there should be no uniqueness errors on slave, so DUP_IGNORE is the same as DUP_ERROR. But in the unlikely case of uniqueness errors - (because the data on the master and slave happen to be different (user - error or bug), we want LOAD DATA to print an error message on the - slave to discover the problem. + (because the data on the master and slave happen to be different + (user error or bug), we want LOAD DATA to print an error message on + the slave to discover the problem. If reading from net (a 3.23 master), mysql_load() will change this to DUP_IGNORE. */ handle_dup= DUP_ERROR; + } sql_exchange ex((char*)fname, sql_ex.opt_flags & DUMPFILE_FLAG); String field_term(sql_ex.field_term,sql_ex.field_term_len); diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 0a4728ef325..e31038d7fee 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -507,7 +507,8 @@ void mysqld_list_processes(THD *thd,const char *user,bool verbose); int mysqld_show_status(THD *thd); int mysqld_show_variables(THD *thd,const char *wild); int mysqld_show(THD *thd, const char *wild, show_var_st *variables, - enum enum_var_type value_type); + enum enum_var_type value_type, + pthread_mutex_t *mutex); /* sql_handler.cc */ int mysql_ha_open(THD *thd, TABLE_LIST *tables); diff --git a/sql/opt_range.cc b/sql/opt_range.cc index c7bad3b18f3..349a5d0271c 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -798,7 +798,8 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) table_map ref_tables=cond->used_tables(); if (cond->type() != Item::FUNC_ITEM) { // Should be a field - if (ref_tables & param->current_table) + if ((ref_tables & param->current_table) || + (ref_tables & ~(param->prev_tables | param->read_tables))) DBUG_RETURN(0); DBUG_RETURN(new SEL_TREE(SEL_TREE::MAYBE)); } diff --git a/sql/set_var.cc b/sql/set_var.cc index b3238d1c0ec..6dc36e312cb 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -729,10 +729,12 @@ void fix_max_relay_log_size(THD *thd, enum_var_type type) bool sys_var_long_ptr::update(THD *thd, set_var *var) { ulonglong tmp= var->value->val_int(); + pthread_mutex_lock(&LOCK_global_system_variables); if (option_limits) *value= (ulong) getopt_ull_limit_value(tmp, option_limits); else *value= (ulong) tmp; + pthread_mutex_unlock(&LOCK_global_system_variables); return 0; } @@ -746,17 +748,21 @@ void sys_var_long_ptr::set_default(THD *thd, enum_var_type type) bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var) { ulonglong tmp= var->value->val_int(); + pthread_mutex_lock(&LOCK_global_system_variables); if (option_limits) *value= (ulonglong) getopt_ull_limit_value(tmp, option_limits); else *value= (ulonglong) tmp; + pthread_mutex_unlock(&LOCK_global_system_variables); return 0; } void sys_var_ulonglong_ptr::set_default(THD *thd, enum_var_type type) { + pthread_mutex_lock(&LOCK_global_system_variables); *value= (ulonglong) option_limits->def_value; + pthread_mutex_unlock(&LOCK_global_system_variables); } @@ -1000,9 +1006,21 @@ Item *sys_var::item(THD *thd, enum_var_type var_type) case SHOW_LONG: return new Item_uint((int32) *(ulong*) value_ptr(thd, var_type)); case SHOW_LONGLONG: - return new Item_int(*(longlong*) value_ptr(thd, var_type)); + { + longlong value; + pthread_mutex_lock(&LOCK_global_system_variables); + value= *(longlong*) value_ptr(thd, var_type); + pthread_mutex_unlock(&LOCK_global_system_variables); + return new Item_int(value); + } case SHOW_HA_ROWS: - return new Item_int((longlong) *(ha_rows*) value_ptr(thd, var_type)); + { + ha_rows value; + pthread_mutex_lock(&LOCK_global_system_variables); + value= *(ha_rows*) value_ptr(thd, var_type); + pthread_mutex_unlock(&LOCK_global_system_variables); + return new Item_int((longlong) value); + } case SHOW_MY_BOOL: return new Item_int((int32) *(my_bool*) value_ptr(thd, var_type),1); case SHOW_CHAR: diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 6df778c997b..83cd2c7d2b4 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2370,7 +2370,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, else { net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGES"); - result= -1; + result= 1; } } } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 70c0f772d7d..1d82ac6110b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2146,11 +2146,12 @@ mysql_execute_command(void) break; case SQLCOM_SHOW_STATUS: res= mysqld_show(thd,(lex->wild ? lex->wild->ptr() : NullS),status_vars, - OPT_GLOBAL); + OPT_GLOBAL, &LOCK_status); break; case SQLCOM_SHOW_VARIABLES: res= mysqld_show(thd, (lex->wild ? lex->wild->ptr() : NullS), - init_vars, lex->option_type); + init_vars, lex->option_type, + &LOCK_global_system_variables); break; case SQLCOM_SHOW_LOGS: { @@ -3579,8 +3580,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables) if (options & REFRESH_LOG) { /* - Flush the normal query log, the update log, the binary log, the slow query - log, and the relay log (if it exists). + Flush the normal query log, the update log, the binary log, + the slow query log, and the relay log (if it exists). */ mysql_log.new_file(1); mysql_update_log.new_file(1); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c676f389da7..7922af04ea8 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -972,10 +972,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, group ? group : order, select_limit, thd->select_limit)) - { - if (!join.join_tab[join.const_tables].select->quick) - goto err; - } + goto err; } join.having=having; // Actually a parameter thd->proc_info="Sending data"; @@ -1493,11 +1490,15 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, } } DBUG_ASSERT(num_values == 1); - // DBUG_ASSERT(eq_func); /* QQ: Can I uncomment this ASSERT ? */ + /* + For the moment eq_func is always true. This slot is reserved for future + extensions where we want to remembers other things than just eq comparisons + */ + DBUG_ASSERT(eq_func); /* Store possible eq field */ (*key_fields)->field=field; (*key_fields)->eq_func=eq_func; - (*key_fields)->val=*value; + (*key_fields)->val= *value; (*key_fields)->level=(*key_fields)->const_level=and_level; (*key_fields)->exists_optimize=exists_optimize; (*key_fields)++; @@ -1585,6 +1586,8 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level, if (cond_func->arguments()[0]->type() == Item::FIELD_ITEM) { Item *tmp=new Item_null; + if (!tmp) // Should never be true + return; add_key_field(key_fields,*and_level, ((Item_field*) (cond_func->arguments()[0]))->field, cond_func->functype() == Item_func::ISNULL_FUNC, diff --git a/sql/sql_show.cc b/sql/sql_show.cc index d591a44accf..0321eb3cbba 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1158,7 +1158,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) int mysqld_show(THD *thd, const char *wild, show_var_st *variables, - enum enum_var_type value_type) + enum enum_var_type value_type, + pthread_mutex_t *mutex) { char buff[8192]; String packet2(buff,sizeof(buff)); @@ -1171,8 +1172,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, if (send_fields(thd,field_list,1)) DBUG_RETURN(1); /* purecov: inspected */ - /* pthread_mutex_lock(&THR_LOCK_keycache); */ - pthread_mutex_lock(&LOCK_status); + pthread_mutex_lock(mutex); for (; variables->name; variables++) { if (!(wild && wild[0] && wild_case_compare(variables->name,wild))) @@ -1413,14 +1413,12 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, goto err; /* purecov: inspected */ } } - pthread_mutex_unlock(&LOCK_status); - /* pthread_mutex_unlock(&THR_LOCK_keycache); */ + pthread_mutex_unlock(mutex); send_eof(&thd->net); DBUG_RETURN(0); err: - pthread_mutex_unlock(&LOCK_status); - /* pthread_mutex_unlock(&THR_LOCK_keycache); */ + pthread_mutex_unlock(mutex); DBUG_RETURN(1); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b07dca91a20..03837300904 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2024,7 +2024,7 @@ simple_expr: { LEX *lex=Lex; $$= new Item_func_week($3,new Item_int((char*) "0", - lex->thd->variables.default_week_format,1)); + lex->thd->variables.default_week_format,1)); } | WEEK_SYM '(' expr ',' expr ')' { $$= new Item_func_week($3,$5); } diff --git a/support-files/MacOSX/Makefile.am b/support-files/MacOSX/Makefile.am index b8047942190..ff16fa3235a 100644 --- a/support-files/MacOSX/Makefile.am +++ b/support-files/MacOSX/Makefile.am @@ -22,7 +22,11 @@ EXTRA_DIST = Info.plist.sh \ StartupParameters.plist.sh \ postinstall.sh \ preinstall.sh \ - ReadMe.txt + ReadMe.txt \ + MySQL \ + StartupItem.Description.plist \ + StartupItem.Info.plist \ + StartupItem.postinstall pkgdata_DATA = Info.plist \ Description.plist \ diff --git a/support-files/MacOSX/MySQL b/support-files/MacOSX/MySQL new file mode 100755 index 00000000000..dfba5f8f982 --- /dev/null +++ b/support-files/MacOSX/MySQL @@ -0,0 +1,46 @@ +#!/bin/sh +# +# /Library/StartupItems/MySQL/MySQL +# +# A script to automatically start up MySQL on system bootup +# for Mac OS X. This is actually just a wrapper script around +# the standard mysql.server init script, which is included in +# the binary distribution. +# +# (c) 2003 MySQL AB +# Written by Lenz Grimmer <lenz@mysql.com> +# + +# Source the common setup functions for startup scripts +test -r /etc/rc.common || exit 1 +. /etc/rc.common + +# The path to the mysql.server init script. The official MySQL +# Mac OS X packages are being installed into /usr/local/mysql. +SCRIPT="/usr/local/mysql/support-files/mysql.server" + +StartService () +{ + if [ "${MYSQLCOM:=-NO-}" = "-YES-" ] ; then + ConsoleMessage "Starting MySQL database server" + $SCRIPT start > /dev/null 2>&1 + fi +} + +StopService () +{ + ConsoleMessage "Stopping MySQL database server" + $SCRIPT stop > /dev/null 2>&1 +} + +RestartService () +{ + ConsoleMessage "Restarting MySQL database server" + $SCRIPT restart > /dev/null 2>&1 +} + +if test -x $SCRIPT ; then + RunService "$1" +else + ConsoleMessage "Could not find MySQL startup script!" +fi diff --git a/support-files/MacOSX/StartupItem.Description.plist b/support-files/MacOSX/StartupItem.Description.plist new file mode 100644 index 00000000000..1f0023bde0d --- /dev/null +++ b/support-files/MacOSX/StartupItem.Description.plist @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string>This package enables MySQL to be started up automatically + on system bootup.</string> + <key>IFPkgDescriptionTitle</key> + <string>MySQL Startup Item</string> + <key>IFPkgDescriptionVersion</key> + <string>1.0</string> +</dict> +</plist> diff --git a/support-files/MacOSX/StartupItem.Info.plist b/support-files/MacOSX/StartupItem.Info.plist new file mode 100644 index 00000000000..6bcae9397e5 --- /dev/null +++ b/support-files/MacOSX/StartupItem.Info.plist @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleGetInfoString</key> + <string>MySQL Startup Item</string> + <key>CFBundleIdentifier</key> + <string>com.mysql.mysqlstartup</string> + <key>CFBundleName</key> + <string>MySQL Startup Item</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>IFMajorVersion</key> + <integer>1</integer> + <key>IFMinorVersion</key> + <integer>0</integer> + <key>IFPkgFlagAllowBackRev</key> + <false/> + <key>IFPkgFlagAuthorizationAction</key> + <string>RootAuthorization</string> + <key>IFPkgFlagDefaultLocation</key> + <string>/Library/StartupItems/</string> + <key>IFPkgFlagInstallFat</key> + <false/> + <key>IFPkgFlagIsRequired</key> + <false/> + <key>IFPkgFlagOverwritePermissions</key> + <true/> + <key>IFPkgFlagRelocatable</key> + <false/> + <key>IFPkgFlagRestartAction</key> + <string>NoRestart</string> + <key>IFPkgFlagRootVolumeOnly</key> + <true/> + <key>IFPkgFlagUpdateInstalledLanguages</key> + <false/> + <key>IFPkgFlagUseUserMask</key> + <false/> + <key>IFPkgFormatVersion</key> + <real>0.10000000149011612</real> +</dict> +</plist> diff --git a/support-files/MacOSX/StartupItem.postinstall b/support-files/MacOSX/StartupItem.postinstall new file mode 100755 index 00000000000..f6f6f46f211 --- /dev/null +++ b/support-files/MacOSX/StartupItem.postinstall @@ -0,0 +1,36 @@ +#!/bin/sh +# +# postinstall script for the MySQL Startup Item Installation package +# +# This script modifies /etc/hostconfig in the following ways: +# +# - On Mac OS X Server, it disables the startup of the default MySQL +# installation by changing the "MYSQL" start variable to "-NO-". +# - If not existent already, it adds a "MYSQLCOM" start variable, which +# defaults to "-YES-". An already existing MYSQLCOM variable will remain +# untouched. +# +# (c) 2003 MySQL AB +# Author: Lenz Grimmer <lenz@mysql.com> +# + +CONFFILE="/etc/hostconfig" +TMPFILE=`basename $CONFFILE` || exit 1 +TMPFILE=`mktemp -t $TMPFILE.tmp` || exit 1 + +test -e $CONFFILE || exit 1 + +# Disable the startup of the default MySQL installation that ships with +# Mac OS X Server to avoid conflicts with our installation on bootup +sed -e s/^MYSQL=-YES-/MYSQL=-NO-/g < $CONFFILE > $TMPFILE + +# Add our MYSQLCOM startup variable (enabled by default) +grep -q "^MYSQLCOM" $CONFFILE > /dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo "MYSQLCOM=-YES-" >> $TMPFILE +fi + +# Install the modified file into the default location +cp -f $CONFFILE $CONFFILE~ || exit 1 +mv -f $TMPFILE $CONFFILE || echo "Error while installing new $CONFFILE!" +chmod 644 $CONFFILE |