summaryrefslogtreecommitdiff
path: root/sql/mysqld.cc
diff options
context:
space:
mode:
authorunknown <monty@narttu.mysql.fi>2003-11-03 14:01:59 +0200
committerunknown <monty@narttu.mysql.fi>2003-11-03 14:01:59 +0200
commitbee5d9d4627a3b6d09430015357487c1c6c94bca (patch)
treef9406690fb9f579e21f4877826d439fb785d6902 /sql/mysqld.cc
parentdd85b7602660a400f71d16d00bb8c869d4320c7a (diff)
downloadmariadb-git-bee5d9d4627a3b6d09430015357487c1c6c94bca.tar.gz
Simplified 'wrong xxx name' error messages by introducing 'general' ER_WRONG_NAME error
Cleaned up (and disabled part of) date/time/datetime format patch. One can't anymore change default read/write date/time/formats. This is becasue the non standard datetime formats can't be compared as strings and MySQL does still a lot of datetime comparisons as strings Changed flag argument to str_to_TIME() and get_date() from bool to uint Removed THD from str_to_xxxx functions and Item class. Fixed core dump when doing --print-defaults Move some common string functions to strfunc.cc Dates as strings are now of type my_charset_bin instead of default_charset() Introduce IDENT_QUOTED to not have to create an extra copy of simple identifiers (all chars < 128) Removed xxx_FORMAT_TYPE enums and replaced them with the old TIMESTAMP_xxx enums Renamed some TIMESTAMP_xxx enums to more appropriate names Use defines instead of integers for date/time/datetime string lengths Added to build system and use the new my_strtoll10() function. BUILD/compile-pentium-valgrind-max: Remove double printing of warning VC++Files/libmysqld/libmysqld.dsp: Added strfunc.cc VC++Files/sql/mysqld.dsp: Added strfunc.cc VC++Files/sql/mysqldmax.dsp: Added strfunc.cc VC++Files/strings/strings.dsp: added my_strtoll10.c include/m_ctype.h: Removed MY_LEX_FOUND_IDENT (not used) include/m_string.h: Added my_strtoll10() include/mysqld_error.h: simplified 'wrong xxx name' error messages include/sql_state.h: simplified 'wrong xxx name' error messages libmysqld/Makefile.am: Added strfunc.cc mysql-test/mysql-test-run.sh: Simplified some options changed $@ to "$@" in an attempt to handle options with space (Didn't succeed; Problem will disappear when mysql-test-run is rewritten in C) mysql-test/r/ctype_latin1_de.result: Added new tests mysql-test/r/ctype_recoding.result: Extended tests mysql-test/r/date_formats.result: Cleaned up tests Disabled some tests that can't yet be run mysql-test/r/func_compress.result: New error message mysql-test/r/rpl_temporary.result: Added new test mysql-test/t/create.test: Changed error numbers mysql-test/t/ctype_latin1_de.test: New tests mysql-test/t/ctype_recoding.test: Extended tests mysql-test/t/date_formats-master.opt: Removed datetime_format as we can't handle options with space in mysql-test-run mysql-test/t/date_formats.test: Cleaned up tests Disabled some tests that can't yet be run mysql-test/t/rpl_temporary.test: Added testing of open temporary table on slave shutdown mysql-test/t/symlink.test: Fixed error numbers mysys/default.c: Fixed core dump when doing --print-defaults sql/Makefile.am: Added strfunc.cc sql/derror.cc: Fixed compiler warning sql/field.cc: Changed argument to str_to_TIME() from bool to uint Removed THD argument from str_to_TIME() Moved find_enum() and find_set() to strfunc.cc sql/field.h: Changed type of last argument to get_date() to be able to handle more options sql/init.cc: Remove not used variable dayord sql/item.cc: Changed type of last argument to get_date() to be able to handle more options Removed THD* element from item. Don't use make_date_time() to generate date/time/datetimes sql/item.h: Changed type of last argument to get_date() to be able to handle more options Removed THD* from Item sql/item_create.cc: Indentation cleanup sql/item_func.cc: Use new find_type() sql/item_func.h: Changed type of last argument to get_date() to be able to handle more options sql/item_strfunc.h: space change sql/item_timefunc.cc: Changed month_names[] to be easier to use Moved check_names[] to strfunc.cc Added back old make_datetime() function Optimized extract_date_time() Use my_strtoll10() insetad of my_strntoll() Optimized make_date_time() Replaced short variable names with long ones. Use new functions make_time(), make_date() and make_datetime() Dates as strings are now of type my_charset_bin instead of default_charset() Changed Item_func_str_to_date() to by default return a date. sql/item_timefunc.h: Changed charset for date string from default_charset() to my_charset_bin Changed type of last argument to get_date() to be able to handle more options Use defines instead of integers for date/time/datetime string lengths sql/mysql_priv.h: Fixed/added new prototypes sql/mysqld.cc: Removed opt_datetime_format_names Cleaned up handling of date_time format handling. (Fixed core dump when mysqld had error on startup) Removed some unnecessary double init of collation variables sql/protocol.cc: Changed back protocol functions to always return dates in ISO format sql/set_var.cc: Added variables time_format, date_format and datetime_format This had to be recoded becasue checking was done in 'update' method and not in 'check' method. sql/set_var.h: Removed class sys_var_datetime_format() as this defined a variable (which doesn't work) instead of updating a variable sql/share/czech/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/danish/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/dutch/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/english/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/estonian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/french/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/german/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/greek/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/hungarian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/italian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/japanese/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/korean/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/norwegian-ny/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/norwegian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/polish/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/portuguese/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/romanian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/russian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/serbian/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/slovak/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/spanish/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/swedish/errmsg.txt: simplified 'wrong xxx name' error messages sql/share/ukrainian/errmsg.txt: simplified 'wrong xxx name' error messages sql/sql_base.cc: Use new find_type() sql/sql_class.cc: Allocate/free date_time format variables sql/sql_class.h: Define datetime_format variables sql/sql_db.cc: Use new ER_WRONG_NAME error sql/sql_lex.cc: Change lex to generate IDENT_QUOTED for quoted identifiers or identifers that are using characters > 128. This enabled us to not have to copy and convert the identifier to utf8 for simpe identifiers sql/sql_parse.cc: Use new ER_WRONG_NAME error Use new find_type() function sql/sql_prepare.cc: Use new defines sql/sql_table.cc: Use new ER_WRONG_NAME error sql/sql_yacc.yy: Don't copy and convert simple identifiers to utf8. Replace __FORMAT_TYPE defines with TIMESTAMP... defines sql/structs.h: Renamed DATETIME_FORMAT to DATE_TIME format to indicate that it's for date/time/datetime formats Renamed WRONT_TIMESTAMP_FULL to TIMESTAMP_DATETIME_ERROR and TIMESTAMP_FULL to TIMESTAMP_DATETIME Added KNOWN_DATE_TIME_FORMAT struct for Item_func_get_format sql/time.cc: Prepare str_to_TIME and str_to_time() for general date/time handling Removed THD from str_to... functions Renamed date/time/datetime functions to use 'date_time' instead of 'datetime' Added functions to make and copy DATE_TIME_FORMAT's Added trivial functions 'make_time()', 'make_date()' and 'make_datetime()' strings/Makefile.am: Added my_strtoll10() strings/ctype-bin.c: Cleared upper part of binary state map to be able to easily identify simple identifiers strings/my_vsnprintf.c: F
Diffstat (limited to 'sql/mysqld.cc')
-rw-r--r--sql/mysqld.cc127
1 files changed, 68 insertions, 59 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index da7d3df0251..adbfcdfcb1a 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -320,10 +320,7 @@ char mysql_real_data_home[FN_REFLEN],
language[LIBLEN],reg_ext[FN_EXTLEN], mysql_charsets_dir[FN_REFLEN],
max_sort_char,*mysqld_user,*mysqld_chroot, *opt_init_file;
-const char *opt_datetime_formats[3];
-const char *opt_datetime_format_names[3]= {"date_format",
- "time_format",
- "datetime_format"};
+const char *opt_date_time_formats[3];
char *language_ptr, *default_collation_name, *default_character_set_name;
char mysql_data_home_buff[2], *mysql_data_home=mysql_real_data_home;
@@ -351,7 +348,6 @@ struct system_variables global_system_variables;
struct system_variables max_system_variables;
MY_TMPDIR mysql_tmpdir_list;
-DATE_FORMAT dayord;
MY_BITMAP temp_pool;
CHARSET_INFO *system_charset_info, *files_charset_info ;
@@ -912,9 +908,12 @@ void clean_up(bool print_message)
#ifdef USE_RAID
end_raid();
#endif
- g_datetime_frm(DATE_FORMAT_TYPE).clean();
- g_datetime_frm(TIME_FORMAT_TYPE).clean();
- g_datetime_frm(DATETIME_FORMAT_TYPE).clean();
+ my_free((char*) global_system_variables.date_format,
+ MYF(MY_ALLOW_ZERO_PTR));
+ my_free((char*) global_system_variables.time_format,
+ MYF(MY_ALLOW_ZERO_PTR));
+ my_free((char*) global_system_variables.datetime_format,
+ MYF(MY_ALLOW_ZERO_PTR));
if (defaults_argv)
free_defaults(defaults_argv);
free_tmpdir(&mysql_tmpdir_list);
@@ -2008,33 +2007,46 @@ bool open_log(MYSQL_LOG *log, const char *hostname,
}
-int init_global_datetime_format(datetime_format_types format_type, bool is_alloc)
+/*
+ Initialize one of the global date/time format variables
+
+ SYNOPSIS
+ init_global_datetime_format()
+ format_type What kind of format should be supported
+ var_ptr Pointer to variable that should be updated
+
+ NOTES
+ The default value is taken from either opt_date_time_formats[] or
+ the ISO format (ANSI SQL)
+
+ RETURN
+ 0 ok
+ 1 error
+*/
+
+bool init_global_datetime_format(timestamp_type format_type,
+ DATE_TIME_FORMAT **var_ptr)
{
- const char *format_str= opt_datetime_formats[format_type];
- uint format_length= 0;
- DATETIME_FORMAT *tmp_format= &g_datetime_frm(format_type).datetime_format;
+ /* Get command line option */
+ const char *str= opt_date_time_formats[format_type];
+ DATE_TIME_FORMAT *format;
- if (format_str)
- {
- format_str= opt_datetime_formats[format_type];
- format_length= strlen(format_str);
- }
- else
+ if (!str) // No specified format
{
- format_str= datetime_formats[format_type][ISO_FORMAT];
- format_length= strlen(datetime_formats[format_type][ISO_FORMAT]);
- opt_datetime_formats[format_type]= format_str;
+ str= get_date_time_format_str(&known_date_time_formats[ISO_FORMAT],
+ format_type);
+ /*
+ Set the "command line" option to point to the generated string so
+ that we can set global formats back to default
+ */
+ opt_date_time_formats[format_type]= str;
}
- if (make_format(tmp_format, format_type, format_str,
- format_length, is_alloc))
+ if (!(*var_ptr= date_time_format_make(format_type, str, strlen(str))))
{
- g_datetime_frm(format_type).name= opt_datetime_format_names[format_type];
- g_datetime_frm(format_type).name_length=
- strlen(opt_datetime_format_names[format_type]);
- g_datetime_frm(format_type).format_type= format_type;
- return 0;
+ fprintf(stderr, "Wrong date/time format specifier: %s\n", str);
+ return 1;
}
- return 1;
+ return 0;
}
@@ -2149,17 +2161,12 @@ static int init_common_variables(const char *conf_file_name, int argc,
}
default_charset_info= default_collation;
}
- global_system_variables.collation_server= default_charset_info;
- global_system_variables.collation_database= default_charset_info;
- global_system_variables.collation_connection= default_charset_info;
+ /* Set collactions that depends on the default collation */
+ global_system_variables.collation_server= default_charset_info;
+ global_system_variables.collation_database= default_charset_info;
+ global_system_variables.collation_connection= default_charset_info;
global_system_variables.character_set_results= default_charset_info;
- global_system_variables.character_set_client= default_charset_info;
- global_system_variables.collation_connection= default_charset_info;
-
- if (init_global_datetime_format(DATE_FORMAT_TYPE, 1) ||
- init_global_datetime_format(TIME_FORMAT_TYPE, 1) ||
- init_global_datetime_format(DATETIME_FORMAT_TYPE, 1))
- return 1;
+ global_system_variables.character_set_client= default_charset_info;
if (use_temp_pool && bitmap_init(&temp_pool,1024,1))
return 1;
@@ -4572,7 +4579,7 @@ The minimum value for this variable is 4096.",
(gptr*) &max_system_variables.net_wait_timeout, 0, GET_ULONG,
REQUIRED_ARG, NET_WAIT_TIMEOUT, 1, LONG_TIMEOUT, 0, 1, 0},
{"expire_logs_days", OPT_EXPIRE_LOGS_DAYS,
- "Logs will be rotated after expire-log-days days. ",
+ "Logs will be rotated after expire-log-days days ",
(gptr*) &expire_logs_days,
(gptr*) &expire_logs_days, 0, GET_ULONG,
REQUIRED_ARG, 0, 0, 99, 0, 1, 0},
@@ -4582,23 +4589,24 @@ The minimum value for this variable is 4096.",
(gptr*) &max_system_variables.default_week_format,
0, GET_ULONG, REQUIRED_ARG, 0, 0, 3L, 0, 1, 0},
{ "date-format", OPT_DATE_FORMAT,
- "The DATE format.",
- (gptr*) &opt_datetime_formats[DATE_FORMAT_TYPE],
- (gptr*) &opt_datetime_formats[DATE_FORMAT_TYPE],
+ "The DATE format (For future).",
+ (gptr*) &opt_date_time_formats[TIMESTAMP_DATE],
+ (gptr*) &opt_date_time_formats[TIMESTAMP_DATE],
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{ "datetime-format", OPT_DATETIME_FORMAT,
- "The DATETIME/TIMESTAMP format.",
- (gptr*) &opt_datetime_formats[DATETIME_FORMAT_TYPE],
- (gptr*) &opt_datetime_formats[DATETIME_FORMAT_TYPE],
+ "The DATETIME/TIMESTAMP format (for future).",
+ (gptr*) &opt_date_time_formats[TIMESTAMP_DATETIME],
+ (gptr*) &opt_date_time_formats[TIMESTAMP_DATETIME],
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{ "time-format", OPT_TIME_FORMAT,
- "The TIME format.",
- (gptr*) &opt_datetime_formats[TIME_FORMAT_TYPE],
- (gptr*) &opt_datetime_formats[TIME_FORMAT_TYPE],
+ "The TIME format (for future).",
+ (gptr*) &opt_date_time_formats[TIMESTAMP_TIME],
+ (gptr*) &opt_date_time_formats[TIMESTAMP_TIME],
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
+
struct show_var_st status_vars[]= {
{"Aborted_clients", (char*) &aborted_threads, SHOW_LONG},
{"Aborted_connects", (char*) &aborted_connects, SHOW_LONG},
@@ -4904,6 +4912,8 @@ static void mysql_init_variables(void)
national_charset_info= &my_charset_utf8_general_ci;
table_alias_charset= &my_charset_bin;
+ opt_date_time_formats[0]= opt_date_time_formats[1]= opt_date_time_formats[2]= 0;
+
/* Things with default values that are not zero */
delay_key_write_options= (uint) DELAY_KEY_WRITE_ON;
opt_specialflag= SPECIAL_ENGLISH;
@@ -4960,11 +4970,6 @@ static void mysql_init_variables(void)
/* Set default values for some option variables */
- global_system_variables.collation_server= default_charset_info;
- global_system_variables.collation_database= default_charset_info;
- global_system_variables.collation_connection= default_charset_info;
- global_system_variables.character_set_results= default_charset_info;
- global_system_variables.character_set_client= default_charset_info;
global_system_variables.table_type= DB_TYPE_MYISAM;
global_system_variables.tx_isolation= ISO_REPEATABLE_READ;
global_system_variables.select_limit= (ulonglong) HA_POS_ERROR;
@@ -4973,10 +4978,6 @@ static void mysql_init_variables(void)
max_system_variables.max_join_size= (ulonglong) HA_POS_ERROR;
global_system_variables.old_passwords= 0;
- init_global_datetime_format(DATE_FORMAT_TYPE, 0);
- init_global_datetime_format(TIME_FORMAT_TYPE, 0);
- init_global_datetime_format(DATETIME_FORMAT_TYPE, 0);
-
/* Variables that depends on compile options */
#ifndef DBUG_OFF
default_dbug_option=IF_WIN("d:t:i:O,\\mysqld.trace",
@@ -5578,7 +5579,7 @@ static void get_options(int argc,char **argv)
exit(ho_error);
if (argc > 0)
{
- fprintf(stderr, "%s: Too many arguments.\nUse --help to get a list of available options\n", my_progname);
+ fprintf(stderr, "%s: Too many arguments (first extra is '%s').\nUse --help to get a list of available options\n", my_progname, *argv);
exit(ho_error);
}
@@ -5639,6 +5640,14 @@ static void get_options(int argc,char **argv)
opt_specialflag|= SPECIAL_SHORT_LOG_FORMAT;
if (opt_log_queries_not_using_indexes)
opt_specialflag|= SPECIAL_LOG_QUERIES_NOT_USING_INDEXES;
+
+ if (init_global_datetime_format(TIMESTAMP_DATE,
+ &global_system_variables.date_format) ||
+ init_global_datetime_format(TIMESTAMP_TIME,
+ &global_system_variables.time_format) ||
+ init_global_datetime_format(TIMESTAMP_DATETIME,
+ &global_system_variables.datetime_format))
+ exit(1);
}