diff options
author | unknown <monty@mishka.local> | 2004-09-28 20:08:00 +0300 |
---|---|---|
committer | unknown <monty@mishka.local> | 2004-09-28 20:08:00 +0300 |
commit | 2a49121590930ad9ef69718caad67304e94b9c00 (patch) | |
tree | 7f0311baaca32e6242f23dcf0a89ed38e39c9ac0 /sql/item_timefunc.cc | |
parent | e74b00bbc98c1082086422dc9c8578dade9d4a11 (diff) | |
download | mariadb-git-2a49121590930ad9ef69718caad67304e94b9c00.tar.gz |
Strict mode & better warnings
Under strict mode MySQL will generate an error message if there was any conversion when assigning data to a field.
Added checking of date/datetime fields.
If strict mode, give error if we have not given value to field without a default value (for INSERT)
client/mysqltest.c:
Added --exit as an option to abort a test in a middle (good for debugging)
include/my_time.h:
Added flags to allow checking of dates in strict mode
include/mysql_com.h:
Added flag to check if field has a default value or not
include/mysqld_error.h:
New error messages for strict mode
include/sql_state.h:
Fixed SQL states (for strict mode tests)
mysql-test/r/auto_increment.result:
Updated error messages
mysql-test/r/func_sapdb.result:
Added test for ALLOW_INVALID_DATES
mysql-test/r/func_str.result:
Updated error messages
mysql-test/r/func_time.result:
Updated error messages
mysql-test/r/insert.result:
Updated error messages
mysql-test/r/loaddata.result:
Updated error messages
mysql-test/r/select.result:
Updated error messages
mysql-test/r/sp.result:
Updated error messages
mysql-test/r/timezone2.result:
Updated error messages
mysql-test/r/type_datetime.result:
Updated error messages
mysql-test/r/type_decimal.result:
Updated error messages
mysql-test/r/type_float.result:
Updated error messages
mysql-test/r/type_ranges.result:
Updated error messages
mysql-test/r/type_time.result:
Updated error messages
mysql-test/r/type_uint.result:
Updated error messages
mysql-test/r/warnings.result:
Updated error messages
mysql-test/t/func_sapdb.test:
Aded test
sql-common/my_time.c:
Added checking of dates
sql/field.cc:
Better error messages
Optimization of warning handling (by introducing of check_int())
Changed to use my_strtoll10()
sql/field.h:
Added check_int()
sql/item_func.cc:
Warnings when dividing by NULL
sql/item_func.h:
Warnings when dividing by NULL
sql/item_timefunc.cc:
Testing of date/datetime
Use macros instead of constants
sql/mysql_priv.h:
New modes (part of strict mode)
sql/mysqld.cc:
New modes (part of strict mode)
sql/opt_range.cc:
Simple optimizations
sql/protocol.cc:
Add note/warning level to find_handler()
sql/set_var.cc:
Added mode 'traditional'
sql/share/czech/errmsg.txt:
New error messages for strict mode
sql/share/danish/errmsg.txt:
New error messages for strict mode
sql/share/dutch/errmsg.txt:
New error messages for strict mode
sql/share/english/errmsg.txt:
New error messages for strict mode
sql/share/estonian/errmsg.txt:
New error messages for strict mode
sql/share/french/errmsg.txt:
New error messages for strict mode
sql/share/german/errmsg.txt:
New error messages for strict mode
sql/share/greek/errmsg.txt:
New error messages for strict mode
sql/share/hungarian/errmsg.txt:
New error messages for strict mode
sql/share/italian/errmsg.txt:
New error messages for strict mode
sql/share/japanese/errmsg.txt:
New error messages for strict mode
sql/share/korean/errmsg.txt:
New error messages for strict mode
sql/share/norwegian-ny/errmsg.txt:
New error messages for strict mode
sql/share/norwegian/errmsg.txt:
New error messages for strict mode
sql/share/polish/errmsg.txt:
New error messages for strict mode
sql/share/portuguese/errmsg.txt:
New error messages for strict mode
sql/share/romanian/errmsg.txt:
New error messages for strict mode
sql/share/russian/errmsg.txt:
New error messages for strict mode
sql/share/serbian/errmsg.txt:
New error messages for strict mode
sql/share/slovak/errmsg.txt:
New error messages for strict mode
sql/share/spanish/errmsg.txt:
New error messages for strict mode
sql/share/swedish/errmsg.txt:
New error messages for strict mode
sql/share/ukrainian/errmsg.txt:
New error messages for strict mode
sql/sp_rcontext.cc:
Add note/warning level to find_handler()
sql/sp_rcontext.h:
Add note/warning level to find_handler()
sql/sql_base.cc:
Fix bug for detecting crashed table
sql/sql_class.cc:
Variables for strct mode
sql/sql_class.h:
Variables for strct mode
sql/sql_error.cc:
In strict mode, convert warnings to errors
sql/sql_insert.cc:
Strict mode
If strict mode, give error if we have not given value to field without a default value
sql/sql_load.cc:
Strict mode
sql/sql_parse.cc:
Strict mode.
Add flag to field if it doesn't have a default value
sql/sql_select.cc:
Added comment
Prepare for upper level handling of table->status
sql/sql_union.cc:
Added THD to write_record()
sql/sql_update.cc:
Strict mode
sql/table.cc:
Handling of default values
sql/time.cc:
Checking of dates
Diffstat (limited to 'sql/item_timefunc.cc')
-rw-r--r-- | sql/item_timefunc.cc | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 3f8701a8d50..988529c845c 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -459,7 +459,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format, if (!my_isspace(&my_charset_latin1,*val)) { make_truncated_value_warning(current_thd, val_begin, length, - cached_timestamp_type); + cached_timestamp_type, NullS); break; } } while (++val != val_end); @@ -790,7 +790,7 @@ longlong Item_func_to_days::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - if (get_arg0_date(<ime,0)) + if (get_arg0_date(<ime, TIME_NO_ZERO_DATE)) return 0; return (longlong) calc_daynr(ltime.year,ltime.month,ltime.day); } @@ -799,7 +799,7 @@ longlong Item_func_dayofyear::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - if (get_arg0_date(<ime,0)) + if (get_arg0_date(<ime,TIME_NO_ZERO_DATE)) return 0; return (longlong) calc_daynr(ltime.year,ltime.month,ltime.day) - calc_daynr(ltime.year,1,1) + 1; @@ -809,7 +809,7 @@ longlong Item_func_dayofmonth::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - (void) get_arg0_date(<ime,1); + (void) get_arg0_date(<ime, TIME_FUZZY_DATE); return (longlong) ltime.day; } @@ -817,7 +817,7 @@ longlong Item_func_month::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - (void) get_arg0_date(<ime,1); + (void) get_arg0_date(<ime, TIME_FUZZY_DATE); return (longlong) ltime.month; } @@ -846,7 +846,7 @@ longlong Item_func_quarter::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - (void) get_arg0_date(<ime,1); + (void) get_arg0_date(<ime, TIME_FUZZY_DATE); return (longlong) ((ltime.month+2)/3); } @@ -918,7 +918,7 @@ longlong Item_func_week::val_int() DBUG_ASSERT(fixed == 1); uint year; TIME ltime; - if (get_arg0_date(<ime,0)) + if (get_arg0_date(<ime, TIME_NO_ZERO_DATE)) return 0; return (longlong) calc_week(<ime, week_mode((uint) args[1]->val_int()), @@ -931,7 +931,7 @@ longlong Item_func_yearweek::val_int() DBUG_ASSERT(fixed == 1); uint year,week; TIME ltime; - if (get_arg0_date(<ime,0)) + if (get_arg0_date(<ime, TIME_NO_ZERO_DATE)) return 0; week= calc_week(<ime, (week_mode((uint) args[1]->val_int()) | WEEK_YEAR), @@ -972,7 +972,7 @@ longlong Item_func_year::val_int() { DBUG_ASSERT(fixed == 1); TIME ltime; - (void) get_arg0_date(<ime,1); + (void) get_arg0_date(<ime, TIME_FUZZY_DATE); return (longlong) ltime.year; } @@ -1553,7 +1553,7 @@ String *Item_func_date_format::val_str(String *str) if (!is_time_format) { - if (get_arg0_date(&l_time,1)) + if (get_arg0_date(&l_time, TIME_FUZZY_DATE)) return 0; } else @@ -1715,7 +1715,7 @@ longlong Item_func_convert_tz::val_int() bool Item_func_convert_tz::get_date(TIME *ltime, - uint fuzzy_date __attribute__((unused))) + uint fuzzy_date __attribute__((unused))) { my_time_t my_time_tmp; bool not_used; @@ -1727,7 +1727,7 @@ bool Item_func_convert_tz::get_date(TIME *ltime, if (!args[2]->const_item()) to_tz= my_tz_find(args[2]->val_str(&str), tz_tables); - if (from_tz==0 || to_tz==0 || get_arg0_date(ltime, 0)) + if (from_tz==0 || to_tz==0 || get_arg0_date(ltime, TIME_NO_ZERO_DATE)) { null_value= 1; return 1; @@ -1791,7 +1791,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date) INTERVAL interval; ltime->neg= 0; - if (args[0]->get_date(ltime,0) || + if (args[0]->get_date(ltime, TIME_NO_ZERO_DATE) || get_interval_value(args[1],int_type,&value,&interval)) goto null_date; sign= (interval.neg ? -1 : 1); @@ -1900,7 +1900,7 @@ String *Item_date_add_interval::val_str(String *str) TIME ltime; enum date_time_format_types format; - if (Item_date_add_interval::get_date(<ime,0)) + if (Item_date_add_interval::get_date(<ime, TIME_NO_ZERO_DATE)) return 0; if (ltime.time_type == MYSQL_TIMESTAMP_DATE) @@ -1923,7 +1923,7 @@ longlong Item_date_add_interval::val_int() DBUG_ASSERT(fixed == 1); TIME ltime; longlong date; - if (Item_date_add_interval::get_date(<ime,0)) + if (Item_date_add_interval::get_date(<ime, TIME_NO_ZERO_DATE)) return (longlong) 0; date = (ltime.year*100L + ltime.month)*100L + ltime.day; return ltime.time_type == MYSQL_TIMESTAMP_DATE ? date : @@ -2000,7 +2000,7 @@ longlong Item_extract::val_int() long neg; if (date_value) { - if (get_arg0_date(<ime,1)) + if (get_arg0_date(<ime, TIME_FUZZY_DATE)) return 0; neg=1; } @@ -2172,7 +2172,7 @@ String *Item_datetime_typecast::val_str(String *str) { DBUG_ASSERT(fixed == 1); TIME ltime; - if (!get_arg0_date(<ime,1) && + if (!get_arg0_date(<ime, TIME_FUZZY_DATE) && !make_datetime(ltime.second_part ? DATE_TIME_MICROSECOND : DATE_TIME, <ime, str)) return str; @@ -2207,7 +2207,7 @@ String *Item_time_typecast::val_str(String *str) bool Item_date_typecast::get_date(TIME *ltime, uint fuzzy_date) { - bool res= get_arg0_date(ltime,1); + bool res= get_arg0_date(ltime, TIME_FUZZY_DATE); ltime->time_type= MYSQL_TIMESTAMP_DATE; return res; } @@ -2218,7 +2218,7 @@ String *Item_date_typecast::val_str(String *str) DBUG_ASSERT(fixed == 1); TIME ltime; - if (!get_arg0_date(<ime,1) && !str->alloc(11)) + if (!get_arg0_date(<ime, TIME_FUZZY_DATE) && !str->alloc(11)) { make_date((DATE_TIME_FORMAT *) 0, <ime, str); return str; @@ -2312,7 +2312,7 @@ String *Item_func_add_time::val_str(String *str) l_time3.neg= 0; if (is_date) // TIMESTAMP function { - if (get_arg0_date(&l_time1,1) || + if (get_arg0_date(&l_time1, TIME_FUZZY_DATE) || args[1]->get_time(&l_time2) || l_time1.time_type == MYSQL_TIMESTAMP_TIME || l_time2.time_type != MYSQL_TIMESTAMP_TIME) @@ -2599,8 +2599,8 @@ longlong Item_func_timestamp_diff::val_int() int neg= 1; null_value= 0; - if (args[0]->get_date(<ime1, 0) || - args[1]->get_date(<ime2, 0)) + if (args[0]->get_date(<ime1, TIME_NO_ZERO_DATE) || + args[1]->get_date(<ime2, TIME_NO_ZERO_DATE)) goto null_date; if (calc_time_diff(<ime2,<ime1, 1, |