Commit 079678be authored by serg@serg.mylan's avatar serg@serg.mylan

Merge bk-internal:/home/bk/mysql-4.0/

into serg.mylan:/usr/home/serg/Abk/mysql-4.0
parents 38d9ce96 9632f7d9
...@@ -16,6 +16,7 @@ arjen@george.bitbike.com ...@@ -16,6 +16,7 @@ arjen@george.bitbike.com
bar@bar.intranet.mysql.r18.ru bar@bar.intranet.mysql.r18.ru
bar@bar.mysql.r18.ru bar@bar.mysql.r18.ru
bar@bar.udmsearch.izhnet.ru bar@bar.udmsearch.izhnet.ru
bar@mysql.com
bell@laptop.sanja.is.com.ua bell@laptop.sanja.is.com.ua
bell@sanja.is.com.ua bell@sanja.is.com.ua
bk@admin.bk bk@admin.bk
......
...@@ -123,14 +123,16 @@ if (($opt_directory ne $PWD) && (!-d $opt_directory && !$opt_dry_run)) ...@@ -123,14 +123,16 @@ if (($opt_directory ne $PWD) && (!-d $opt_directory && !$opt_dry_run))
if ($opt_pull) if ($opt_pull)
{ {
&logger("Updating BK tree $REPO to latest ChangeSet first"); &logger("Updating BK tree $REPO to latest ChangeSet first");
$command= "cd $REPO; bk pull; cd .."; chdir ($REPO) or &abort("Could not chdir to $REPO!");
&run_command($command, "Could not update $REPO!"); &run_command("bk pull", "Could not update $REPO!");
chdir ($PWD) or &abort("Could not chdir to $PWD!");
unless ($opt_skip_manual) unless ($opt_skip_manual)
{ {
&logger("Updating manual tree in $opt_docdir"); &logger("Updating manual tree in $opt_docdir");
$command= "cd $opt_docdir; bk pull; cd .."; chdir ($opt_docdir) or &abort("Could not chdir to $opt_docdir!");
&run_command($command, "Could not update $opt_docdir!"); &run_command("bk pull", "Could not update $opt_docdir!");
chdir ($PWD) or &abort("Could not chdir to $PWD!");
} }
} }
......
MessageId = 100
Severity = Error
Facility = Application
SymbolicName = MSG_DEFAULT
Language = English
%1For more information, see Help and Support Center at http://www.mysql.com.
...@@ -281,6 +281,9 @@ ...@@ -281,6 +281,9 @@
/* READLINE: */ /* READLINE: */
#undef VOID_SIGHANDLER #undef VOID_SIGHANDLER
/* Define this if you want extra character set conversion table*/
#undef DEFINE_ALL_CHARACTER_SETS
/* Leave that blank line there!! Autoheader needs it. /* Leave that blank line there!! Autoheader needs it.
If you're adding to this file, keep in mind: If you're adding to this file, keep in mind:
......
...@@ -2262,9 +2262,11 @@ elif test "$extra_charsets" = complex; then ...@@ -2262,9 +2262,11 @@ elif test "$extra_charsets" = complex; then
CHARSETS=`/bin/ls -1 $srcdir/strings/ctype-*.c | \ CHARSETS=`/bin/ls -1 $srcdir/strings/ctype-*.c | \
sed -e 's;^.*/ctype-;;' -e 's;.c$;;'` sed -e 's;^.*/ctype-;;' -e 's;.c$;;'`
CHARSETS=`echo $CHARSETS` # get rid of line breaks CHARSETS=`echo $CHARSETS` # get rid of line breaks
AC_DEFINE([DEFINE_ALL_CHARACTER_SETS])
else else
if test "$extra_charsets" = all; then if test "$extra_charsets" = all; then
CHARSETS="$CHARSETS_AVAILABLE $CHARSETS_DEPRECATED" CHARSETS="$CHARSETS_AVAILABLE $CHARSETS_DEPRECATED"
AC_DEFINE([DEFINE_ALL_CHARACTER_SETS])
else else
CHARSETS=`echo $extra_charsets | sed -e 's/,/ /g'` CHARSETS=`echo $extra_charsets | sed -e 's/,/ /g'`
fi fi
......
drop table if exists t1,t2,t3,t4,T1; drop table if exists t1,t2,t3,t4,T1;
drop database if exists mysqltest;
create table T1 (id int primary key, Word varchar(40) not null, Index(Word)); create table T1 (id int primary key, Word varchar(40) not null, Index(Word));
create table t4 (id int primary key, Word varchar(40) not null); create table t4 (id int primary key, Word varchar(40) not null);
INSERT INTO T1 VALUES (1, 'a'), (2, 'b'), (3, 'c'); INSERT INTO T1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
...@@ -39,12 +40,22 @@ Unknown table 'T1' in field list ...@@ -39,12 +40,22 @@ Unknown table 'T1' in field list
select count(bags.a) from t1 as Bags; select count(bags.a) from t1 as Bags;
Unknown table 'bags' in field list Unknown table 'bags' in field list
drop table t1; drop table t1;
create database foo; create database mysqltest;
use foo; use MYSQLTEST;
create table t1 (a int); create table t1 (a int);
select FOO.t1.* from FOO.t1; select T1.a from MYSQLTEST.T1;
a
select t1.a from MYSQLTEST.T1;
Unknown table 't1' in field list
select mysqltest.t1.* from MYSQLTEST.t1;
a
select MYSQLTEST.t1.* from MYSQLTEST.t1;
a
select MYSQLTEST.T1.* from MYSQLTEST.T1;
a
select MYSQLTEST.T1.* from T1;
a a
alter table t1 rename to T1; alter table t1 rename to T1;
select FOO.t1.* from FOO.t1; select MYSQLTEST.t1.* from MYSQLTEST.t1;
a a
drop database FOO; drop database mysqltest;
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
# #
drop table if exists t1,t2,t3,t4,T1; drop table if exists t1,t2,t3,t4,T1;
drop database if exists mysqltest;
create table T1 (id int primary key, Word varchar(40) not null, Index(Word)); create table T1 (id int primary key, Word varchar(40) not null, Index(Word));
create table t4 (id int primary key, Word varchar(40) not null); create table t4 (id int primary key, Word varchar(40) not null);
INSERT INTO T1 VALUES (1, 'a'), (2, 'b'), (3, 'c'); INSERT INTO T1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
...@@ -34,10 +35,16 @@ drop table t1; ...@@ -34,10 +35,16 @@ drop table t1;
# #
# Test all caps database name # Test all caps database name
# #
create database foo; create database mysqltest;
use foo; use MYSQLTEST;
create table t1 (a int); create table t1 (a int);
select FOO.t1.* from FOO.t1; select T1.a from MYSQLTEST.T1;
--error 1109
select t1.a from MYSQLTEST.T1;
select mysqltest.t1.* from MYSQLTEST.t1;
select MYSQLTEST.t1.* from MYSQLTEST.t1;
select MYSQLTEST.T1.* from MYSQLTEST.T1;
select MYSQLTEST.T1.* from T1;
alter table t1 rename to T1; alter table t1 rename to T1;
select FOO.t1.* from FOO.t1; select MYSQLTEST.t1.* from MYSQLTEST.t1;
drop database FOO; drop database mysqltest;
...@@ -56,12 +56,12 @@ char *disabled_my_option= (char*) "0"; ...@@ -56,12 +56,12 @@ char *disabled_my_option= (char*) "0";
my_bool my_getopt_print_errors= 1; my_bool my_getopt_print_errors= 1;
void default_reporter( enum loglevel level, const char *format, ... ) void default_reporter(enum loglevel level, const char *format, ...)
{ {
va_list args; va_list args;
va_start( args, format ); va_start(args, format);
vfprintf( stderr, format, args ); vfprintf(stderr, format, args);
va_end( args ); va_end(args);
} }
/* /*
...@@ -75,8 +75,9 @@ void default_reporter( enum loglevel level, const char *format, ... ) ...@@ -75,8 +75,9 @@ void default_reporter( enum loglevel level, const char *format, ... )
*/ */
int handle_options(int *argc, char ***argv, int handle_options(int *argc, char ***argv,
const struct my_option *longopts, my_get_one_option get_one_option, const struct my_option *longopts,
my_error_reporter reporter ) my_get_one_option get_one_option,
my_error_reporter reporter)
{ {
uint opt_found, argvpos= 0, length, i; uint opt_found, argvpos= 0, length, i;
my_bool end_of_options= 0, must_be_var, set_maximum_value, special_used, my_bool end_of_options= 0, must_be_var, set_maximum_value, special_used,
...@@ -90,7 +91,8 @@ int handle_options(int *argc, char ***argv, ...@@ -90,7 +91,8 @@ int handle_options(int *argc, char ***argv,
(*argv)++; /* --- || ---- */ (*argv)++; /* --- || ---- */
init_variables(longopts); init_variables(longopts);
if (! reporter) reporter = &default_reporter; if (! reporter)
reporter= &default_reporter;
for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++) for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++)
{ {
...@@ -116,7 +118,8 @@ int handle_options(int *argc, char ***argv, ...@@ -116,7 +118,8 @@ int handle_options(int *argc, char ***argv,
if (!*++pos) if (!*++pos)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: Option '-O' requires an argument\n", progname ); reporter(ERROR_LEVEL,
"%s: Option '-O' requires an argument\n", progname);
return EXIT_ARGUMENT_REQUIRED; return EXIT_ARGUMENT_REQUIRED;
} }
cur_arg= *pos; cur_arg= *pos;
...@@ -132,7 +135,9 @@ int handle_options(int *argc, char ***argv, ...@@ -132,7 +135,9 @@ int handle_options(int *argc, char ***argv,
if (!*cur_arg) if (!*cur_arg)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: Option '--set-variable' requires an argument\n", progname ); reporter(ERROR_LEVEL,
"%s: Option '--set-variable' requires an argument\n",
progname);
return EXIT_ARGUMENT_REQUIRED; return EXIT_ARGUMENT_REQUIRED;
} }
} }
...@@ -144,7 +149,9 @@ int handle_options(int *argc, char ***argv, ...@@ -144,7 +149,9 @@ int handle_options(int *argc, char ***argv,
if (!*++pos) if (!*++pos)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: Option '--set-variable' requires an argument\n", progname ); reporter(ERROR_LEVEL,
"%s: Option '--set-variable' requires an argument\n",
progname);
return EXIT_ARGUMENT_REQUIRED; return EXIT_ARGUMENT_REQUIRED;
} }
cur_arg= *pos; cur_arg= *pos;
...@@ -203,10 +210,10 @@ int handle_options(int *argc, char ***argv, ...@@ -203,10 +210,10 @@ int handle_options(int *argc, char ***argv,
if (opt_found > 1) if (opt_found > 1)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, reporter(ERROR_LEVEL,
"%s: ambiguous option '--%s-%s' (--%s-%s)\n", "%s: ambiguous option '--%s-%s' (--%s-%s)\n",
progname, special_opt_prefix[i], cur_arg, progname, special_opt_prefix[i], cur_arg,
special_opt_prefix[i], prev_found); special_opt_prefix[i], prev_found);
return EXIT_AMBIGUOUS_OPTION; return EXIT_AMBIGUOUS_OPTION;
} }
switch (i) { switch (i) {
...@@ -238,16 +245,16 @@ int handle_options(int *argc, char ***argv, ...@@ -238,16 +245,16 @@ int handle_options(int *argc, char ***argv,
if (must_be_var) if (must_be_var)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( option_is_loose ? WARNING_LEVEL : ERROR_LEVEL, reporter(option_is_loose ? WARNING_LEVEL : ERROR_LEVEL,
"%s: unknown variable '%s'\n", progname, cur_arg ); "%s: unknown variable '%s'\n", progname, cur_arg);
if (!option_is_loose) if (!option_is_loose)
return EXIT_UNKNOWN_VARIABLE; return EXIT_UNKNOWN_VARIABLE;
} }
else else
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( option_is_loose ? WARNING_LEVEL : ERROR_LEVEL, reporter(option_is_loose ? WARNING_LEVEL : ERROR_LEVEL,
"%s: unknown option '--%s'\n", progname, cur_arg ); "%s: unknown option '--%s'\n", progname, cur_arg);
if (!option_is_loose) if (!option_is_loose)
return EXIT_UNKNOWN_OPTION; return EXIT_UNKNOWN_OPTION;
} }
...@@ -263,23 +270,23 @@ int handle_options(int *argc, char ***argv, ...@@ -263,23 +270,23 @@ int handle_options(int *argc, char ***argv,
if (must_be_var) if (must_be_var)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: variable prefix '%s' is not unique\n", reporter(ERROR_LEVEL, "%s: variable prefix '%s' is not unique\n",
progname, cur_arg); progname, cur_arg);
return EXIT_VAR_PREFIX_NOT_UNIQUE; return EXIT_VAR_PREFIX_NOT_UNIQUE;
} }
else else
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: ambiguous option '--%s' (%s, %s)\n", reporter(ERROR_LEVEL, "%s: ambiguous option '--%s' (%s, %s)\n",
progname, cur_arg, prev_found, optp->name); progname, cur_arg, prev_found, optp->name);
return EXIT_AMBIGUOUS_OPTION; return EXIT_AMBIGUOUS_OPTION;
} }
} }
if (must_be_var && optp->var_type == GET_NO_ARG) if (must_be_var && optp->var_type == GET_NO_ARG)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: option '%s' cannot take an argument\n", reporter(ERROR_LEVEL, "%s: option '%s' cannot take an argument\n",
progname, optp->name); progname, optp->name);
return EXIT_NO_ARGUMENT_ALLOWED; return EXIT_NO_ARGUMENT_ALLOWED;
} }
if (optp->arg_type == NO_ARG) if (optp->arg_type == NO_ARG)
...@@ -287,8 +294,9 @@ int handle_options(int *argc, char ***argv, ...@@ -287,8 +294,9 @@ int handle_options(int *argc, char ***argv,
if (optend && optp->var_type != GET_BOOL) if (optend && optp->var_type != GET_BOOL)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: option '--%s' cannot take an argument\n", reporter(ERROR_LEVEL,
progname, optp->name); "%s: option '--%s' cannot take an argument\n",
progname, optp->name);
return EXIT_NO_ARGUMENT_ALLOWED; return EXIT_NO_ARGUMENT_ALLOWED;
} }
if (optp->var_type == GET_BOOL) if (optp->var_type == GET_BOOL)
...@@ -325,8 +333,9 @@ int handle_options(int *argc, char ***argv, ...@@ -325,8 +333,9 @@ int handle_options(int *argc, char ***argv,
if (!*++pos) if (!*++pos)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, "%s: option '--%s' requires an argument\n", reporter(ERROR_LEVEL,
progname, optp->name); "%s: option '--%s' requires an argument\n",
progname, optp->name);
return EXIT_ARGUMENT_REQUIRED; return EXIT_ARGUMENT_REQUIRED;
} }
argument= *pos; argument= *pos;
...@@ -375,9 +384,9 @@ int handle_options(int *argc, char ***argv, ...@@ -375,9 +384,9 @@ int handle_options(int *argc, char ***argv,
if (!pos[1]) if (!pos[1])
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, reporter(ERROR_LEVEL,
"%s: option '-%c' requires an argument\n", "%s: option '-%c' requires an argument\n",
progname, optp->id); progname, optp->id);
return EXIT_ARGUMENT_REQUIRED; return EXIT_ARGUMENT_REQUIRED;
} }
argument= *++pos; argument= *++pos;
...@@ -387,9 +396,9 @@ int handle_options(int *argc, char ***argv, ...@@ -387,9 +396,9 @@ int handle_options(int *argc, char ***argv,
} }
if ((error= setval(optp, argument, set_maximum_value))) if ((error= setval(optp, argument, set_maximum_value)))
{ {
reporter( ERROR_LEVEL, reporter(ERROR_LEVEL,
"%s: Error while setting value '%s' to '%s'\n", "%s: Error while setting value '%s' to '%s'\n",
progname, argument, optp->name); progname, argument, optp->name);
return error; return error;
} }
get_one_option(optp->id, optp, argument); get_one_option(optp->id, optp, argument);
...@@ -399,8 +408,8 @@ int handle_options(int *argc, char ***argv, ...@@ -399,8 +408,8 @@ int handle_options(int *argc, char ***argv,
if (!opt_found) if (!opt_found)
{ {
if (my_getopt_print_errors) if (my_getopt_print_errors)
reporter( ERROR_LEVEL, reporter(ERROR_LEVEL,
"%s: unknown option '-%c'\n", progname, *optend); "%s: unknown option '-%c'\n", progname, *optend);
return EXIT_UNKNOWN_OPTION; return EXIT_UNKNOWN_OPTION;
} }
} }
...@@ -409,9 +418,9 @@ int handle_options(int *argc, char ***argv, ...@@ -409,9 +418,9 @@ int handle_options(int *argc, char ***argv,
} }
if ((error= setval(optp, argument, set_maximum_value))) if ((error= setval(optp, argument, set_maximum_value)))
{ {
reporter( ERROR_LEVEL, reporter(ERROR_LEVEL,
"%s: Error while setting value '%s' to '%s'\n", "%s: Error while setting value '%s' to '%s'\n",
progname, argument, optp->name); progname, argument, optp->name);
return error; return error;
} }
get_one_option(optp->id, optp, argument); get_one_option(optp->id, optp, argument);
......
...@@ -20,6 +20,9 @@ ...@@ -20,6 +20,9 @@
** Some of the tables are hidden behind IFDEF to reduce some space. ** Some of the tables are hidden behind IFDEF to reduce some space.
** One can enable them by removing the // characters from the next comment ** One can enable them by removing the // characters from the next comment
** One must also give a name to each mapping that one wants to use... ** One must also give a name to each mapping that one wants to use...
**
** All tables are activated if --with-extra-charsets=all or
** --with-extra-charsets=complex was given to configure.
*/ */
/* #define DEFINE_ALL_CHARACTER_SETS */ /* #define DEFINE_ALL_CHARACTER_SETS */
......
...@@ -43,37 +43,41 @@ static bool test_if_number(const char *str, ...@@ -43,37 +43,41 @@ static bool test_if_number(const char *str,
#ifdef __NT__ #ifdef __NT__
static int eventSource = 0; static int eventSource = 0;
void setupWindowsEventSource()
{
if (eventSource) return;
eventSource = 1; void setup_windows_event_source()
HKEY hRegKey = NULL; {
DWORD dwError = 0; HKEY hRegKey= NULL;
TCHAR szPath[ MAX_PATH ]; DWORD dwError= 0;
TCHAR szPath[MAX_PATH];
DWORD dwTypes;
// Create the event source registry key if (eventSource) // Ensure that we are only called once
dwError = RegCreateKey( HKEY_LOCAL_MACHINE, return;
"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\MySQL", eventSource= 1;
&hRegKey );
// Create the event source registry key
dwError= RegCreateKey(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\MySQL",
&hRegKey);
// Name of the PE module that contains the message resource /* Name of the PE module that contains the message resource */
GetModuleFileName( NULL, szPath, MAX_PATH ); GetModuleFileName(NULL, szPath, MAX_PATH);
// Register EventMessageFile /* Register EventMessageFile */
dwError = RegSetValueEx( hRegKey, "EventMessageFile", 0, REG_EXPAND_SZ, dwError = RegSetValueEx(hRegKey, "EventMessageFile", 0, REG_EXPAND_SZ,
(PBYTE) szPath, strlen(szPath)+1 ); (PBYTE) szPath, strlen(szPath)+1);
// Register supported event types /* Register supported event types */
DWORD dwTypes = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; dwTypes= (EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
dwError = RegSetValueEx( hRegKey, "TypesSupported", 0, REG_DWORD, EVENTLOG_INFORMATION_TYPE);
(LPBYTE) &dwTypes, sizeof dwTypes ); dwError= RegSetValueEx(hRegKey, "TypesSupported", 0, REG_DWORD,
(LPBYTE) &dwTypes, sizeof dwTypes);
RegCloseKey( hRegKey ); RegCloseKey(hRegKey);
} }
#endif #endif /* __NT__ */
/**************************************************************************** /****************************************************************************
...@@ -1208,12 +1212,24 @@ bool MYSQL_LOG::write(Log_event* event_info) ...@@ -1208,12 +1212,24 @@ bool MYSQL_LOG::write(Log_event* event_info)
/* Write log events to reset the 'run environment' of the SQL command */ /* Write log events to reset the 'run environment' of the SQL command */
if (thd && thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) if (thd)
{ {
Query_log_event e(thd, "SET FOREIGN_KEY_CHECKS=1", 24, 0); if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS)
e.set_log_pos(this); {
if (e.write(file)) Query_log_event e(thd, "SET FOREIGN_KEY_CHECKS=1", 24, 0);
goto err; e.set_log_pos(this);
if (e.write(file))
goto err;
}
#if MYSQL_VERSION_ID < 40100
if (thd->variables.convert_set)
{
Query_log_event e(thd, "SET CHARACTER SET DEFAULT", 25, 0);
e.set_log_pos(this);
if (e.write(file))
goto err;
}
#endif
} }
/* /*
...@@ -1732,33 +1748,33 @@ static bool test_if_number(register const char *str, ...@@ -1732,33 +1748,33 @@ static bool test_if_number(register const char *str,
} /* test_if_number */ } /* test_if_number */
void print_buffer_to_file( enum loglevel level, const char *buffer ) void print_buffer_to_file(enum loglevel level, const char *buffer)
{ {
time_t skr; time_t skr;
struct tm tm_tmp; struct tm tm_tmp;
struct tm *start; struct tm *start;
DBUG_ENTER("print_buffer_to_file");
DBUG_ENTER("print_buffer_to_log"); DBUG_PRINT("enter",("buffer: %s", buffer));
VOID(pthread_mutex_lock(&LOCK_error_log)); VOID(pthread_mutex_lock(&LOCK_error_log));
skr=time(NULL); skr=time(NULL);
localtime_r(&skr, &tm_tmp); localtime_r(&skr, &tm_tmp);
start=&tm_tmp; start=&tm_tmp;
fprintf( stderr, "%02d%02d%02d %2d:%02d:%02d [%s] %s\n", fprintf(stderr, "%02d%02d%02d %2d:%02d:%02d [%s] %s\n",
start->tm_year % 100, start->tm_year % 100,
start->tm_mon+1, start->tm_mon+1,
start->tm_mday, start->tm_mday,
start->tm_hour, start->tm_hour,
start->tm_min, start->tm_min,
start->tm_sec, start->tm_sec,
level == ERROR_LEVEL ? "ERROR" : level == WARNING_LEVEL ? "WARNING" : "INFORMATION", (level == ERROR_LEVEL ? "ERROR" : level == WARNING_LEVEL ?
buffer ); "WARNING" : "INFORMATION"),
buffer);
fflush(stderr); fflush(stderr);
VOID(pthread_mutex_unlock(&LOCK_error_log)); VOID(pthread_mutex_unlock(&LOCK_error_log));
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -1772,6 +1788,7 @@ void sql_perror(const char *message) ...@@ -1772,6 +1788,7 @@ void sql_perror(const char *message)
#endif #endif
} }
bool flush_error_log() bool flush_error_log()
{ {
bool result=0; bool result=0;
...@@ -1820,122 +1837,124 @@ bool flush_error_log() ...@@ -1820,122 +1837,124 @@ bool flush_error_log()
#ifdef __NT__ #ifdef __NT__
void print_buffer_to_nt_eventlog( enum loglevel level, char *buff, int buffLen ) void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
uint length, int buffLen)
{ {
HANDLE event; HANDLE event;
char *buffptr; char *buffptr;
LPCSTR *buffmsgptr; LPCSTR *buffmsgptr;
DBUG_ENTER("print_buffer_to_nt_eventlog");
DBUG_ENTER( "print_buffer_to_nt_eventlog" ); buffptr= buff;
if (length > (uint)(buffLen-4))
buffptr = buff;
if (strlen(buff) > (uint)(buffLen-4))
{ {
char *newBuff = new char[ strlen(buff) + 4 ]; char *newBuff= new char[length + 4];
strcpy( newBuff, buff ); strcpy(newBuff, buff);
buffptr = newBuff; buffptr= newBuff;
} }
strcat( buffptr, "\r\n\r\n" ); strmov(buffptr+length, "\r\n\r\n");
buffmsgptr = (LPCSTR*)&buffptr; buffmsgptr= (LPCSTR*) &buffptr; // Keep windows happy
setupWindowsEventSource(); setup_windows_event_source();
if (event = RegisterEventSource(NULL,"MySQL")) if ((event= RegisterEventSource(NULL,"MySQL")))
{ {
switch (level){ switch (level) {
case ERROR_LEVEL: case ERROR_LEVEL:
ReportEvent(event, EVENTLOG_ERROR_TYPE, 0, MSG_DEFAULT, NULL, 1, 0, buffmsgptr, NULL); ReportEvent(event, EVENTLOG_ERROR_TYPE, 0, MSG_DEFAULT, NULL, 1, 0,
buffmsgptr, NULL);
break; break;
case WARNING_LEVEL: case WARNING_LEVEL:
ReportEvent(event, EVENTLOG_WARNING_TYPE, 0, MSG_DEFAULT, NULL, 1, 0, buffmsgptr, NULL); ReportEvent(event, EVENTLOG_WARNING_TYPE, 0, MSG_DEFAULT, NULL, 1, 0,
buffmsgptr, NULL);
break; break;
case INFORMATION_LEVEL: case INFORMATION_LEVEL:
ReportEvent(event, EVENTLOG_INFORMATION_TYPE, 0, MSG_DEFAULT, NULL, 1, 0, buffmsgptr, NULL); ReportEvent(event, EVENTLOG_INFORMATION_TYPE, 0, MSG_DEFAULT, NULL, 1,
0, buffmsgptr, NULL);
break; break;
} }
DeregisterEventSource(event); DeregisterEventSource(event);
} }
// if we created a string buffer, then delete it /* if we created a string buffer, then delete it */
if ( buffptr != buff ) if (buffptr != buff)
delete[] buffptr; delete[] buffptr;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
#endif #endif /* __NT__ */
/* /*
Prints a printf style message to the error log and, under NT, to the Windows event log. Prints a printf style message to the error log and, under NT, to the
Windows event log.
SYNOPSIS SYNOPSIS
vprint_msg_to_log() vprint_msg_to_log()
event_type Type of event to write (Error, Warning, or Info) event_type Type of event to write (Error, Warning, or Info)
format Printf style format of message format Printf style format of message
args va_list list of arguments for the message args va_list list of arguments for the message
NOTE NOTE
IMPLEMENTATION IMPLEMENTATION
This function prints the message into a buffer and then sends that buffer to other This function prints the message into a buffer and then sends that buffer
functions to write that message to other logging sources. to other functions to write that message to other logging sources.
RETURN VALUES RETURN VALUES
void void
*/ */
void vprint_msg_to_log(enum loglevel level, const char *format, va_list args) void vprint_msg_to_log(enum loglevel level, const char *format, va_list args)
{ {
char buff[1024]; char buff[1024];
uint length;
DBUG_ENTER("vprint_msg_to_log"); DBUG_ENTER("vprint_msg_to_log");
my_vsnprintf( buff, sizeof(buff)-5, format, args ); length= my_vsnprintf(buff, sizeof(buff)-5, format, args);
print_buffer_to_file(level, buff);
print_buffer_to_file( level, buff );
#ifndef DBUG_OFF
DBUG_PRINT("error",("%s",buff));
#endif
#ifdef __NT__ #ifdef __NT__
print_buffer_to_nt_eventlog( level, buff, sizeof(buff) ); print_buffer_to_nt_eventlog(level, buff, length, sizeof(buff));
#endif #endif
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
void sql_print_error( const char *format, ... ) void sql_print_error(const char *format, ...)
{ {
DBUG_ENTER( "sql_print_error" );
va_list args; va_list args;
va_start( args, format ); DBUG_ENTER("sql_print_error");
vprint_msg_to_log( ERROR_LEVEL, format, args );
va_end( args ); va_start(args, format);
vprint_msg_to_log(ERROR_LEVEL, format, args);
va_end(args);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
void sql_print_warning( const char *format, ... )
{
DBUG_ENTER( "sql_print_warning" );
void sql_print_warning(const char *format, ...)
{
va_list args; va_list args;
va_start( args, format ); DBUG_ENTER("sql_print_warning");
vprint_msg_to_log( WARNING_LEVEL, format, args );
va_end( args ); va_start(args, format);
vprint_msg_to_log(WARNING_LEVEL, format, args);
va_end(args);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
void sql_print_information( const char *format, ... )
{
DBUG_ENTER( "sql_print_information" );
void sql_print_information(const char *format, ...)
{
va_list args; va_list args;
va_start( args, format ); DBUG_ENTER("sql_print_information");
vprint_msg_to_log( INFORMATION_LEVEL, format, args );
va_end( args ); va_start(args, format);
vprint_msg_to_log(INFORMATION_LEVEL, format, args);
va_end(args);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -1932,8 +1932,6 @@ end: ...@@ -1932,8 +1932,6 @@ end:
thd->query= 0; // just to be sure thd->query= 0; // just to be sure
thd->query_length= 0; thd->query_length= 0;
VOID(pthread_mutex_unlock(&LOCK_thread_count)); VOID(pthread_mutex_unlock(&LOCK_thread_count));
// assume no convert for next query unless set explictly
thd->variables.convert_set = 0;
close_thread_tables(thd); close_thread_tables(thd);
free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC)); free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC));
return (thd->query_error ? thd->query_error : Log_event::exec_event(rli)); return (thd->query_error ? thd->query_error : Log_event::exec_event(rli));
......
...@@ -2247,6 +2247,10 @@ int main(int argc, char **argv) ...@@ -2247,6 +2247,10 @@ int main(int argc, char **argv)
if (!opt_mysql_tmpdir || !opt_mysql_tmpdir[0]) if (!opt_mysql_tmpdir || !opt_mysql_tmpdir[0])
opt_mysql_tmpdir=(char*) P_tmpdir; /* purecov: inspected */ opt_mysql_tmpdir=(char*) P_tmpdir; /* purecov: inspected */
/* needed by get_options */
(void) pthread_mutex_init(&LOCK_error_log,MY_MUTEX_INIT_FAST);
set_options(); set_options();
get_options(argc,argv); get_options(argc,argv);
set_server_version(); set_server_version();
...@@ -2263,7 +2267,6 @@ int main(int argc, char **argv) ...@@ -2263,7 +2267,6 @@ int main(int argc, char **argv)
(void) pthread_mutex_init(&LOCK_thread_count,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_thread_count,MY_MUTEX_INIT_FAST);
(void) pthread_mutex_init(&LOCK_mapped_file,MY_MUTEX_INIT_SLOW); (void) pthread_mutex_init(&LOCK_mapped_file,MY_MUTEX_INIT_SLOW);
(void) pthread_mutex_init(&LOCK_status,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_status,MY_MUTEX_INIT_FAST);
(void) pthread_mutex_init(&LOCK_error_log,MY_MUTEX_INIT_FAST);
(void) pthread_mutex_init(&LOCK_delayed_insert,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_delayed_insert,MY_MUTEX_INIT_FAST);
(void) pthread_mutex_init(&LOCK_delayed_status,MY_MUTEX_INIT_FAST); (void) pthread_mutex_init(&LOCK_delayed_status,MY_MUTEX_INIT_FAST);
(void) pthread_mutex_init(&LOCK_delayed_create,MY_MUTEX_INIT_SLOW); (void) pthread_mutex_init(&LOCK_delayed_create,MY_MUTEX_INIT_SLOW);
...@@ -5100,21 +5103,24 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -5100,21 +5103,24 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
} }
return 0; return 0;
} }
/* Initiates DEBUG - but no debugging here ! */
void option_error_reporter( enum loglevel level, const char *format, ... )
void option_error_reporter(enum loglevel level, const char *format, ...)
{ {
va_list args; va_list args;
va_start( args, format ); va_start(args, format);
vprint_msg_to_log( level, format, args ); vprint_msg_to_log(level, format, args);
va_end( args ); va_end(args);
} }
/* Initiates DEBUG - but no debugging here ! */
static void get_options(int argc,char **argv) static void get_options(int argc,char **argv)
{ {
int ho_error; int ho_error;
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option, option_error_reporter ))) if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option,
option_error_reporter)))
exit(ho_error); exit(ho_error);
#if defined(HAVE_BROKEN_REALPATH) #if defined(HAVE_BROKEN_REALPATH)
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
A0 A1 A2 A3 A4 A5 A6 A7 B8 A9 AA AB AC AD AE AF A0 A1 A2 A3 A4 A5 A6 A7 B8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F5 F7 F8 F9 FA FB FC FD FE FF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 A8 B9 BA BB BC BD BE BF B0 B1 B2 B3 B4 B5 B6 B7 A8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D5 D7 D8 D9 DA DB DC DD DE DF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
......
...@@ -2066,13 +2066,16 @@ insert_fields(THD *thd,TABLE_LIST *tables, const char *db_name, ...@@ -2066,13 +2066,16 @@ insert_fields(THD *thd,TABLE_LIST *tables, const char *db_name,
uint found; uint found;
DBUG_ENTER("insert_fields"); DBUG_ENTER("insert_fields");
if (db_name && lower_case_table_names) if (db_name && lower_case_table_names)
{ {
/* convert database to lower case for comparison */ /*
strmake( name_buff, db_name, sizeof(name_buff)-1 ); convert database to lower case for comparison
casedn_str( name_buff ); We can't do this in Item_field as this would change the
db_name = name_buff; 'name' of the item which may be used in the select list
*/
strmake(name_buff, db_name, sizeof(name_buff)-1);
casedn_str(name_buff);
db_name= name_buff;
} }
......
...@@ -993,8 +993,23 @@ ulong next_io_size(register ulong pos) ...@@ -993,8 +993,23 @@ ulong next_io_size(register ulong pos)
void append_unescaped(String *res,const char *pos) void append_unescaped(String *res,const char *pos)
{ {
for (; *pos ; pos++) #ifdef USE_MB
const char *end= pos + strlen(pos);
#endif
for (; *pos ; )
{ {
#if defined(USE_MB) && MYSQL_VERSION_ID < 40100
uint mblen;
if (use_mb(default_charset_info) &&
(mblen= my_ismbchar(default_charset_info, pos, end)))
{
res->append(pos, mblen);
pos+= mblen;
continue;
}
#endif
switch (*pos) { switch (*pos) {
case 0: /* Must be escaped for 'mysql' */ case 0: /* Must be escaped for 'mysql' */
res->append('\\'); res->append('\\');
...@@ -1020,6 +1035,7 @@ void append_unescaped(String *res,const char *pos) ...@@ -1020,6 +1035,7 @@ void append_unescaped(String *res,const char *pos)
res->append(*pos); res->append(*pos);
break; break;
} }
pos++;
} }
} }
......
...@@ -22,7 +22,7 @@ EXTRA_DIST = mysql.spec.sh \ ...@@ -22,7 +22,7 @@ EXTRA_DIST = mysql.spec.sh \
my-medium.cnf.sh \ my-medium.cnf.sh \
my-large.cnf.sh \ my-large.cnf.sh \
my-huge.cnf.sh \ my-huge.cnf.sh \
my-innodb-heavy-4G \ my-innodb-heavy-4G.cnf.sh \
mysql-log-rotate.sh \ mysql-log-rotate.sh \
mysql.server.sh \ mysql.server.sh \
binary-configure.sh \ binary-configure.sh \
......
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