summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-12-18 09:15:41 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2018-12-18 09:15:41 +0200
commit45531949ae115f2ba7b9450cc2386653483211ba (patch)
tree22809f3919c711d5030d2d0e55be969a7bc67e84 /sql
parent36b7f8f4b0e46e06cfcc29c221430a5b998e3b3f (diff)
parented13a0d221256028299df4167280e97860ba2edc (diff)
downloadmariadb-git-45531949ae115f2ba7b9450cc2386653483211ba.tar.gz
Merge 10.2 into 10.3
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc33
-rw-r--r--sql/item.cc15
-rw-r--r--sql/item.h1
-rw-r--r--sql/item_create.cc2
-rw-r--r--sql/item_func.cc3
-rw-r--r--sql/item_strfunc.cc6
-rw-r--r--sql/item_timefunc.cc8
-rw-r--r--sql/share/errmsg-utf8.txt4
-rw-r--r--sql/sql_class.cc9
-rw-r--r--sql/sql_select.cc2
-rw-r--r--sql/sql_table.cc21
-rw-r--r--sql/sql_time.cc44
-rw-r--r--sql/sql_time.h15
13 files changed, 113 insertions, 50 deletions
diff --git a/sql/field.cc b/sql/field.cc
index 5a8192f6e62..fbaf3c6ea91 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2082,7 +2082,7 @@ bool Field_int::get_date(MYSQL_TIME *ltime,ulonglong fuzzydate)
longlong nr= val_int();
bool neg= !(flags & UNSIGNED_FLAG) && nr < 0;
return int_to_datetime_with_warn(neg, neg ? -nr : nr, ltime, fuzzydate,
- field_name.str);
+ table->s, field_name.str);
}
@@ -3421,7 +3421,8 @@ bool Field_new_decimal::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
my_decimal value;
return decimal_to_datetime_with_warn(val_decimal(&value),
- ltime, fuzzydate, field_name.str);
+ ltime, fuzzydate, table->s,
+ field_name.str);
}
@@ -4875,7 +4876,8 @@ bool Field_real::get_date(MYSQL_TIME *ltime,ulonglong fuzzydate)
{
ASSERT_COLUMN_MARKED_FOR_READ;
double nr= val_real();
- return double_to_datetime_with_warn(nr, ltime, fuzzydate, field_name.str);
+ return double_to_datetime_with_warn(nr, ltime, fuzzydate,
+ table->s, field_name.str);
}
@@ -6394,7 +6396,7 @@ bool Field_year::get_date(MYSQL_TIME *ltime,ulonglong fuzzydate)
if (tmp || field_length != 4)
tmp+= 1900;
return int_to_datetime_with_warn(false, tmp * 10000,
- ltime, fuzzydate, field_name.str);
+ ltime, fuzzydate, table->s, field_name.str);
}
@@ -8942,10 +8944,18 @@ int Field_geom::store(const char *from, size_t length, CHARSET_INFO *cs)
geom_type != Field::GEOM_GEOMETRYCOLLECTION &&
(uint32) geom_type != wkb_type)
{
+ const char *db= table->s->db.str;
+ const char *tab_name= table->s->error_table_name();
+
+ if (!db)
+ db= "";
+ if (!tab_name)
+ tab_name= "";
+
my_error(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, MYF(0),
Geometry::ci_collection[geom_type]->m_name.str,
Geometry::ci_collection[wkb_type]->m_name.str,
- field_name.str,
+ db, tab_name, field_name.str,
(ulong) table->in_use->get_stmt_da()->
current_row_for_warning());
goto err_exit;
@@ -11228,7 +11238,8 @@ void Field::set_datetime_warning(Sql_condition::enum_warning_level level,
{
THD *thd= get_thd();
if (thd->really_abort_on_warning() && level >= Sql_condition::WARN_LEVEL_WARN)
- make_truncated_value_warning(thd, level, str, ts_type, field_name.str);
+ make_truncated_value_warning(thd, level, str, ts_type,
+ table->s, field_name.str);
else
set_warning(level, code, cuted_increment);
}
@@ -11238,10 +11249,18 @@ void Field::set_warning_truncated_wrong_value(const char *type_arg,
const char *value)
{
THD *thd= get_thd();
+ const char *db_name= table->s->db.str;
+ const char *table_name= table->s->error_table_name();
+
+ if (!db_name)
+ db_name= "";
+ if (!table_name)
+ table_name= "";
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD,
ER_THD(thd, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD),
- type_arg, value, field_name.str,
+ type_arg, value, db_name, table_name, field_name.str,
static_cast<ulong>(thd->get_stmt_da()->
current_row_for_warning()));
}
diff --git a/sql/item.cc b/sql/item.cc
index 71a9afd6a9d..a26f1eac5ba 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -544,6 +544,15 @@ Item::Item(THD *thd):
}
+const TABLE_SHARE *Item::field_table_or_null()
+{
+ if (real_item()->type() != Item::FIELD_ITEM)
+ return NULL;
+
+ return ((Item_field *) this)->field->table->s;
+}
+
+
/**
Constructor used by Item_field, Item_ref & aggregate (sum)
functions.
@@ -1450,6 +1459,7 @@ bool Item::get_date_from_int(MYSQL_TIME *ltime, ulonglong fuzzydate)
bool neg= !unsigned_flag && value < 0;
if (null_value || int_to_datetime_with_warn(neg, neg ? -value : value,
ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return null_value|= make_zero_date(ltime, fuzzydate);
return null_value= false;
@@ -1470,6 +1480,7 @@ bool Item::get_date_from_year(MYSQL_TIME *ltime, ulonglong fuzzydate)
value*= 10000; /* make it YYYYMMHH */
if (null_value || int_to_datetime_with_warn(false, value,
ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return null_value|= make_zero_date(ltime, fuzzydate);
return null_value= false;
@@ -1480,6 +1491,7 @@ bool Item::get_date_from_real(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
double value= val_real();
if (null_value || double_to_datetime_with_warn(value, ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return null_value|= make_zero_date(ltime, fuzzydate);
return null_value= false;
@@ -1491,6 +1503,7 @@ bool Item::get_date_from_decimal(MYSQL_TIME *ltime, ulonglong fuzzydate)
my_decimal value, *res;
if (!(res= val_decimal(&value)) ||
decimal_to_datetime_with_warn(res, ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return null_value|= make_zero_date(ltime, fuzzydate);
return null_value= false;
@@ -4286,7 +4299,7 @@ void Item_param::set_time(MYSQL_TIME *tm, timestamp_type time_type,
{
ErrConvTime str(&value.time);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &str, time_type, 0);
+ &str, time_type, 0, 0);
set_zero_time(&value.time, time_type);
}
maybe_null= 0;
diff --git a/sql/item.h b/sql/item.h
index 8bb3aa33c78..adfc8e4bc6e 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1273,6 +1273,7 @@ public:
virtual const char *full_name() const { return name.str ? name.str : "???"; }
const char *field_name_or_null()
{ return real_item()->type() == Item::FIELD_ITEM ? name.str : NULL; }
+ const TABLE_SHARE *field_table_or_null();
/*
*result* family of methods is analog of *val* family (see above) but
diff --git a/sql/item_create.cc b/sql/item_create.cc
index ab91e378be3..84f2c91ba54 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -7494,7 +7494,7 @@ Item *create_temporal_literal(THD *thd,
ErrConvString err(str, length, cs);
make_truncated_value_warning(thd,
Sql_condition::time_warn_level(status.warnings),
- &err, ltime.time_type, 0);
+ &err, ltime.time_type, 0, 0);
}
return item;
}
diff --git a/sql/item_func.cc b/sql/item_func.cc
index c5ac97f2905..f902191d9cf 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -844,6 +844,7 @@ bool Item_func_hybrid_field_type::get_date_from_decimal_op(MYSQL_TIME *ltime,
my_decimal value, *res;
if (!(res= decimal_op_with_null_check(&value)) ||
decimal_to_datetime_with_warn(res, ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return make_zero_mysql_time(ltime, fuzzydate);
return (null_value= 0);
@@ -882,6 +883,7 @@ bool Item_func_hybrid_field_type::get_date_from_int_op(MYSQL_TIME *ltime,
bool neg= !unsigned_flag && value < 0;
if (null_value || int_to_datetime_with_warn(neg, neg ? -value : value,
ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return make_zero_mysql_time(ltime, fuzzydate);
return (null_value= 0);
@@ -917,6 +919,7 @@ bool Item_func_hybrid_field_type::get_date_from_real_op(MYSQL_TIME *ltime,
{
double value= real_op();
if (null_value || double_to_datetime_with_warn(value, ltime, fuzzydate,
+ field_table_or_null(),
field_name_or_null()))
return make_zero_mysql_time(ltime, fuzzydate);
return (null_value= 0);
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index fda7f59b128..8e4f4232959 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -5141,7 +5141,7 @@ bool Item_dyncol_get::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
bool neg = llval < 0;
if (int_to_datetime_with_warn(neg, (ulonglong)(neg ? -llval :
llval),
- ltime, fuzzy_date, 0 /* TODO */))
+ ltime, fuzzy_date, 0, 0 /* TODO */))
goto null;
return 0;
}
@@ -5150,12 +5150,12 @@ bool Item_dyncol_get::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
/* fall through */
case DYN_COL_DOUBLE:
if (double_to_datetime_with_warn(val.x.double_value, ltime, fuzzy_date,
- 0 /* TODO */))
+ 0, 0 /* TODO */))
goto null;
return 0;
case DYN_COL_DECIMAL:
if (decimal_to_datetime_with_warn((my_decimal*)&val.x.decimal.value, ltime,
- fuzzy_date, 0 /* TODO */))
+ fuzzy_date, 0, 0 /* TODO */))
goto null;
return 0;
case DYN_COL_STRING:
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 4d17bc354d4..25fecd0a134 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -431,7 +431,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
make_truncated_value_warning(current_thd,
Sql_condition::WARN_LEVEL_WARN,
val_begin, length,
- cached_timestamp_type, NullS);
+ cached_timestamp_type, 0, NullS);
break;
}
} while (++val != val_end);
@@ -1834,13 +1834,13 @@ overflow:
{
ErrConvInteger err2(sec, unsigned_flag);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &err2, MYSQL_TIMESTAMP_TIME, NullS);
+ &err2, MYSQL_TIMESTAMP_TIME, 0, NullS);
}
else
{
ErrConvString err2(err);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &err2, MYSQL_TIMESTAMP_TIME, NullS);
+ &err2, MYSQL_TIMESTAMP_TIME, 0, NullS);
}
return 0;
}
@@ -2893,7 +2893,7 @@ bool Item_func_maketime::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
int len = (int)(ptr - buf) + sprintf(ptr, ":%02u:%02u", (uint)minute, (uint)second);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
buf, len, MYSQL_TIMESTAMP_TIME,
- NullS);
+ 0, NullS);
}
return (null_value= 0);
diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt
index a60ddeb3017..9112795b754 100644
--- a/sql/share/errmsg-utf8.txt
+++ b/sql/share/errmsg-utf8.txt
@@ -5449,8 +5449,8 @@ ER_DIVISION_BY_ZERO 22012
ger "Division durch 0"
hindi "0 से विभाजन"
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 22007
- eng "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %lu"
- ger "Falscher %-.32s-Wert: '%-.128s' für Feld '%.192s' in Zeile %lu"
+ eng "Incorrect %-.32s value: '%-.128s' for column `%.192s`.`%.192s`.`%.192s` at row %lu"
+ ger "Falscher %-.32s-Wert: '%-.128s' für Feld '`%.192s`.`%.192s`.`%.192s` in Zeile %lu"
ER_ILLEGAL_VALUE_FOR_TYPE 22007
eng "Illegal %s '%-.192s' value found during parsing"
ger "Nicht zulässiger %s-Wert '%-.192s' beim Parsen gefunden"
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index a42a2f5afdd..3881f6f28ad 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -3238,6 +3238,10 @@ int select_export::send_data(List<Item> &items)
error_pos= copier.most_important_error_pos();
if (unlikely(error_pos))
{
+ /*
+ TODO:
+ add new error message that will show user this printable_buff
+
char printable_buff[32];
convert_to_printable(printable_buff, sizeof(printable_buff),
error_pos, res->ptr() + res->length() - error_pos,
@@ -3247,6 +3251,11 @@ int select_export::send_data(List<Item> &items)
ER_THD(thd, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD),
"string", printable_buff,
item->name.str, static_cast<long>(row_count));
+ */
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE_FOR_FIELD,
+ ER_THD(thd, WARN_DATA_TRUNCATED),
+ item->name.str, static_cast<long>(row_count));
}
else if (copier.source_end_pos() < res->ptr() + res->length())
{
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index ce8617cda64..ddc5a25bd07 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -22777,9 +22777,11 @@ static int remove_dup_with_compare(THD *thd, TABLE *table, Field **first_field,
}
file->extra(HA_EXTRA_NO_CACHE);
+ (void) file->ha_rnd_end();
DBUG_RETURN(0);
err:
file->extra(HA_EXTRA_NO_CACHE);
+ (void) file->ha_rnd_end();
if (error)
file->print_error(error,MYF(0));
DBUG_RETURN(1);
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index ba91b208d03..1bf88de5f5e 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -10085,16 +10085,6 @@ end_temporary:
err_new_table_cleanup:
my_free(const_cast<uchar*>(frm.str));
- if (new_table)
- {
- thd->drop_temporary_table(new_table, NULL, true);
- }
- else
- (void) quick_rm_table(thd, new_db_type,
- &alter_ctx.new_db, &alter_ctx.tmp_name,
- (FN_IS_TMP | (no_ha_table ? NO_HA_TABLE : 0)),
- alter_ctx.get_tmp_path());
-
/*
No default value was provided for a DATE/DATETIME field, the
current sql_mode doesn't allow the '0000-00-00' value and
@@ -10126,10 +10116,21 @@ err_new_table_cleanup:
thd->abort_on_warning= true;
make_truncated_value_warning(thd, Sql_condition::WARN_LEVEL_WARN,
f_val, strlength(f_val), t_type,
+ new_table->s,
alter_ctx.datetime_field->field_name.str);
thd->abort_on_warning= save_abort_on_warning;
}
+ if (new_table)
+ {
+ thd->drop_temporary_table(new_table, NULL, true);
+ }
+ else
+ (void) quick_rm_table(thd, new_db_type,
+ &alter_ctx.new_db, &alter_ctx.tmp_name,
+ (FN_IS_TMP | (no_ha_table ? NO_HA_TABLE : 0)),
+ alter_ctx.get_tmp_path());
+
DBUG_RETURN(true);
err_with_mdl_after_alter:
diff --git a/sql/sql_time.cc b/sql/sql_time.cc
index 35ef1e50c36..739a95ce9c8 100644
--- a/sql/sql_time.cc
+++ b/sql/sql_time.cc
@@ -297,7 +297,7 @@ check_date_with_warn(const MYSQL_TIME *ltime, ulonglong fuzzy_date,
{
ErrConvTime str(ltime);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &str, ts_type, 0);
+ &str, ts_type, 0, 0);
return true;
}
return false;
@@ -314,7 +314,7 @@ adjust_time_range_with_warn(MYSQL_TIME *ltime, uint dec)
return true;
if (warnings)
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &str, MYSQL_TIMESTAMP_TIME, NullS);
+ &str, MYSQL_TIMESTAMP_TIME, 0, NullS);
return false;
}
@@ -403,7 +403,7 @@ str_to_datetime_with_warn(CHARSET_INFO *cs,
ret_val ? Sql_condition::WARN_LEVEL_WARN :
Sql_condition::time_warn_level(status.warnings),
str, length, flags & TIME_TIME_ONLY ?
- MYSQL_TIMESTAMP_TIME : l_time->time_type, NullS);
+ MYSQL_TIMESTAMP_TIME : l_time->time_type, 0, NullS);
DBUG_EXECUTE_IF("str_to_datetime_warn",
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_YES, str););
@@ -427,7 +427,7 @@ str_to_datetime_with_warn(CHARSET_INFO *cs,
static bool number_to_time_with_warn(bool neg, ulonglong nr, ulong sec_part,
MYSQL_TIME *ltime, ulonglong fuzzydate,
const ErrConv *str,
- const char *field_name)
+ const TABLE_SHARE *s, const char *field_name)
{
int was_cut;
longlong res;
@@ -460,14 +460,15 @@ static bool number_to_time_with_warn(bool neg, ulonglong nr, ulong sec_part,
make_truncated_value_warning(current_thd,
Sql_condition::WARN_LEVEL_WARN, str,
res < 0 ? MYSQL_TIMESTAMP_ERROR : ts_type,
- field_name);
+ s, field_name);
}
return res < 0;
}
bool double_to_datetime_with_warn(double value, MYSQL_TIME *ltime,
- ulonglong fuzzydate, const char *field_name)
+ ulonglong fuzzydate,
+ const TABLE_SHARE *s, const char *field_name)
{
const ErrConvDouble str(value);
bool neg= value < 0;
@@ -481,28 +482,30 @@ bool double_to_datetime_with_warn(double value, MYSQL_TIME *ltime,
longlong nr= static_cast<ulonglong>(floor(value));
uint sec_part= static_cast<ulong>((value - floor(value))*TIME_SECOND_PART_FACTOR);
return number_to_time_with_warn(neg, nr, sec_part, ltime, fuzzydate, &str,
- field_name);
+ s, field_name);
}
bool decimal_to_datetime_with_warn(const my_decimal *value, MYSQL_TIME *ltime,
- ulonglong fuzzydate, const char *field_name)
+ ulonglong fuzzydate,
+ const TABLE_SHARE *s, const char *field_name)
{
const ErrConvDecimal str(value);
ulonglong nr;
ulong sec_part;
bool neg= my_decimal2seconds(value, &nr, &sec_part);
return number_to_time_with_warn(neg, nr, sec_part, ltime, fuzzydate, &str,
- field_name);
+ s, field_name);
}
bool int_to_datetime_with_warn(bool neg, ulonglong value, MYSQL_TIME *ltime,
- ulonglong fuzzydate, const char *field_name)
+ ulonglong fuzzydate,
+ const TABLE_SHARE *s, const char *field_name)
{
const ErrConvInteger str(neg ? - (longlong) value : (longlong) value, !neg);
return number_to_time_with_warn(neg, value, 0, ltime,
- fuzzydate, &str, field_name);
+ fuzzydate, &str, s, field_name);
}
@@ -930,7 +933,7 @@ void make_truncated_value_warning(THD *thd,
Sql_condition::enum_warning_level level,
const ErrConv *sval,
timestamp_type time_type,
- const char *field_name)
+ const TABLE_SHARE *s, const char *field_name)
{
char warn_buff[MYSQL_ERRMSG_SIZE];
const char *type_str;
@@ -949,10 +952,21 @@ void make_truncated_value_warning(THD *thd,
break;
}
if (field_name)
+ {
+ const char *db_name= s->db.str;
+ const char *table_name= s->error_table_name();
+
+ if (!db_name)
+ db_name= "";
+ if (!table_name)
+ table_name= "";
+
cs->cset->snprintf(cs, warn_buff, sizeof(warn_buff),
ER_THD(thd, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD),
- type_str, sval->ptr(), field_name,
+ type_str, sval->ptr(),
+ db_name, table_name, field_name,
(ulong) thd->get_stmt_da()->current_row_for_warning());
+ }
else
{
if (time_type > MYSQL_TIMESTAMP_ERROR)
@@ -1279,7 +1293,7 @@ make_date_with_warn(MYSQL_TIME *ltime, ulonglong fuzzy_date,
/* e.g. negative time */
ErrConvTime str(ltime);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
- &str, ts_type, 0);
+ &str, ts_type, 0, 0);
return true;
}
if ((ltime->time_type= ts_type) == MYSQL_TIMESTAMP_DATE)
@@ -1443,7 +1457,7 @@ time_to_datetime_with_warn(THD *thd,
{
ErrConvTime str(from);
make_truncated_value_warning(thd, Sql_condition::WARN_LEVEL_WARN,
- &str, MYSQL_TIMESTAMP_DATETIME, 0);
+ &str, MYSQL_TIMESTAMP_DATETIME, 0, 0);
return true;
}
return false;
diff --git a/sql/sql_time.h b/sql/sql_time.h
index d3607a28a76..ca9f79273ec 100644
--- a/sql/sql_time.h
+++ b/sql/sql_time.h
@@ -42,13 +42,13 @@ bool str_to_datetime_with_warn(CHARSET_INFO *cs, const char *str, size_t length,
ulonglong flags);
bool double_to_datetime_with_warn(double value, MYSQL_TIME *ltime,
ulonglong fuzzydate,
- const char *name);
+ const TABLE_SHARE *s, const char *name);
bool decimal_to_datetime_with_warn(const my_decimal *value, MYSQL_TIME *ltime,
ulonglong fuzzydate,
- const char *name);
+ const TABLE_SHARE *s, const char *name);
bool int_to_datetime_with_warn(bool neg, ulonglong value, MYSQL_TIME *ltime,
ulonglong fuzzydate,
- const char *name);
+ const TABLE_SHARE *s, const char *name);
bool time_to_datetime(THD *thd, const MYSQL_TIME *tm, MYSQL_TIME *dt);
bool time_to_datetime_with_warn(THD *thd,
@@ -118,14 +118,15 @@ void make_truncated_value_warning(THD *thd,
Sql_condition::enum_warning_level level,
const ErrConv *str_val,
timestamp_type time_type,
- const char *field_name);
+ const TABLE_SHARE *s, const char *field_name);
static inline void make_truncated_value_warning(THD *thd,
- Sql_condition::enum_warning_level level, const char *str_val, size_t str_length, timestamp_type time_type,
- const char *field_name)
+ Sql_condition::enum_warning_level level, const char *str_val,
+ size_t str_length, timestamp_type time_type,
+ const TABLE_SHARE *s, const char *field_name)
{
const ErrConvString str(str_val, str_length, &my_charset_bin);
- make_truncated_value_warning(thd, level, &str, time_type, field_name);
+ make_truncated_value_warning(thd, level, &str, time_type, s, field_name);
}
extern DATE_TIME_FORMAT *date_time_format_make(timestamp_type format_type,