summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-06-21 10:21:20 +0300
committerunknown <monty@mysql.com>2004-06-21 10:21:20 +0300
commit0c0b2bae9059600def579ac9cce0ad02cc416c0c (patch)
treea55d40c04126c696aec19a9bdd340a11258e07e6
parentc18d847386c7fd050cfca341b466bf9ac24aa2b2 (diff)
downloadmariadb-git-0c0b2bae9059600def579ac9cce0ad02cc416c0c.tar.gz
After merge fixes
Return NULL if a time argument is given to date_add(). (Warning will be shown after Dimitri's timezone patch is pushed) client/mysqltest.c: Added MAX_VAR_NAME which was lost in merge Added more debugging Fixed bug in 'eval' innobase/data/data0type.c: After merge fix innobase/fil/fil0fil.c: After merge fix innobase/log/log0recv.c: After merge fix myisam/mi_unique.c: Better checksum handling mysql-test/r/func_time.result: Return NULL if a time argument is given to date_add() mysql-test/r/rpl_free_items.result: After merge fix mysql-test/r/rpl_get_lock.result: Test was depending on when server was restarted. mysql-test/r/type_date.result: After merge fix mysql-test/r/type_decimal.result: After merge fix mysql-test/t/func_time.test: Removed comment that is not needed anymore (After Dimitri's timezone patch is pushed, we should get a warning for the date_add(time...) entry) mysql-test/t/rpl_get_lock.test: Test was depending on when server was restarted. mysql-test/t/type_date.test: Addded missing explanation for bug netware/mysqld_safe.c: Removed end \r Run program through indent-ex to get MySQL indentation sql-common/client.c: After merge fix sql/field.cc: Fixed that get_date(time) gives a warning sql/field.h: After merge fix sql/net_serv.cc: More debugging (if DEBUG_DATA_PACKETS is set) sql/sql_class.cc: Removed compiler warning sql/table.cc: Better comment
-rw-r--r--client/mysqltest.c34
-rw-r--r--innobase/data/data0type.c1
-rw-r--r--innobase/fil/fil0fil.c3
-rw-r--r--innobase/log/log0recv.c1
-rw-r--r--myisam/mi_unique.c9
-rw-r--r--mysql-test/r/func_time.result2
-rw-r--r--mysql-test/r/rpl_free_items.result4
-rw-r--r--mysql-test/r/rpl_get_lock.result6
-rw-r--r--mysql-test/r/type_date.result2
-rw-r--r--mysql-test/r/type_decimal.result2
-rw-r--r--mysql-test/t/func_time.test2
-rw-r--r--mysql-test/t/rpl_get_lock.test2
-rw-r--r--mysql-test/t/type_date.test5
-rw-r--r--netware/mysqld_safe.c534
-rw-r--r--sql-common/client.c3
-rw-r--r--sql/field.cc17
-rw-r--r--sql/field.h2
-rw-r--r--sql/net_serv.cc12
-rw-r--r--sql/sql_class.cc3
-rw-r--r--sql/table.cc2
20 files changed, 344 insertions, 302 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 1f97b581765..88b7917612e 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -60,6 +60,7 @@
#include <violite.h>
#define MAX_QUERY 131072
+#define MAX_VAR_NAME 256
#define MAX_COLUMNS 256
#define PAD_SIZE 128
#define MAX_CONS 128
@@ -386,6 +387,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
register char c;
register int escaped = 0;
VAR* v;
+ DBUG_ENTER("do_eval");
for (p= query; (c = *p); ++p)
{
@@ -417,6 +419,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
break;
}
}
+ DBUG_VOID_RETURN;
}
@@ -1739,6 +1742,7 @@ int read_line(char* buf, int size)
enum {R_NORMAL, R_Q1, R_ESC_Q_Q1, R_ESC_Q_Q2,
R_ESC_SLASH_Q1, R_ESC_SLASH_Q2,
R_Q2, R_COMMENT, R_LINE_START} state= R_LINE_START;
+ DBUG_ENTER("read_line");
start_lineno= *lineno;
for (; p < buf_end ;)
@@ -1752,7 +1756,7 @@ int read_line(char* buf, int size)
cur_file--;
lineno--;
if (cur_file == file_stack)
- return 1;
+ DBUG_RETURN(1);
continue;
}
@@ -1762,7 +1766,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (c == '\'')
state = R_Q1;
@@ -1779,7 +1783,7 @@ int read_line(char* buf, int size)
{
*p= 0;
(*lineno)++;
- return 0;
+ DBUG_RETURN(0);
}
break;
case R_LINE_START:
@@ -1797,12 +1801,12 @@ int read_line(char* buf, int size)
{
*buf++= '}';
*buf= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (end_of_query(c) || c == '{')
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
else if (c == '\'')
state= R_Q1;
@@ -1822,7 +1826,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
if (c != '\'')
state= R_NORMAL;
@@ -1843,7 +1847,7 @@ int read_line(char* buf, int size)
if (end_of_query(c))
{
*p= 0;
- return 0;
+ DBUG_RETURN(0);
}
if (c != '"')
state= R_NORMAL;
@@ -1859,7 +1863,7 @@ int read_line(char* buf, int size)
*p++= c;
}
*p= 0; /* Always end with \0 */
- return feof(*cur_file);
+ DBUG_RETURN(feof(*cur_file));
}
@@ -1894,8 +1898,11 @@ int read_query(struct st_query** q_ptr)
q->type = Q_UNKNOWN;
q->query_buf= q->query= 0;
if (read_line(read_query_buf, sizeof(read_query_buf)))
+ {
+ DBUG_PRINT("warning",("too long query"));
DBUG_RETURN(1);
-
+ }
+ DBUG_PRINT("info", ("query: %s", read_query_buf));
if (*p == '#')
{
q->type = Q_COMMENT;
@@ -2261,6 +2268,7 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
char* query;
int query_len, got_error_on_send= 0;
DBUG_ENTER("run_query");
+ DBUG_PRINT("enter",("flags: %d", flags));
if (q->type != Q_EVAL)
{
@@ -2728,7 +2736,10 @@ int main(int argc, char **argv)
case Q_EVAL_RESULT: eval_result = 1; break;
case Q_EVAL:
if (q->query == q->query_buf)
+ {
q->query= q->first_argument;
+ q->first_word_len= 0;
+ }
/* fall through */
case Q_QUERY_VERTICAL:
case Q_QUERY_HORIZONTAL:
@@ -2738,13 +2749,16 @@ int main(int argc, char **argv)
{
/* This happens when we use 'query_..' on it's own line */
q_send_flag=1;
+ DBUG_PRINT("info",
+ ("query: '%s' first_word_len: %d send_flag=1",
+ q->query, q->first_word_len));
break;
}
/* fix up query pointer if this is * first iteration for this line */
if (q->query == q->query_buf)
q->query += q->first_word_len + 1;
display_result_vertically= (q->type==Q_QUERY_VERTICAL);
- error |= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND);
+ error|= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND);
display_result_vertically= old_display_result_vertically;
break;
}
diff --git a/innobase/data/data0type.c b/innobase/data/data0type.c
index 1e08bb41c36..97d93b1b0ec 100644
--- a/innobase/data/data0type.c
+++ b/innobase/data/data0type.c
@@ -104,7 +104,6 @@ dtype_form_prtype(
return(old_prtype + (charset_coll << 16));
}
-#ifdef UNIV_DEBUG
/*************************************************************************
Validates a data type structure. */
diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c
index a200116797a..6a13c1de6e3 100644
--- a/innobase/fil/fil0fil.c
+++ b/innobase/fil/fil0fil.c
@@ -2825,8 +2825,7 @@ fil_load_single_table_tablespaces(void)
if (!dbpath) {
dbpath = mem_alloc(dbpath_len);
} else {
- dbpath = mem_realloc(dbpath, dbpath_len,
- __FILE__, __LINE__);
+ dbpath = ut_realloc(dbpath, dbpath_len);
}
}
sprintf(dbpath, "%s/%s", fil_path_to_mysql_datadir,
diff --git a/innobase/log/log0recv.c b/innobase/log/log0recv.c
index a1e9ae8c288..7e57efcf9e1 100644
--- a/innobase/log/log0recv.c
+++ b/innobase/log/log0recv.c
@@ -1513,7 +1513,6 @@ skip_this_recv_addr:
recv_sys_empty_hash();
}
-#endif /* UNIV_HOTBACKUP */
#ifdef notdefined
/***********************************************************************
diff --git a/myisam/mi_unique.c b/myisam/mi_unique.c
index 77e967e52e2..ad685f4cbdc 100644
--- a/myisam/mi_unique.c
+++ b/myisam/mi_unique.c
@@ -70,7 +70,7 @@ ha_checksum mi_unique_hash(MI_UNIQUEDEF *def, const byte *record)
{
const byte *pos, *end;
ha_checksum crc= 0;
- ulong seed= 4;
+ ulong seed1=0, seed2= 4;
HA_KEYSEG *keyseg;
for (keyseg=def->seg ; keyseg < def->end ; keyseg++)
@@ -109,11 +109,10 @@ ha_checksum mi_unique_hash(MI_UNIQUEDEF *def, const byte *record)
end= pos+length;
if (type == HA_KEYTYPE_TEXT || type == HA_KEYTYPE_VARTEXT)
{
- ulong tmp= 0;
keyseg->charset->coll->hash_sort(keyseg->charset,
- (const uchar*) pos, length, &tmp,
- &seed);
- crc^= tmp;
+ (const uchar*) pos, length, &seed1,
+ &seed2);
+ crc^= seed1;
}
else
while (pos != end)
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index 6f1b4af5d3c..bd243de5dcd 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -528,7 +528,7 @@ date_add(date,INTERVAL "1 1:1:1" DAY_SECOND)
2003-01-03 01:01:01
select date_add(time,INTERVAL 1 SECOND) from t1;
date_add(time,INTERVAL 1 SECOND)
-2006-07-08 00:00:01
+NULL
drop table t1;
select last_day('2000-02-05') as f1, last_day('2002-12-31') as f2,
last_day('2003-03-32') as f3, last_day('2003-04-01') as f4,
diff --git a/mysql-test/r/rpl_free_items.result b/mysql-test/r/rpl_free_items.result
index 743fbbc8fc7..91c1e2aa6e5 100644
--- a/mysql-test/r/rpl_free_items.result
+++ b/mysql-test/r/rpl_free_items.result
@@ -1,9 +1,9 @@
-slave stop;
+stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
-slave start;
+start slave;
create table t1 (a int);
create table t2 (a int);
drop table t1;
diff --git a/mysql-test/r/rpl_get_lock.result b/mysql-test/r/rpl_get_lock.result
index 2c57069e91a..26f33bfb42c 100644
--- a/mysql-test/r/rpl_get_lock.result
+++ b/mysql-test/r/rpl_get_lock.result
@@ -18,9 +18,9 @@ get_lock("lock",3)
select * from t1;
n
1
-select is_free_lock("lock"), is_used_lock("lock");
-is_free_lock("lock") is_used_lock("lock")
-0 6
+select is_free_lock("lock"), is_used_lock("lock") = connection_id();
+is_free_lock("lock") is_used_lock("lock") = connection_id()
+0 1
explain extended select is_free_lock("lock"), is_used_lock("lock");
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
diff --git a/mysql-test/r/type_date.result b/mysql-test/r/type_date.result
index 0ec07cd735f..e77ef9f975b 100644
--- a/mysql-test/r/type_date.result
+++ b/mysql-test/r/type_date.result
@@ -73,7 +73,7 @@ SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.
DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.GMT)) DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.GMT))
Wed, 06 March 2002 10:11:12 GMT-0800 Wed, 06 March 2002 10:11:12 GMT-0800
drop table t1,t2;
-CREATE TABLE t1 (f1 time default NULL, f2 time default NULL) TYPE=MyISAM;
+CREATE TABLE t1 (f1 time default NULL, f2 time default NULL);
INSERT INTO t1 (f1, f2) VALUES ('09:00', '12:00');
SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
DATE_FORMAT(f1, "%l.%i %p") DATE_FORMAT(f2, "%l.%i %p")
diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result
index 3b4e94911b7..f14f5cb40bb 100644
--- a/mysql-test/r/type_decimal.result
+++ b/mysql-test/r/type_decimal.result
@@ -449,7 +449,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a_dec` decimal(12,11) default NULL
-) TYPE=MyISAM
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
create table t1(a decimal(7,3));
insert into t1 values ('1'),('+1'),('-1'),('0000000001'),('+0000000001'),('-0000000001'),('10'),('+10'),('-10'),('0000000010'),('+0000000010'),('-0000000010'),('100'),('+100'),('-100'),('0000000100'),('+0000000100'),('-0000000100'),('1000'),('+1000'),('-1000'),('0000001000'),('+0000001000'),('-0000001000'),('10000'),('+10000'),('-10000'),('0000010000'),('+0000010000'),('-0000010000'),('100000'),('+100000'),('-100000'),('0000100000'),('+0000100000'),('-0000100000'),('1000000'),('+1000000'),('-1000000'),('0001000000'),('+0001000000'),('-0001000000'),('10000000'),('+10000000'),('-10000000'),('0010000000'),('+0010000000'),('-0010000000'),('100000000'),('+100000000'),('-100000000'),('0100000000'),('+0100000000'),('-0100000000'),('1000000000'),('+1000000000'),('-1000000000'),('1000000000'),('+1000000000'),('-1000000000');
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index a85f9d563e9..67192c55ef9 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -255,8 +255,6 @@ select date_add(date,INTERVAL "1 1" YEAR_MONTH) from t1;
select date_add(date,INTERVAL "1:1:1" HOUR_SECOND) from t1;
select date_add(date,INTERVAL "1 1:1" DAY_MINUTE) from t1;
select date_add(date,INTERVAL "1 1:1:1" DAY_SECOND) from t1;
-
-# The following is not as one would expect...
select date_add(time,INTERVAL 1 SECOND) from t1;
drop table t1;
diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test
index c3b033fb03a..5e58753e59a 100644
--- a/mysql-test/t/rpl_get_lock.test
+++ b/mysql-test/t/rpl_get_lock.test
@@ -22,7 +22,7 @@ connection slave;
sync_with_master;
select get_lock("lock",3);
select * from t1;
-select is_free_lock("lock"), is_used_lock("lock");
+select is_free_lock("lock"), is_used_lock("lock") = connection_id();
explain extended select is_free_lock("lock"), is_used_lock("lock");
# Check lock functions
select is_free_lock("lock2");
diff --git a/mysql-test/t/type_date.test b/mysql-test/t/type_date.test
index a22299682be..8d67802d42a 100644
--- a/mysql-test/t/type_date.test
+++ b/mysql-test/t/type_date.test
@@ -81,9 +81,10 @@ SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.
drop table t1,t2;
#
-# Bug 4036
+# Multiple SELECT DATE_FORMAT gave incorrect results (Bug #4036)
#
-CREATE TABLE t1 (f1 time default NULL, f2 time default NULL) TYPE=MyISAM;
+
+CREATE TABLE t1 (f1 time default NULL, f2 time default NULL);
INSERT INTO t1 (f1, f2) VALUES ('09:00', '12:00');
SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
DROP TABLE t1;
diff --git a/netware/mysqld_safe.c b/netware/mysqld_safe.c
index 8d4a5c4a296..a307b52bb7e 100644
--- a/netware/mysqld_safe.c
+++ b/netware/mysqld_safe.c
@@ -1,20 +1,20 @@
/*
- Copyright (c) 2003 Novell, Inc. All Rights Reserved.
+ Copyright (c) 2003 Novell, Inc. All Rights Reserved.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
+*/
#include <stdlib.h>
#include <stdio.h>
@@ -32,7 +32,7 @@
/******************************************************************************
global variables
-
+
******************************************************************************/
char autoclose;
char basedir[PATH_MAX];
@@ -47,38 +47,38 @@ char mysqld[PATH_MAX];
char hostname[PATH_MAX];
char default_option[PATH_MAX];
-FILE *log_fd = NULL;
+FILE *log_fd= NULL;
/******************************************************************************
prototypes
-
+
******************************************************************************/
void usage(void);
void vlog(char *, va_list);
void log(char *, ...);
-void start_defaults(int, char*[]);
+void start_defaults(int, char *[]);
void finish_defaults();
void read_defaults(arg_list_t *);
-void parse_args(int, char*[]);
-void get_options(int, char*[]);
+void parse_args(int, char *[]);
+void get_options(int, char *[]);
void check_data_vol();
void check_setup();
void check_tables();
-void mysql_start(int, char*[]);
+void mysql_start(int, char *[]);
void parse_setvar(char *arg);
/******************************************************************************
functions
-
+
******************************************************************************/
/******************************************************************************
usage()
-
+
Show usage.
******************************************************************************/
@@ -86,7 +86,7 @@ void usage(void)
{
// keep the screen up
setscreenmode(SCR_NO_MODE);
-
+
puts("\
\n\
usage: mysqld_safe [options]\n\
@@ -107,14 +107,14 @@ options:\n\
--mysqld=<file> Use the <file> MySQL daemon.\n\
\n\
");
-
+
exit(-1);
}
/******************************************************************************
vlog()
-
+
Log the message.
******************************************************************************/
@@ -122,7 +122,7 @@ void vlog(char *format, va_list ap)
{
vfprintf(stdout, format, ap);
fflush(stdout);
-
+
if (log_fd)
{
vfprintf(log_fd, format, ap);
@@ -133,25 +133,25 @@ void vlog(char *format, va_list ap)
/******************************************************************************
log()
-
+
Log the message.
******************************************************************************/
void log(char *format, ...)
{
va_list ap;
-
+
va_start(ap, format);
vlog(format, ap);
-
+
va_end(ap);
}
/******************************************************************************
start_defaults()
-
+
Start setting the defaults.
******************************************************************************/
@@ -159,30 +159,30 @@ void start_defaults(int argc, char *argv[])
{
struct stat buf;
int i;
-
+
// default options
- static char *default_options[] =
+ static char *default_options[]=
{
- "--no-defaults",
- "--defaults-file=",
- "--defaults-extra-file=",
- NULL
+ "--no-defaults",
+ "--defaults-file=",
+ "--defaults-extra-file=",
+ NULL
};
-
+
// autoclose
- autoclose = FALSE;
-
+ autoclose= FALSE;
+
// basedir
get_basedir(argv[0], basedir);
-
+
// check-tables
- checktables = FALSE;
-
+ checktables= FALSE;
+
// hostname
- if (gethostname(hostname,PATH_MAX) < 0)
+ if (gethostname(hostname, PATH_MAX) < 0)
{
// default
- strcpy(hostname,"mysql");
+ strcpy(hostname, "mysql");
}
// address
@@ -190,30 +190,30 @@ void start_defaults(int argc, char *argv[])
// port
snprintf(port, PATH_MAX, "3306");
-
+
// default option
- default_option[0] = NULL;
- for (i=0; (argc > 1) && default_options[i]; i++)
- {
- if(!strnicmp(argv[1], default_options[i], strlen(default_options[i])))
- {
- strncpy(default_option, argv[1], PATH_MAX);
- break;
- }
- }
-
+ default_option[0]= NULL;
+ for (i= 0; (argc > 1) && default_options[i]; i++)
+ {
+ if (!strnicmp(argv[1], default_options[i], strlen(default_options[i])))
+ {
+ strncpy(default_option, argv[1], PATH_MAX);
+ break;
+ }
+ }
+
// set after basedir is established
- datadir[0] = NULL;
- pid_file[0] = NULL;
- err_log[0] = NULL;
- safe_log[0] = NULL;
- mysqld[0] = NULL;
+ datadir[0]= NULL;
+ pid_file[0]= NULL;
+ err_log[0]= NULL;
+ safe_log[0]= NULL;
+ mysqld[0]= NULL;
}
/******************************************************************************
finish_defaults()
-
+
Finish settig the defaults.
******************************************************************************/
@@ -221,22 +221,27 @@ void finish_defaults()
{
struct stat buf;
int i;
-
+
// datadir
- if (!datadir[0]) snprintf(datadir, PATH_MAX, "%s/data", basedir);
-
+ if (!datadir[0])
+ snprintf(datadir, PATH_MAX, "%s/data", basedir);
+
// pid-file
- if (!pid_file[0]) snprintf(pid_file, PATH_MAX, "%s/%s.pid", datadir, hostname);
-
+ if (!pid_file[0])
+ snprintf(pid_file, PATH_MAX, "%s/%s.pid", datadir, hostname);
+
// err-log
- if (!err_log[0]) snprintf(err_log, PATH_MAX, "%s/%s.err", datadir, hostname);
+ if (!err_log[0])
+ snprintf(err_log, PATH_MAX, "%s/%s.err", datadir, hostname);
// safe-log
- if (!safe_log[0]) snprintf(safe_log, PATH_MAX, "%s/%s.safe", datadir, hostname);
+ if (!safe_log[0])
+ snprintf(safe_log, PATH_MAX, "%s/%s.safe", datadir, hostname);
// mysqld
- if (!mysqld[0]) snprintf(mysqld, PATH_MAX, "%s/bin/mysqld-max", basedir);
-
+ if (!mysqld[0])
+ snprintf(mysqld, PATH_MAX, "%s/bin/mysqld-max", basedir);
+
if (stat(mysqld, &buf))
{
snprintf(mysqld, PATH_MAX, "%s/bin/mysqld", basedir);
@@ -246,7 +251,7 @@ void finish_defaults()
/******************************************************************************
read_defaults()
-
+
Read the defaults.
******************************************************************************/
@@ -257,64 +262,66 @@ void read_defaults(arg_list_t *pal)
char mydefaults[PATH_MAX];
char line[PATH_MAX];
FILE *fp;
-
- // defaults output file
- snprintf(defaults_file, PATH_MAX, "%s/bin/defaults.out", basedir);
- remove(defaults_file);
- // mysqladmin file
+ // defaults output file
+ snprintf(defaults_file, PATH_MAX, "%s/bin/defaults.out", basedir);
+ remove(defaults_file);
+
+ // mysqladmin file
snprintf(mydefaults, PATH_MAX, "%s/bin/my_print_defaults", basedir);
-
+
// args
init_args(&al);
add_arg(&al, mydefaults);
- if (default_option[0]) add_arg(&al, default_option);
+ if (default_option[0])
+ add_arg(&al, default_option);
add_arg(&al, "mysqld");
add_arg(&al, "server");
add_arg(&al, "mysqld_safe");
add_arg(&al, "safe_mysqld");
- spawn(mydefaults, &al, TRUE, NULL, defaults_file, NULL);
+ spawn(mydefaults, &al, TRUE, NULL, defaults_file, NULL);
free_args(&al);
- // gather defaults
- if((fp = fopen(defaults_file, "r")) != NULL)
- {
- while(fgets(line, PATH_MAX, fp))
- {
+ // gather defaults
+ if ((fp= fopen(defaults_file, "r")) != NULL)
+ {
+ while (fgets(line, PATH_MAX, fp))
+ {
char *p;
-
+
// remove end-of-line character
- if ((p = strrchr(line, '\n')) != NULL) *p = '\0';
-
+ if ((p= strrchr(line, '\n')) != NULL)
+ *p= '\0';
+
// add the option as an argument
- add_arg(pal, line);
- }
-
- fclose(fp);
- }
-
- // remove file
- remove(defaults_file);
+ add_arg(pal, line);
+ }
+
+ fclose(fp);
+ }
+
+ // remove file
+ remove(defaults_file);
}
/******************************************************************************
parse_args()
-
+
Get the options.
******************************************************************************/
void parse_args(int argc, char *argv[])
{
- int index = 0;
+ int index= 0;
int c;
-
+
// parse options
enum opts
{
- OPT_BASEDIR = 0xFF,
+ OPT_BASEDIR= 0xFF,
OPT_DATADIR,
OPT_PID_FILE,
OPT_BIND_ADDRESS,
@@ -325,65 +332,64 @@ void parse_args(int argc, char *argv[])
OPT_HELP,
OPT_SETVAR
};
-
- static struct option options[] =
+
+ static struct option options[]=
{
- {"autoclose", no_argument, &autoclose, TRUE},
- {"basedir", required_argument, 0, OPT_BASEDIR},
- {"check-tables", no_argument, &checktables, TRUE},
- {"datadir", required_argument, 0, OPT_DATADIR},
- {"pid-file", required_argument, 0, OPT_PID_FILE},
- {"bind-address", required_argument, 0, OPT_BIND_ADDRESS},
- {"port", required_argument, 0, OPT_PORT},
- {"err-log", required_argument, 0, OPT_ERR_LOG},
- {"safe-log", required_argument, 0, OPT_SAFE_LOG},
- {"mysqld", required_argument, 0, OPT_MYSQLD},
- {"help", no_argument, 0, OPT_HELP},
- {"set-variable", required_argument, 0, OPT_SETVAR},
- {0, 0, 0, 0}
+ {"autoclose", no_argument, &autoclose, TRUE},
+ {"basedir", required_argument, 0, OPT_BASEDIR},
+ {"check-tables", no_argument, &checktables, TRUE},
+ {"datadir", required_argument, 0, OPT_DATADIR},
+ {"pid-file", required_argument, 0, OPT_PID_FILE},
+ {"bind-address", required_argument, 0, OPT_BIND_ADDRESS},
+ {"port", required_argument, 0, OPT_PORT},
+ {"err-log", required_argument, 0, OPT_ERR_LOG},
+ {"safe-log", required_argument, 0, OPT_SAFE_LOG},
+ {"mysqld", required_argument, 0, OPT_MYSQLD},
+ {"help", no_argument, 0, OPT_HELP},
+ {"set-variable", required_argument, 0, OPT_SETVAR},
+ {0, 0, 0, 0}
};
-
+
// we have to reset getopt_long because we use it multiple times
- optind = 1;
-
+ optind= 1;
+
// turn off error reporting
- opterr = 0;
-
- while ((c = getopt_long(argc, argv, "b:h:P:", options, &index)) >= 0)
+ opterr= 0;
+
+ while ((c= getopt_long(argc, argv, "b:h:P:", options, &index)) >= 0)
{
- switch (c)
- {
+ switch (c) {
case OPT_BASEDIR:
case 'b':
strcpy(basedir, optarg);
break;
-
+
case OPT_DATADIR:
case 'h':
strcpy(datadir, optarg);
break;
-
+
case OPT_PID_FILE:
strcpy(pid_file, optarg);
break;
-
+
case OPT_BIND_ADDRESS:
strcpy(address, optarg);
break;
-
+
case OPT_PORT:
case 'P':
strcpy(port, optarg);
break;
-
+
case OPT_ERR_LOG:
strcpy(err_log, optarg);
break;
-
+
case OPT_SAFE_LOG:
strcpy(safe_log, optarg);
break;
-
+
case OPT_MYSQLD:
strcpy(mysqld, optarg);
break;
@@ -391,11 +397,11 @@ void parse_args(int argc, char *argv[])
case OPT_SETVAR:
parse_setvar(optarg);
break;
-
+
case OPT_HELP:
usage();
break;
-
+
default:
// ignore
break;
@@ -410,14 +416,15 @@ void parse_args(int argc, char *argv[])
void parse_setvar(char *arg)
{
char *pos;
-
+
if ((pos= strindex(arg, "port")))
{
- for (; *pos && *pos != '='; pos++) ;
+ for (; *pos && *pos != '='; pos++);
if (*pos)
strcpy(port, pos + 1);
}
}
+
/******************************************************************************
@@ -425,14 +432,14 @@ void parse_setvar(char *arg)
/******************************************************************************
get_options()
-
+
Get the options.
******************************************************************************/
void get_options(int argc, char *argv[])
{
arg_list_t al;
-
+
// start defaults
start_defaults(argc, argv);
@@ -442,10 +449,10 @@ void get_options(int argc, char *argv[])
read_defaults(&al);
parse_args(al.argc, al.argv);
free_args(&al);
-
+
// command-line arguments
parse_args(argc, argv);
-
+
// finish defaults
finish_defaults();
}
@@ -453,7 +460,7 @@ void get_options(int argc, char *argv[])
/******************************************************************************
check_data_vol()
-
+
Check the database volume.
******************************************************************************/
@@ -463,23 +470,23 @@ void check_data_vol()
struct volume_info vol;
char buff[PATH_MAX];
char *p;
-
+
// clear struct
memset(&vol, 0, sizeof(vol));
-
+
// find volume name
strcpy(buff, datadir);
- if (p = strchr(buff, ':'))
+ if (p= strchr(buff, ':'))
{
// terminate after volume name
- *p = 0;
+ *p= 0;
}
else
{
// assume SYS volume
strcpy(buff, "SYS");
}
-
+
// retrieve information
netware_vol_info_from_name(&vol, buff);
@@ -493,25 +500,25 @@ void check_data_vol()
/******************************************************************************
check_setup()
-
+
Check the current setup.
******************************************************************************/
void check_setup()
{
- struct stat info;
+ struct stat info;
char temp[PATH_MAX];
-
+
// remove any current pid_file
- if (!stat(pid_file, &info) && (remove(pid_file) < 0))
- {
+ if (!stat(pid_file, &info) && (remove(pid_file) < 0))
+ {
log("ERROR: Unable to remove current pid file!\n\n");
exit(-1);
- }
-
- // check the data volume
+ }
+
+ // check the data volume
check_data_vol();
-
+
// check for a database
snprintf(temp, PATH_MAX, "%s/mysql/host.frm", datadir);
if (stat(temp, &info))
@@ -524,7 +531,7 @@ void check_setup()
/******************************************************************************
check_tables()
-
+
Check the database tables.
******************************************************************************/
@@ -532,21 +539,21 @@ void check_tables()
{
arg_list_t al;
char mycheck[PATH_MAX];
- char table[PATH_MAX];
- char db[PATH_MAX];
- DIR *datadir_entry, *db_entry, *table_entry;
-
- // status
+ char table[PATH_MAX];
+ char db[PATH_MAX];
+ DIR *datadir_entry, *db_entry, *table_entry;
+
+ // status
log("checking tables...\n");
-
+
// list databases
- if ((datadir_entry = opendir(datadir)) == NULL)
- {
- return;
- }
+ if ((datadir_entry= opendir(datadir)) == NULL)
+ {
+ return;
+ }
- while((db_entry = readdir(datadir_entry)) != NULL)
- {
+ while ((db_entry= readdir(datadir_entry)) != NULL)
+ {
if (db_entry->d_name[0] == '.')
{
// Skip
@@ -555,71 +562,71 @@ void check_tables()
{
// create long db name
snprintf(db, PATH_MAX, "%s/%s", datadir, db_entry->d_name);
-
+
// list tables
- if ((db_entry = opendir(db)) == NULL)
+ if ((db_entry= opendir(db)) == NULL)
{
- continue;
+ continue;
}
-
- while((table_entry = readdir(db_entry)) != NULL)
+
+ while ((table_entry= readdir(db_entry)) != NULL)
{
- // create long table name
- snprintf(table, PATH_MAX, "%s/%s", db, strlwr(table_entry->d_name));
-
- if (strindex(table, ".myi"))
- {
- // ** myisamchk
-
- // mysqladmin file
- snprintf(mycheck, PATH_MAX, "%s/bin/myisamchk", basedir);
-
- // args
- init_args(&al);
- add_arg(&al, mycheck);
- add_arg(&al, "--silent");
- add_arg(&al, "--force");
- add_arg(&al, "--fast");
- add_arg(&al, "--medium-check");
- add_arg(&al, "-O");
- add_arg(&al, "key_buffer=64M");
- add_arg(&al, "-O");
- add_arg(&al, "sort_buffer=64M");
- add_arg(&al, table);
-
- spawn(mycheck, &al, TRUE, NULL, NULL, NULL);
-
- free_args(&al);
- }
- else if (strindex(table, ".ism"))
- {
- // ** isamchk
-
- // mysqladmin file
- snprintf(mycheck, PATH_MAX, "%s/bin/isamchk", basedir);
-
- // args
- init_args(&al);
- add_arg(&al, mycheck);
- add_arg(&al, "--silent");
- add_arg(&al, "--force");
- add_arg(&al, "-O");
- add_arg(&al, "sort_buffer=64M");
- add_arg(&al, table);
-
- spawn(mycheck, &al, TRUE, NULL, NULL, NULL);
-
- free_args(&al);
- }
+ // create long table name
+ snprintf(table, PATH_MAX, "%s/%s", db, strlwr(table_entry->d_name));
+
+ if (strindex(table, ".myi"))
+ {
+ // ** myisamchk
+
+ // mysqladmin file
+ snprintf(mycheck, PATH_MAX, "%s/bin/myisamchk", basedir);
+
+ // args
+ init_args(&al);
+ add_arg(&al, mycheck);
+ add_arg(&al, "--silent");
+ add_arg(&al, "--force");
+ add_arg(&al, "--fast");
+ add_arg(&al, "--medium-check");
+ add_arg(&al, "-O");
+ add_arg(&al, "key_buffer=64M");
+ add_arg(&al, "-O");
+ add_arg(&al, "sort_buffer=64M");
+ add_arg(&al, table);
+
+ spawn(mycheck, &al, TRUE, NULL, NULL, NULL);
+
+ free_args(&al);
+ }
+ else if (strindex(table, ".ism"))
+ {
+ // ** isamchk
+
+ // mysqladmin file
+ snprintf(mycheck, PATH_MAX, "%s/bin/isamchk", basedir);
+
+ // args
+ init_args(&al);
+ add_arg(&al, mycheck);
+ add_arg(&al, "--silent");
+ add_arg(&al, "--force");
+ add_arg(&al, "-O");
+ add_arg(&al, "sort_buffer=64M");
+ add_arg(&al, table);
+
+ spawn(mycheck, &al, TRUE, NULL, NULL, NULL);
+
+ free_args(&al);
+ }
}
}
- }
+ }
}
/******************************************************************************
mysql_start()
-
+
Start the mysql server.
******************************************************************************/
@@ -632,9 +639,9 @@ void mysql_start(int argc, char *argv[])
struct tm lt;
char stamp[PATH_MAX];
char skip;
-
+
// private options
- static char *private_options[] =
+ static char *private_options[]=
{
"--autoclose",
"--check-tables",
@@ -643,56 +650,57 @@ void mysql_start(int argc, char *argv[])
"--mysqld=",
NULL
};
-
+
// args
init_args(&al);
add_arg(&al, "%s", mysqld);
-
+
// parent args
- for(i = 1; i < argc; i++)
+ for (i= 1; i < argc; i++)
{
- skip = FALSE;
-
+ skip= FALSE;
+
// skip private arguments
- for (j=0; private_options[j]; j++)
+ for (j= 0; private_options[j]; j++)
{
- if(!strnicmp(argv[i], private_options[j], strlen(private_options[j])))
+ if (!strnicmp(argv[i], private_options[j], strlen(private_options[j])))
{
- skip = TRUE;
- consoleprintf("The argument skipped is %s\n",argv[i]);
- break;
+ skip= TRUE;
+ consoleprintf("The argument skipped is %s\n", argv[i]);
+ break;
}
}
-
+
if (!skip)
{
add_arg(&al, "%s", argv[i]);
- consoleprintf("The final argument is %s\n",argv[i]);
+ consoleprintf("The final argument is %s\n", argv[i]);
}
}
// spawn
do
{
// check the database tables
- if (checktables) check_tables();
-
+ if (checktables)
+ check_tables();
+
// status
time(&cal);
localtime_r(&cal, &lt);
strftime(stamp, PATH_MAX, "%d %b %Y %H:%M:%S", &lt);
log("mysql started : %s\n", stamp);
-
+
// spawn mysqld
spawn(mysqld, &al, TRUE, NULL, NULL, err_log);
}
while (!stat(pid_file, &info));
-
+
// status
time(&cal);
localtime_r(&cal, &lt);
strftime(stamp, PATH_MAX, "%d %b %Y %H:%M:%S", &lt);
log("mysql stopped : %s\n\n", stamp);
-
+
// free args
free_args(&al);
}
@@ -700,43 +708,45 @@ void mysql_start(int argc, char *argv[])
/******************************************************************************
main()
-
+
******************************************************************************/
int main(int argc, char **argv)
{
- char temp[PATH_MAX];
-
+ char temp[PATH_MAX];
+
// get the options
- get_options(argc, argv);
+ get_options(argc, argv);
// keep the screen up
- if (!autoclose) setscreenmode(SCR_NO_MODE);
-
+ if (!autoclose)
+ setscreenmode(SCR_NO_MODE);
+
// create log file
- log_fd = fopen(safe_log, "w+");
-
+ log_fd= fopen(safe_log, "w+");
+
// header
log("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE);
-
- // status
- log("address : %s\n", address);
- log("port : %s\n", port);
+
+ // status
+ log("address : %s\n", address);
+ log("port : %s\n", port);
log("daemon : %s\n", mysqld);
- log("base directory : %s\n", basedir);
- log("data directory : %s\n", datadir);
- log("pid file : %s\n", pid_file);
- log("error file : %s\n", err_log);
- log("log file : %s\n", safe_log);
+ log("base directory : %s\n", basedir);
+ log("data directory : %s\n", datadir);
+ log("pid file : %s\n", pid_file);
+ log("error file : %s\n", err_log);
+ log("log file : %s\n", safe_log);
log("\n");
-
+
// check setup
check_setup();
-
+
// start the MySQL server
- mysql_start(argc, argv);
-
- // close log file
- if (log_fd) fclose(log_fd);
-
+ mysql_start(argc, argv);
+
+ // close log file
+ if (log_fd)
+ fclose(log_fd);
+
return 0;
}
diff --git a/sql-common/client.c b/sql-common/client.c
index 61ffd2b52e6..5c1a718c5bb 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -1732,7 +1732,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, tmp_errno);
goto error;
}
- memcpy(&sock_addr.sin_addr,hp->h_addr, (size_t) hp->h_length);
+ memcpy(&sock_addr.sin_addr, hp->h_addr,
+ min(sizeof(sock_addr.sin_addr), (size_t) hp->h_length));
my_gethostbyname_r_free();
}
sock_addr.sin_port = (ushort) htons((ushort) port);
diff --git a/sql/field.cc b/sql/field.cc
index 2077a6e5455..bc76d05a05b 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -3395,10 +3395,21 @@ String *Field_time::val_str(String *val_buffer,
}
-bool Field_time::get_date(TIME *ltime,
- bool fuzzydate __attribute__((unused)))
+/*
+ Normally we would not consider 'time' as a vaild date, but we allow
+ get_date() here to be able to do things like
+ DATE_FORMAT(time, "%l.%i %p")
+*/
+
+bool Field_time::get_date(TIME *ltime, uint fuzzydate)
{
- long tmp=(long) sint3korr(ptr);
+ long tmp;
+ if (!fuzzydate)
+ {
+ set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE);
+ return 1;
+ }
+ tmp=(long) sint3korr(ptr);
ltime->neg=0;
if (tmp < 0)
{
diff --git a/sql/field.h b/sql/field.h
index f4c8c5a9955..c17b11f99e6 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -800,7 +800,7 @@ public:
double val_real(void);
longlong val_int(void);
String *val_str(String*,String *);
- bool get_date(TIME *ltime,bool fuzzydate);
+ bool get_date(TIME *ltime, uint fuzzydate);
bool send_binary(Protocol *protocol);
bool get_time(TIME *ltime);
int cmp(const char *,const char*);
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index a0f7a779894..c2da47b480e 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -284,7 +284,9 @@ my_net_write(NET *net,const char *packet,ulong len)
buff[3]= (uchar) net->pkt_nr++;
if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE))
return 1;
+#ifndef DEBUG_DATA_PACKETS
DBUG_DUMP("packet_header",(char*) buff,NET_HEADER_SIZE);
+#endif
return test(net_write_buff(net,packet,len));
}
@@ -394,6 +396,9 @@ net_write_buff(NET *net,const char *packet,ulong len)
else
left_length= (ulong) (net->buff_end - net->write_pos);
+#ifdef DEBUG_DATA_PACKETS
+ DBUG_DUMP("data", packet, len);
+#endif
if (len > left_length)
{
if (net->write_pos != net->buff)
@@ -776,6 +781,8 @@ my_real_read(NET *net, ulong *complen)
if (i == 0)
{ /* First parts is packet length */
ulong helping;
+ DBUG_DUMP("packet_header",(char*) net->buff+net->where_b,
+ NET_HEADER_SIZE);
if (net->buff[net->where_b + 3] != (uchar) net->pkt_nr)
{
if (net->buff[net->where_b] != (uchar) 255)
@@ -784,7 +791,6 @@ my_real_read(NET *net, ulong *complen)
("Packets out of order (Found: %d, expected %u)",
(int) net->buff[net->where_b + 3],
net->pkt_nr));
- DBUG_DUMP("packet_header",(char*) net->buff+net->where_b, 4);
#ifdef EXTRA_DEBUG
fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",
(int) net->buff[net->where_b + 3],
@@ -841,6 +847,10 @@ end:
vio_blocking(net->vio, net_blocking, &old_mode);
}
net->reading_or_writing=0;
+#ifdef DEBUG_DATA_PACKETS
+ if (len != packet_error)
+ DBUG_DUMP("data",(char*) net->buff+net->where_b, len);
+#endif
return(len);
}
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 704662fa4bf..7d0e0c3f78f 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -162,7 +162,8 @@ THD::THD():user_time(0), current_statement(0), is_fatal_error(0),
{
host= user= priv_user= db= ip=0;
host_or_ip= "connecting host";
- locked=killed=some_tables_deleted=no_errors=password= 0;
+ locked=some_tables_deleted=no_errors=password= 0;
+ killed=0;
query_start_used= 0;
count_cuted_fields= CHECK_FIELD_IGNORE;
db_length= col_access= 0;
diff --git a/sql/table.cc b/sql/table.cc
index 73f036aed87..e053eba7b6c 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1134,7 +1134,7 @@ File create_frm(register my_string name, uint reclength, uchar *fileinfo,
char fill[IO_SIZE];
#if SIZEOF_OFF_T > 4
- /* Fix this in MySQL 4.0; The current limit is 4G rows (QQ) */
+ /* Fix this when we have new .frm files; Current limit is 4G rows (QQ) */
if (create_info->max_rows > ~(ulong) 0)
create_info->max_rows= ~(ulong) 0;
if (create_info->min_rows > ~(ulong) 0)