Commit daff6c51 authored by unknown's avatar unknown

merge with 4.0 to get last fixes to last merge


BitKeeper/etc/logging_ok:
  auto-union
Docs/manual.texi:
  Auto merged
client/mysqltest.c:
  Auto merged
mysql-test/r/alter_table.result:
  Auto merged
mysql-test/r/func_math.result:
  Auto merged
sql/hostname.cc:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_cmpfunc.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_analyse.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  merge with 4.0
parents 08526ba3 ad4e6865
......@@ -50,6 +50,7 @@ sasha@mysql.sashanet.com
serg@serg.mysql.com
serg@sergbook.mysql.com
sinisa@rhols221.adsl.netsonic.fi
tfr@indrek.tfr.cafe.ee
tfr@sarvik.tfr.cafe.ee
tim@bitch.mysql.fi
tim@black.box
......
OriginalAuthor: PaulDuBois
OriginalAuthor: Paul DuBois
!!! ManualStyleGuidelines
''Version 1.0''
''Version 1.1''
!! Revision History
* 2002-05-17 ArjenLentz - Version 1.0, Posted to Wiki
* 2002-06-03 ArjenLentz - Version 1.1, updates.
!! MySQL Manual Style Guidelines
......@@ -277,3 +278,5 @@ Logical NOT/OR/AND are operators, not functions, so they take operands, not argu
It's NetWare, not Netware (as per Novell's trademark guidelines).
It's deprecated, not depricated.
......@@ -14341,7 +14341,7 @@ privilege.
@item --skip-stack-trace
Don't write stack traces. This option is useful when you are running
@code{mysqld} under a debugger. On some system you also have to use
@code{mysqld} under a debugger. On some systems you also have to use
this option to get a core file. @xref{Debugging server}.
@item --skip-thread-priority
......@@ -22662,9 +22662,12 @@ Overrides option --databases (-B).
@item -T, --tab=path-to-some-directory
Creates a @code{table_name.sql} file, that contains the SQL CREATE commands,
and a @code{table_name.txt} file, that contains the data, for each give table.
@strong{Note}: This only works if @code{mysqldump} is run on the same
machine as the @code{mysqld} daemon. The format of the @file{.txt} file
is made according to the @code{--fields-xxx} and @code{--lines--xxx} options.
The format of the @file{.txt} file is made according to the
@code{--fields-xxx} and @code{--lines--xxx} options.
@strong{Note}: This option only works if @code{mysqldump} is run on the same
machine as the @code{mysqld} daemon, and the user/group that @code{mysqld}
is running as (normally user @code{mysql}, group @code{mysql}) needs to have
permission to create/write a file at the location you specify.
@item -u user_name, --user=user_name
The MySQL user name to use when connecting to the server. The
default value is your Unix login name.
......@@ -49340,6 +49343,9 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet
@item
Fixed that @code{ALTER TABLE table_name RENAME new_table_name} is as fast
as @code{RENAME TABLE}.
@item
Fixed bug in @code{GROUP BY} with two or more fields, where at least one
field can contain @code{NULL} values.
@item
......@@ -71,10 +71,6 @@ FTP (@uref{ftp://mir1.ovh.net/ftp.mysql.com/})
@image{Flags/france} France [Netsample] @@
WWW (@uref{http://www.mysql.netsample.com/})
@item
@image{Flags/france} France [Omegatomic] @@
WWW (@uref{http://mysql.omegatomic.com/})
@item
@image{Flags/france} France [Universite Paris 10] @@
WWW (@uref{http://ftp.u-paris10.fr/mysql.com})
......@@ -269,10 +265,6 @@ FTP (@uref{ftp://mysql.unam.mx/pub/mysql/})
@image{Flags/usa} USA [adgrafix.com / Boston, MA] @@
WWW (@uref{http://mysql.adgrafix.com/})
@item
@image{Flags/usa} USA [Fast Mirror / Englewood, CO] @@
WWW (@uref{http://mysql.fastmirror.com/})
@item
@image{Flags/usa} USA [Hurricane Electric / San Jose, CA] @@
WWW (@uref{http://mysql.he.net/})
......@@ -432,4 +424,3 @@ FTP (@uref{ftp://ftp.is.co.za/linux/mysql/})
@end itemize
......@@ -42,7 +42,7 @@
**********************************************************************/
#define MTEST_VERSION "1.23"
#define MTEST_VERSION "1.24"
#include <my_global.h>
#include <mysql_embed.h>
......@@ -1446,6 +1446,8 @@ int do_connect(struct st_query* q)
die("Failed on mysql_init()");
if (opt_compress)
mysql_options(&next_con->mysql,MYSQL_OPT_COMPRESS,NullS);
mysql_options(&next_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
if (con_sock && !free_con_sock && *con_sock && *con_sock != FN_LIBCHAR)
con_sock=fn_format(buff, con_sock, TMPDIR, "",0);
if (!con_db[0])
......@@ -2356,6 +2358,8 @@ int main(int argc, char** argv)
die("Failed in mysql_init()");
if (opt_compress)
mysql_options(&cur_con->mysql,MYSQL_OPT_COMPRESS,NullS);
mysql_options(&cur_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
cur_con->name = my_strdup("default", MYF(MY_WME));
if (!cur_con->name)
die("Out of memory");
......
......@@ -114,3 +114,11 @@ i
3
4
drop table t1;
create table t1 (i int unsigned not null auto_increment primary key);
alter table t1 rename t2;
alter table t2 rename t1, add c char(10) comment "no comment";
show columns from t1;
Field Type Null Key Default Extra
i int(10) unsigned PRI NULL auto_increment
c char(10) YES NULL
drop table t1;
......@@ -105,3 +105,13 @@ insert into t1 values (null),(null),(null),(null);
alter table t1 drop i,add i int unsigned not null auto_increment, drop primary key, add primary key (i);
select * from t1;
drop table t1;
#
# Alter table and rename
#
create table t1 (i int unsigned not null auto_increment primary key);
alter table t1 rename t2;
alter table t2 rename t1, add c char(10) comment "no comment";
show columns from t1;
drop table t1;
......@@ -18,7 +18,9 @@
/* Thread safe version of gethostbyname_r() */
#include "mysys_priv.h"
#ifdef THREAD
#include "my_pthread.h"
#endif
#include <assert.h>
#if !defined(MSDOS) && !defined(__WIN__)
#include <netdb.h>
......@@ -28,11 +30,6 @@
/* This file is not needed if my_gethostbyname_r is a macro */
#if !defined(my_gethostbyname_r)
#ifndef THREAD
#define pthread_mutex_lock(A)
#define pthread_mutex_unlock(A)
#endif
/*
Emulate SOLARIS style calls, not because it's better, but just to make the
usage of getbostbyname_r simpler.
......
......@@ -68,7 +68,7 @@ int handle_options(int *argc, char ***argv,
{
uint opt_found, argvpos= 0, length, spec_len, i;
my_bool end_of_options= 0, must_be_var, set_maximum_value, special_used,
option_is_loose;
option_is_loose, option_used= 0;
char *progname= *(*argv), **pos, *optend, *prev_found;
const struct my_option *optp;
int error;
......@@ -84,6 +84,7 @@ int handle_options(int *argc, char ***argv,
if (cur_arg[0] == '-' && cur_arg[1] && !end_of_options) /* must be opt */
{
char *argument= 0;
option_used= 1;
must_be_var= 0;
set_maximum_value= 0;
special_used= 0;
......@@ -336,7 +337,6 @@ int handle_options(int *argc, char ***argv,
if (optp->var_type == GET_BOOL && optp->arg_type == NO_ARG)
{
*((my_bool*) optp->value)= (my_bool) 1;
(*argc)--;
continue; // For GET_BOOL get_one_option() shouldn't be called
}
else if (optp->arg_type == REQUIRED_ARG ||
......@@ -401,6 +401,12 @@ int handle_options(int *argc, char ***argv,
else /* non-option found */
(*argv)[argvpos++]= cur_arg;
}
/* Destroy the first, already handled option, so that programs that look
for arguments in 'argv', without checking 'argc', know when to stop.
Items in argv, before the destroyed one, are all non-option -arguments
to the program, yet to be (possibly) handled. */
if (option_used)
(*argv)[argvpos]= 0;
return 0;
}
......
......@@ -58,7 +58,7 @@ void hostname_cache_refresh()
bool hostname_cache_init()
{
host_entry *tmp;
uint offset= (uint) ((char*) (&tmp->ip) - (char*) &tmp);
uint offset= (uint) ((char*) (&tmp->ip) - (char*) tmp);
(void) pthread_mutex_init(&LOCK_hostname,MY_MUTEX_INIT_SLOW);
if (!(hostname_cache=new hash_filo(HOST_CACHE_SIZE, offset,
......
......@@ -1308,13 +1308,14 @@ bool Item_func_like::fix_fields(THD *thd,struct st_table_list *tlist)
{
pattern = first + 1;
pattern_len = len - 2;
DBUG_PRINT("TurboBM", ("Initializing pattern: '%s'...", first));
int* suff = (int*)thd->alloc(sizeof(int[pattern_len + 1]));
bmGs = (int*)thd->alloc(sizeof(int[pattern_len + 1]));
bmBc = (int*)thd->alloc(sizeof(int[alphabet_size]));
DBUG_PRINT("info", ("Initializing pattern: '%s'", first));
int *suff = (int*) thd->alloc(sizeof(int)*((pattern_len + 1)*2+
alphabet_size));
bmGs = suff + pattern_len + 1;
bmBc = bmGs + pattern_len + 1;
turboBM_compute_good_suffix_shifts(suff);
turboBM_compute_bad_character_shifts();
DBUG_PRINT("turboBM",("done"));
DBUG_PRINT("info",("done"));
}
}
return 0;
......
......@@ -495,16 +495,10 @@ class Item_func_like :public Item_bool_func2
enum { alphabet_size = 256 };
public:
Item_func_like::Item_func_like(Item *a,Item *b, char* escape_arg) :
Item_bool_func2(a,b),
escape(*escape_arg),
canDoTurboBM(false),
pattern(0),
pattern_len(0),
bmGs(0),
bmBc(0)
Item_func_like(Item *a,Item *b, char* escape_arg)
:Item_bool_func2(a,b), escape(*escape_arg), canDoTurboBM(false),
pattern(0), pattern_len(0), bmGs(0), bmBc(0)
{}
longlong val_int();
enum Functype functype() const { return LIKE_FUNC; }
optimize_type select_optimize() const;
......
......@@ -4004,6 +4004,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
exit(0);
case 'T':
test_flags= argument ? (uint) atoi(argument) : 0;
test_flags&= ~TEST_NO_THREADS;
opt_endinfo=1;
break;
case (int) OPT_BIG_TABLES:
......@@ -4193,8 +4194,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
opt_specialflag|=SPECIAL_SKIP_SHOW_DB;
mysql_port=0;
break;
#ifdef ONE_THREAD
case (int) OPT_ONE_THREAD:
test_flags |= TEST_NO_THREADS;
#endif
break;
case (int) OPT_WANT_CORE:
test_flags |= TEST_CORE_ON_SIGNAL;
......
......@@ -90,21 +90,21 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
(*param->item)->val() < 0)
{
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
DBUG_RETURN(0);
}
pc->max_tree_elements = (uint) (*param->item)->val_int();
param = param->next;
if (param->next) // no third parameter possible
{
net_printf(&thd->net, ER_WRONG_PARAMCOUNT_TO_PROCEDURE, proc_name);
return 0;
DBUG_RETURN(0);
}
// second parameter
if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val() < 0)
{
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
DBUG_RETURN(0);
}
pc->max_treemem = (uint) (*param->item)->val_int();
}
......@@ -112,7 +112,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
(*param->item)->val() < 0)
{
net_printf(&thd->net, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
return 0;
DBUG_RETURN(0);
}
// if only one parameter was given, it will be the value of max_tree_elements
else
......@@ -148,21 +148,26 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
if (item->result_type() == STRING_RESULT)
*f_info++ = new field_str(item, pc);
}
return pc;
} // proc_analyse_init
DBUG_RETURN(pc);
}
// return 1 if number, else return 0
// store info about found number in info
// NOTE:It is expected, that elements of 'info' are all zero!
/*
Return 1 if number, else return 0
store info about found number in info
NOTE:It is expected, that elements of 'info' are all zero!
*/
bool test_if_number(NUM_INFO *info, const char *str, uint str_len)
{
const char *begin, *end = str + str_len;
DBUG_ENTER("test_if_number");
// MySQL removes any endspaces of a string, so we must take care only of
// spaces in front of a string
/*
MySQL removes any endspaces of a string, so we must take care only of
spaces in front of a string
*/
for (; str != end && my_isspace(system_charset_info, *str); str++) ;
if (str == end)
return 0;
......
......@@ -590,7 +590,7 @@ pthread_handler_decl(handle_one_connection,arg)
#if !defined( __WIN__) && !defined(OS2) // Win32 calls this in pthread_create
// The following calls needs to be done before we call DBUG_ macros
if (my_thread_init())
if (!(test_flags & TEST_NO_THREADS) & my_thread_init())
{
close_connection(&thd->net,ER_OUT_OF_RESOURCES);
statistic_increment(aborted_connects,&LOCK_thread_count);
......@@ -1972,6 +1972,7 @@ mysql_execute_command(void)
}
auxi->lock_type=walk->lock_type=TL_WRITE;
auxi->table= (TABLE *) walk; // Remember corresponding table
(void)add_item_to_list(new Item_field(auxi->db,auxi->real_name,"*"));
}
tables->grant.want_privilege=(SELECT_ACL & ~tables->grant.privilege);
if (add_item_to_list(new Item_null()))
......@@ -2583,8 +2584,17 @@ check_table_access(THD *thd,uint want_access,TABLE_LIST *tables,
}
}
else if (check_access(thd,want_access,tables->db,&tables->grant.privilege,
0, no_errors | grant_option))
{
if (grant_option)
{
if ( check_access(thd,want_access & (uint) ~TABLE_ACLS,tables->db,&tables->grant.privilege,
0, no_errors))
return TRUE; // Access denied
return TRUE;
}
else
return TRUE;
}
}
if (grant_option)
return check_grant(thd,want_access & ~EXTRA_ACL,org_tables,
......
......@@ -1303,7 +1303,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
thd->proc_info="init";
table_name=table_list->real_name;
db=table_list->db;
if (!new_db)
if (!new_db || !strcmp(new_db,db))
new_db=db;
used_fields=create_info->used_fields;
......@@ -1357,10 +1357,10 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
/* In some simple cases we need not to recreate the table */
thd->proc_info="setup";
if (simple_alter)
if (simple_alter && !table->tmp_table)
{
error=0;
if (new_name != table_name)
if (new_name != table_name || new_db != db)
{
thd->proc_info="rename";
VOID(pthread_mutex_lock(&LOCK_open));
......@@ -1383,15 +1383,15 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
}
if (!error)
{
switch (keys_onoff)
{
case LEAVE_AS_IS: break;
case ENABLE:
error=table->file->activate_all_index(thd);
break;
case DISABLE:
table->file->deactivate_non_unique_index(HA_POS_ERROR);
break;
switch (keys_onoff) {
case LEAVE_AS_IS:
break;
case ENABLE:
error=table->file->activate_all_index(thd);
break;
case DISABLE:
table->file->deactivate_non_unique_index(HA_POS_ERROR);
break;
}
}
if (!error)
......@@ -1797,7 +1797,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
thd->proc_info="rename result table";
sprintf(old_name,"%s2-%lx-%lx", tmp_file_prefix, current_pid,
thd->thread_id);
if (new_name != table_name)
if (new_name != table_name || new_db != db)
{
if (!access(new_name_buff,F_OK))
{
......@@ -1815,7 +1815,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
{
/*
Win32 and InnoDB can't drop a table that is in use, so we must
close all the original table at before doing the rename
close the original table at before doing the rename
*/
table_name=thd->strdup(table_name); // must be saved
if (close_cached_table(thd,table))
......
......@@ -1329,7 +1329,6 @@ alter_list_item:
LEX *lex=Lex;
lex->select->db=$3->db.str;
lex->name= $3->table.str;
lex->simple_alter=0;
}
| create_table_options { Lex->simple_alter=0; }
| order_clause { Lex->simple_alter=0; };
......
......@@ -36,12 +36,14 @@ const char *VER="0.2";
const char *default_dbug_option="d:t:O,-";
#endif
#if 0
static void
fatal_error( const char* r)
{
perror(r);
exit(0);
}
#endif
typedef struct {
int sd;
......@@ -70,13 +72,13 @@ do_ssl_stuff( TH_ARGS* args)
static void*
client_thread( void* arg)
{
my_thread_init();
do_ssl_stuff((TH_ARGS*)arg);
my_thread_init();
do_ssl_stuff((TH_ARGS*)arg);
return 0;
}
int
main( int argc __attribute__((unused)),
char** argv)
main(int argc __attribute__((unused)), char** argv)
{
char server_key[] = "../SSL/server-key.pem",
server_cert[] = "../SSL/server-cert.pem";
......
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