Commit 23a522c0 authored by venu@myvenu.com's avatar venu@myvenu.com

Merge bk-internal.mysql.com:/home/bk/mysql-4.1

into myvenu.com:/home/venu/work/sql/dev-4.1
parents 7f51b1d3 0eb1be58
...@@ -275,5 +275,9 @@ ...@@ -275,5 +275,9 @@
#define ER_ZLIB_Z_BUF_ERROR 1256 #define ER_ZLIB_Z_BUF_ERROR 1256
#define ER_ZLIB_Z_DATA_ERROR 1257 #define ER_ZLIB_Z_DATA_ERROR 1257
#define ER_CUT_VALUE_GROUP_CONCAT 1258 #define ER_CUT_VALUE_GROUP_CONCAT 1258
#define ER_ERROR_MESSAGES 259 #define ER_WARN_TOO_FEW_RECORDS 1259
#define ER_WARN_TOO_MANY_RECORDS 1260
#define ER_WARN_DATA_TRUNCATED 1261
#define ER_WARN_NULL_TO_NOTNULL 1262
#define ER_ERROR_MESSAGES 263
...@@ -30,3 +30,27 @@ create table if not exists t1(id int); ...@@ -30,3 +30,27 @@ create table if not exists t1(id int);
select @@warning_count; select @@warning_count;
@@warning_count @@warning_count
0 0
drop table t1;
create table t1(a tinyint, b int not null, c date, d char(5));
load data infile '../../std_data/warnings_loaddata.dat' into table t1 fields terminated by ',';
Warnings:
Warning 1262 Data truncated, NULL supplied to NOT NULL column 'b' at row 2
Warning 1261 Data truncated for column 'd' at row 3
Warning 1261 Data truncated for column 'c' at row 4
Warning 1259 Value count is fewer than the column count at row 5
Warning 1261 Data truncated for column 'b' at row 6
Warning 1260 Value count is more than the column count at row 7
Warning 1261 Data truncated for column 'a' at row 8
select @@warning_count;
@@warning_count
7
show warnings;
Level Code Message
Warning 1262 Data truncated, NULL supplied to NOT NULL column 'b' at row 2
Warning 1261 Data truncated for column 'd' at row 3
Warning 1261 Data truncated for column 'c' at row 4
Warning 1259 Value count is fewer than the column count at row 5
Warning 1261 Data truncated for column 'b' at row 6
Warning 1260 Value count is more than the column count at row 7
Warning 1261 Data truncated for column 'a' at row 8
drop table t1;
10,20,2003-04-21,mysql
20,\N,2003-04-22,MySQL
30,40,2003-04-23,MySQL is Open Source Database
40,50,monty,30
50,60,2003-04-24
60,67 abc,2003-04-25,mysql
70,80,2003-04-26,mysql,open,source
500,90,2003-04-27,mysql
...@@ -17,6 +17,7 @@ set SQL_WARNINGS=0; ...@@ -17,6 +17,7 @@ set SQL_WARNINGS=0;
# #
# Test other warnings # Test other warnings
#
drop temporary table if exists not_exists; drop temporary table if exists not_exists;
drop table if exists not_exists_table; drop table if exists not_exists_table;
...@@ -26,3 +27,14 @@ show count(*) warnings; ...@@ -26,3 +27,14 @@ show count(*) warnings;
create table t1(id int); create table t1(id int);
create table if not exists t1(id int); create table if not exists t1(id int);
select @@warning_count; select @@warning_count;
drop table t1;
#
# Test warnings for LOAD DATA INFILE
#
create table t1(a tinyint, b int not null, c date, d char(5));
load data infile '../../std_data/warnings_loaddata.dat' into table t1 fields terminated by ',';
select @@warning_count;
show warnings;
drop table t1;
...@@ -1677,6 +1677,7 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs) ...@@ -1677,6 +1677,7 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
!test_if_int(from,len,end,cs))) !test_if_int(from,len,end,cs)))
{ {
current_thd->cuted_fields++; current_thd->cuted_fields++;
error= 1;
} }
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table->db_low_byte_first) if (table->db_low_byte_first)
...@@ -1932,7 +1933,10 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs) ...@@ -1932,7 +1933,10 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
if (error || if (error ||
(from+len != end && current_thd->count_cuted_fields && (from+len != end && current_thd->count_cuted_fields &&
!test_if_int(from,len,end,cs))) !test_if_int(from,len,end,cs)))
current_thd->cuted_fields++; {
current_thd->cuted_fields++;
error= 1;
}
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table->db_low_byte_first) if (table->db_low_byte_first)
{ {
...@@ -2416,6 +2420,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs) ...@@ -2416,6 +2420,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
if (err || current_thd->count_cuted_fields && !test_if_real(from,len,cs)) if (err || current_thd->count_cuted_fields && !test_if_real(from,len,cs))
{ {
current_thd->cuted_fields++; current_thd->cuted_fields++;
err= 1;
} }
if (unsigned_flag && j < 0) if (unsigned_flag && j < 0)
{ {
......
...@@ -259,4 +259,9 @@ ...@@ -259,4 +259,9 @@
"Z_BUF_ERROR: Not enough memory available for zlib" "Z_BUF_ERROR: Not enough memory available for zlib"
"Z_MEM_ERROR: Not enough room in the output buffer for zlib (probably, length of uncompressed data was corrupted)" "Z_MEM_ERROR: Not enough room in the output buffer for zlib (probably, length of uncompressed data was corrupted)"
"Z_DATA_ERROR: Input data was corrupted for zlib" "Z_DATA_ERROR: Input data was corrupted for zlib"
"%d line(s) was(were) cut by group_concat()" "%d line(s) was(were) cut by group_concat()";
\ No newline at end of file "Value count is fewer than the column count at row %ld";
"Value count is more than the column count at row %ld";
"Data truncated for column '%s' at row %ld";
"Data truncated, NULL supplied to NOT NULL column '%s' at row %ld"
...@@ -368,9 +368,11 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields, ...@@ -368,9 +368,11 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields,
List_iterator_fast<Item> it(fields); List_iterator_fast<Item> it(fields);
Item_field *sql_field; Item_field *sql_field;
ulonglong id; ulonglong id;
ulong row_pos;
DBUG_ENTER("read_fixed_length"); DBUG_ENTER("read_fixed_length");
id=0; id= 0;
row_pos= 1;
/* No fields can be null in this format. mark all fields as not null */ /* No fields can be null in this format. mark all fields as not null */
while ((sql_field= (Item_field*) it++)) while ((sql_field= (Item_field*) it++))
sql_field->field->set_notnull(); sql_field->field->set_notnull();
...@@ -392,8 +394,11 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields, ...@@ -392,8 +394,11 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields,
Field *field=sql_field->field; Field *field=sql_field->field;
if (pos == read_info.row_end) if (pos == read_info.row_end)
{ {
thd->cuted_fields++; /* Not enough fields */ thd->cuted_fields++; /* Not enough fields */
field->reset(); push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_TOO_FEW_RECORDS,
ER(ER_WARN_TOO_FEW_RECORDS), row_pos);
field->reset();
} }
else else
{ {
...@@ -403,14 +408,25 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields, ...@@ -403,14 +408,25 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields,
field->field_length) field->field_length)
length=field->field_length; length=field->field_length;
save_chr=pos[length]; pos[length]='\0'; // Safeguard aganst malloc save_chr=pos[length]; pos[length]='\0'; // Safeguard aganst malloc
field->store((char*) pos,length,read_info.read_charset); if (field->store((char*) pos,length,read_info.read_charset))
{
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_TRUNCATED,
ER(ER_WARN_DATA_TRUNCATED),
field->field_name, row_pos);
}
pos[length]=save_chr; pos[length]=save_chr;
if ((pos+=length) > read_info.row_end) if ((pos+=length) > read_info.row_end)
pos= read_info.row_end; /* Fills rest with space */ pos= read_info.row_end; /* Fills rest with space */
} }
} }
if (pos != read_info.row_end) if (pos != read_info.row_end)
{
thd->cuted_fields++; /* To long row */ thd->cuted_fields++; /* To long row */
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_TOO_MANY_RECORDS,
ER(ER_WARN_TOO_MANY_RECORDS), row_pos);
}
if (write_record(table,&info)) if (write_record(table,&info))
DBUG_RETURN(1); DBUG_RETURN(1);
/* /*
...@@ -426,7 +442,13 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields, ...@@ -426,7 +442,13 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List<Item> &fields,
if (read_info.next_line()) // Skip to next line if (read_info.next_line()) // Skip to next line
break; break;
if (read_info.line_cuted) if (read_info.line_cuted)
{
thd->cuted_fields++; /* To long row */ thd->cuted_fields++; /* To long row */
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_TOO_MANY_RECORDS,
ER(ER_WARN_TOO_MANY_RECORDS), row_pos);
}
row_pos++;
} }
if (id && !read_info.error) if (id && !read_info.error)
thd->insert_id(id); // For binary/update log thd->insert_id(id); // For binary/update log
...@@ -444,11 +466,13 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, ...@@ -444,11 +466,13 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
Item_field *sql_field; Item_field *sql_field;
uint enclosed_length; uint enclosed_length;
ulonglong id; ulonglong id;
ulong row_pos;
DBUG_ENTER("read_sep_field"); DBUG_ENTER("read_sep_field");
enclosed_length=enclosed.length(); enclosed_length=enclosed.length();
id=0; id= 0;
row_pos= 1;
for (;;it.rewind()) for (;;it.rewind())
{ {
if (thd->killed) if (thd->killed)
...@@ -478,13 +502,26 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, ...@@ -478,13 +502,26 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
if (field->type() == FIELD_TYPE_TIMESTAMP) if (field->type() == FIELD_TYPE_TIMESTAMP)
((Field_timestamp*) field)->set_time(); ((Field_timestamp*) field)->set_time();
else if (field != table->next_number_field) else if (field != table->next_number_field)
{
thd->cuted_fields++; thd->cuted_fields++;
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_NULL_TO_NOTNULL,
ER(ER_WARN_NULL_TO_NOTNULL),
field->field_name, row_pos);
}
} }
continue; continue;
} }
field->set_notnull(); field->set_notnull();
read_info.row_end[0]=0; // Safe to change end marker read_info.row_end[0]=0; // Safe to change end marker
field->store((char*) read_info.row_start,length,read_info.read_charset); if (field->store((char*) read_info.row_start,length,read_info.read_charset))
{
// Data truncated or out of bounds
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_DATA_TRUNCATED,
ER(ER_WARN_DATA_TRUNCATED),
field->field_name, row_pos);
}
} }
if (read_info.error) if (read_info.error)
break; break;
...@@ -497,6 +534,9 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, ...@@ -497,6 +534,9 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
sql_field->field->set_null(); sql_field->field->set_null();
sql_field->field->reset(); sql_field->field->reset();
thd->cuted_fields++; thd->cuted_fields++;
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_TOO_FEW_RECORDS,
ER(ER_WARN_TOO_FEW_RECORDS), row_pos);
} }
} }
if (write_record(table,&info)) if (write_record(table,&info))
...@@ -514,7 +554,13 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, ...@@ -514,7 +554,13 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table,
if (read_info.next_line()) // Skip to next line if (read_info.next_line()) // Skip to next line
break; break;
if (read_info.line_cuted) if (read_info.line_cuted)
{
thd->cuted_fields++; /* To long row */ thd->cuted_fields++; /* To long row */
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WARN_TOO_MANY_RECORDS,
ER(ER_WARN_TOO_MANY_RECORDS), row_pos);
}
row_pos++;
} }
if (id && !read_info.error) if (id && !read_info.error)
thd->insert_id(id); // For binary/update log thd->insert_id(id); // For binary/update log
......
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