Commit 56e4f4c4 authored by jan@hundin.mysql.fi's avatar jan@hundin.mysql.fi

Merge jlindstrom@bk-internal.mysql.com:/home/bk/mysql-5.0

into hundin.mysql.fi:/home/jan/new/mysql-5.0
parents 2f38a79a f6b1f5de
...@@ -661,6 +661,7 @@ typedef SOCKET_SIZE_TYPE size_socket; ...@@ -661,6 +661,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
#define UINT_MAX16 0xFFFF #define UINT_MAX16 0xFFFF
#define INT_MIN8 (~0x7F) #define INT_MIN8 (~0x7F)
#define INT_MAX8 0x7F #define INT_MAX8 0x7F
#define UINT_MAX8 0xFF
/* From limits.h instead */ /* From limits.h instead */
#ifndef DBL_MIN #ifndef DBL_MIN
......
...@@ -3442,7 +3442,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, ...@@ -3442,7 +3442,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
longlong data= my_strntoll(&my_charset_latin1, value, length, 10, longlong data= my_strntoll(&my_charset_latin1, value, length, 10,
&endptr, &err); &endptr, &err);
*param->error= (IS_TRUNCATED(data, param->is_unsigned, *param->error= (IS_TRUNCATED(data, param->is_unsigned,
INT8_MIN, INT8_MAX, UINT8_MAX) | INT_MIN8, INT_MAX8, UINT_MAX8) |
test(err)); test(err));
*buffer= (uchar) data; *buffer= (uchar) data;
break; break;
...@@ -3452,7 +3452,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, ...@@ -3452,7 +3452,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
longlong data= my_strntoll(&my_charset_latin1, value, length, 10, longlong data= my_strntoll(&my_charset_latin1, value, length, 10,
&endptr, &err); &endptr, &err);
*param->error= (IS_TRUNCATED(data, param->is_unsigned, *param->error= (IS_TRUNCATED(data, param->is_unsigned,
INT16_MIN, INT16_MAX, UINT16_MAX) | INT_MIN16, INT_MAX16, UINT_MAX16) |
test(err)); test(err));
shortstore(buffer, (short) data); shortstore(buffer, (short) data);
break; break;
...@@ -3462,7 +3462,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value, ...@@ -3462,7 +3462,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
longlong data= my_strntoll(&my_charset_latin1, value, length, 10, longlong data= my_strntoll(&my_charset_latin1, value, length, 10,
&endptr, &err); &endptr, &err);
*param->error= (IS_TRUNCATED(data, param->is_unsigned, *param->error= (IS_TRUNCATED(data, param->is_unsigned,
INT32_MIN, INT32_MAX, UINT32_MAX) | INT_MIN32, INT_MAX32, UINT_MAX32) |
test(err)); test(err));
longstore(buffer, (int32) data); longstore(buffer, (int32) data);
break; break;
...@@ -3564,17 +3564,17 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field, ...@@ -3564,17 +3564,17 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
break; break;
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
*param->error= IS_TRUNCATED(value, param->is_unsigned, *param->error= IS_TRUNCATED(value, param->is_unsigned,
INT8_MIN, INT8_MAX, UINT8_MAX); INT_MIN8, INT_MAX8, UINT_MAX8);
*(uchar *)param->buffer= (uchar) value; *(uchar *)param->buffer= (uchar) value;
break; break;
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
*param->error= IS_TRUNCATED(value, param->is_unsigned, *param->error= IS_TRUNCATED(value, param->is_unsigned,
INT16_MIN, INT16_MAX, UINT16_MAX); INT_MIN16, INT_MAX16, UINT_MAX16);
shortstore(buffer, (short) value); shortstore(buffer, (short) value);
break; break;
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
*param->error= IS_TRUNCATED(value, param->is_unsigned, *param->error= IS_TRUNCATED(value, param->is_unsigned,
INT32_MIN, INT32_MAX, UINT32_MAX); INT_MIN32, INT_MAX32, UINT_MAX32);
longstore(buffer, (int32) value); longstore(buffer, (int32) value);
break; break;
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
...@@ -3978,7 +3978,7 @@ static void fetch_result_tinyint(MYSQL_BIND *param, MYSQL_FIELD *field, ...@@ -3978,7 +3978,7 @@ static void fetch_result_tinyint(MYSQL_BIND *param, MYSQL_FIELD *field,
my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG);
uchar data= **row; uchar data= **row;
*(uchar *)param->buffer= data; *(uchar *)param->buffer= data;
*param->error= param->is_unsigned != field_is_unsigned && data > INT8_MAX; *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX8;
(*row)++; (*row)++;
} }
...@@ -3988,7 +3988,7 @@ static void fetch_result_short(MYSQL_BIND *param, MYSQL_FIELD *field, ...@@ -3988,7 +3988,7 @@ static void fetch_result_short(MYSQL_BIND *param, MYSQL_FIELD *field,
my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG);
ushort data= (ushort) sint2korr(*row); ushort data= (ushort) sint2korr(*row);
shortstore(param->buffer, data); shortstore(param->buffer, data);
*param->error= param->is_unsigned != field_is_unsigned && data > INT16_MAX; *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX16;
*row+= 2; *row+= 2;
} }
...@@ -3999,7 +3999,7 @@ static void fetch_result_int32(MYSQL_BIND *param, ...@@ -3999,7 +3999,7 @@ static void fetch_result_int32(MYSQL_BIND *param,
my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG);
uint32 data= (uint32) sint4korr(*row); uint32 data= (uint32) sint4korr(*row);
longstore(param->buffer, data); longstore(param->buffer, data);
*param->error= param->is_unsigned != field_is_unsigned && data > INT32_MAX; *param->error= param->is_unsigned != field_is_unsigned && data > INT_MAX32;
*row+= 4; *row+= 4;
} }
...@@ -4009,7 +4009,7 @@ static void fetch_result_int64(MYSQL_BIND *param, ...@@ -4009,7 +4009,7 @@ static void fetch_result_int64(MYSQL_BIND *param,
{ {
my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG); my_bool field_is_unsigned= test(field->flags & UNSIGNED_FLAG);
ulonglong data= (ulonglong) sint8korr(*row); ulonglong data= (ulonglong) sint8korr(*row);
*param->error= param->is_unsigned != field_is_unsigned && data > INT64_MAX; *param->error= param->is_unsigned != field_is_unsigned && data > LONGLONG_MAX;
longlongstore(param->buffer, data); longlongstore(param->buffer, data);
*row+= 8; *row+= 8;
} }
...@@ -4149,7 +4149,7 @@ static my_bool is_binary_compatible(enum enum_field_types type1, ...@@ -4149,7 +4149,7 @@ static my_bool is_binary_compatible(enum enum_field_types type1,
MYSQL_TYPE_DECIMAL, 0 }, MYSQL_TYPE_DECIMAL, 0 },
*range_list[]= { range1, range2, range3, range4 }, *range_list[]= { range1, range2, range3, range4 },
**range_list_end= range_list + sizeof(range_list)/sizeof(*range_list); **range_list_end= range_list + sizeof(range_list)/sizeof(*range_list);
enum enum_field_types **range, *type; const enum enum_field_types **range, *type;
if (type1 == type2) if (type1 == type2)
return TRUE; return TRUE;
......
...@@ -590,3 +590,40 @@ TABLES ...@@ -590,3 +590,40 @@ TABLES
TABLE_PRIVILEGES TABLE_PRIVILEGES
TABLE_CONSTRAINTS TABLE_CONSTRAINTS
TABLE_NAMES TABLE_NAMES
use test;
create function sub1(i int) returns int
return i+1;
create table t1(f1 int);
create view t2 (c) as select f1 from t1;
create view t3 (c) as select sub1(1);
create table t4(f1 int, KEY f1_key (f1));
drop table t1;
drop function sub1;
select table_name from information_schema.views
where table_schema='test';
table_name
Warnings:
Warning 1356 View 'test.t2' references invalid table(s) or column(s) or function(s)
Warning 1356 View 'test.t3' references invalid table(s) or column(s) or function(s)
select table_name from information_schema.views
where table_schema='test';
table_name
Warnings:
Warning 1356 View 'test.t2' references invalid table(s) or column(s) or function(s)
Warning 1356 View 'test.t3' references invalid table(s) or column(s) or function(s)
select column_name from information_schema.columns
where table_schema='test';
column_name
f1
Warnings:
Warning 1356 View 'test.t2' references invalid table(s) or column(s) or function(s)
Warning 1356 View 'test.t3' references invalid table(s) or column(s) or function(s)
select index_name from information_schema.statistics where table_schema='test';
index_name
f1_key
select constraint_name from information_schema.table_constraints
where table_schema='test';
constraint_name
drop view t2;
drop view t3;
drop table t4;
...@@ -12,7 +12,7 @@ set GLOBAL init_connect=DEFAULT; ...@@ -12,7 +12,7 @@ set GLOBAL init_connect=DEFAULT;
select @a; select @a;
@a @a
NULL NULL
set global init_connect="create table t1(a char(10));\ set global init_connect="drop table if exists t1; create table t1(a char(10));\
insert into t1 values ('\0');insert into t1 values('abc')"; insert into t1 values ('\0');insert into t1 values('abc')";
select hex(a) from t1; select hex(a) from t1;
hex(a) hex(a)
......
...@@ -983,10 +983,10 @@ create view v1 as select * from t1; ...@@ -983,10 +983,10 @@ create view v1 as select * from t1;
drop table t1; drop table t1;
create table t1 (col1 char(5),newcol2 char(5)); create table t1 (col1 char(5),newcol2 char(5));
insert into v1 values('a','aa'); insert into v1 values('a','aa');
ERROR HY000: View 'test.v1' references invalid table(s) or column(s) ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s)
drop table t1; drop table t1;
select * from v1; select * from v1;
ERROR HY000: View 'test.v1' references invalid table(s) or column(s) ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s)
drop view v1; drop view v1;
create view v1 (a,a) as select 'a','a'; create view v1 (a,a) as select 'a','a';
ERROR 42S21: Duplicate column name 'a' ERROR 42S21: Duplicate column name 'a'
...@@ -1217,11 +1217,11 @@ create table t1 (s1 int); ...@@ -1217,11 +1217,11 @@ create table t1 (s1 int);
create view v1 as select x1() from t1; create view v1 as select x1() from t1;
drop function x1; drop function x1;
select * from v1; select * from v1;
ERROR 42000: FUNCTION test.x1 does not exist ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s)
show table status; show table status;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL t1 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL FUNCTION test.x1 does not exist v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL View 'test.v1' references invalid table(s) or column(s) or function(s)
drop view v1; drop view v1;
drop table t1; drop table t1;
create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1; create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1;
...@@ -1655,7 +1655,7 @@ test.t1 check status OK ...@@ -1655,7 +1655,7 @@ test.t1 check status OK
drop table t1; drop table t1;
check table v1; check table v1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.v1 check error View 'test.v1' references invalid table(s) or column(s) test.v1 check error View 'test.v1' references invalid table(s) or column(s) or function(s)
drop view v1; drop view v1;
create table t1 (a int); create table t1 (a int);
create table t2 (a int); create table t2 (a int);
......
...@@ -292,3 +292,29 @@ use test; ...@@ -292,3 +292,29 @@ use test;
show tables; show tables;
use information_schema; use information_schema;
show tables like "T%"; show tables like "T%";
#
# Bug#7212: information_schema: "Can't find file" errors if storage engine gone
# Bug#7211: information_schema: crash if bad view
#
use test;
create function sub1(i int) returns int
return i+1;
create table t1(f1 int);
create view t2 (c) as select f1 from t1;
create view t3 (c) as select sub1(1);
create table t4(f1 int, KEY f1_key (f1));
drop table t1;
drop function sub1;
select table_name from information_schema.views
where table_schema='test';
select table_name from information_schema.views
where table_schema='test';
select column_name from information_schema.columns
where table_schema='test';
select index_name from information_schema.statistics where table_schema='test';
select constraint_name from information_schema.table_constraints
where table_schema='test';
drop view t2;
drop view t3;
drop table t4;
...@@ -19,7 +19,7 @@ connect (con3,localhost,user_1,,); ...@@ -19,7 +19,7 @@ connect (con3,localhost,user_1,,);
connection con3; connection con3;
select @a; select @a;
connection con0; connection con0;
set global init_connect="create table t1(a char(10));\ set global init_connect="drop table if exists t1; create table t1(a char(10));\
insert into t1 values ('\0');insert into t1 values('abc')"; insert into t1 values ('\0');insert into t1 values('abc')";
connect (con4,localhost,user_1,,); connect (con4,localhost,user_1,,);
connection con4; connection con4;
......
...@@ -1169,7 +1169,7 @@ create function x1 () returns int return 5; ...@@ -1169,7 +1169,7 @@ create function x1 () returns int return 5;
create table t1 (s1 int); create table t1 (s1 int);
create view v1 as select x1() from t1; create view v1 as select x1() from t1;
drop function x1; drop function x1;
-- error 1305 -- error 1356
select * from v1; select * from v1;
--replace_column 12 # 13 # --replace_column 12 # 13 #
--replace_result "2147483647 " "21474836479 " --replace_result "2147483647 " "21474836479 "
......
...@@ -5464,10 +5464,9 @@ ER_WARN_VIEW_WITHOUT_KEY ...@@ -5464,10 +5464,9 @@ ER_WARN_VIEW_WITHOUT_KEY
serbian "View '%-.64s.%-.64s' references invalid table(s) or column(s)" serbian "View '%-.64s.%-.64s' references invalid table(s) or column(s)"
ukr "View, , ͦ æ(), Ҧ " ukr "View, , ͦ æ(), Ҧ "
ER_VIEW_INVALID ER_VIEW_INVALID
eng "View '%-.64s.%-.64s' references invalid table(s) or column(s)" eng "View '%-.64s.%-.64s' references invalid table(s) or column(s) or function(s)"
rus "View '%-.64s.%-.64s' " rus "View '%-.64s.%-.64s' "
serbian "Can't drop a %s from within another stored routine" serbian "Can't drop a %s from within another stored routine"
ukr "View '%-.64s.%-.64s' Ŧަ æ æ"
ER_SP_NO_DROP_SP ER_SP_NO_DROP_SP
eng "Can't drop a %s from within another stored routine" eng "Can't drop a %s from within another stored routine"
serbian "GOTO is not allowed in a stored procedure handler" serbian "GOTO is not allowed in a stored procedure handler"
......
...@@ -981,6 +981,7 @@ sp_cache_functions(THD *thd, LEX *lex) ...@@ -981,6 +981,7 @@ sp_cache_functions(THD *thd, LEX *lex)
thd->lex= newlex; thd->lex= newlex;
newlex->proc_table= oldlex->proc_table; // hint if mysql.oper is opened newlex->proc_table= oldlex->proc_table; // hint if mysql.oper is opened
newlex->current_select= NULL;
name.m_name.str= strchr(name.m_qname.str, '.'); name.m_name.str= strchr(name.m_qname.str, '.');
name.m_db.length= name.m_name.str - name.m_qname.str; name.m_db.length= name.m_name.str - name.m_qname.str;
name.m_db.str= strmake_root(thd->mem_root, name.m_db.str= strmake_root(thd->mem_root,
......
...@@ -140,6 +140,18 @@ int mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list) ...@@ -140,6 +140,18 @@ int mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list)
derived_result->set_table(table); derived_result->set_table(table);
exit: exit:
/* Hide "Unknown column" or "Unknown function" error */
if (orig_table_list->view)
{
if (thd->net.last_errno == ER_BAD_FIELD_ERROR ||
thd->net.last_errno == ER_SP_DOES_NOT_EXIST)
{
thd->clear_error();
my_error(ER_VIEW_INVALID, MYF(0), orig_table_list->db,
orig_table_list->real_name);
}
}
/* /*
if it is preparation PS only or commands that need only VIEW structure if it is preparation PS only or commands that need only VIEW structure
then we do not need real data and we can skip execution (and parameters then we do not need real data and we can skip execution (and parameters
......
...@@ -11654,8 +11654,21 @@ calc_group_buffer(JOIN *join,ORDER *group) ...@@ -11654,8 +11654,21 @@ calc_group_buffer(JOIN *join,ORDER *group)
key_length+=sizeof(double); key_length+=sizeof(double);
else if ((*group->item)->result_type() == INT_RESULT) else if ((*group->item)->result_type() == INT_RESULT)
key_length+=sizeof(longlong); key_length+=sizeof(longlong);
else if ((*group->item)->result_type() == STRING_RESULT)
{
/*
Group strings are taken as varstrings and require an length field.
A field is not yet created by create_tmp_field()
and the sizes should match up.
*/
key_length+= (*group->item)->max_length + HA_KEY_BLOB_LENGTH;
}
else else
key_length+=(*group->item)->max_length; {
/* This case should never be choosen */
DBUG_ASSERT(0);
current_thd->fatal_error();
}
parts++; parts++;
if ((*group->item)->maybe_null) if ((*group->item)->maybe_null)
null_parts++; null_parts++;
......
...@@ -2374,12 +2374,24 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables, ...@@ -2374,12 +2374,24 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
const char *file_name) const char *file_name)
{ {
TIME time; TIME time;
const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS; LEX *lex= thd->lex;
const char *wild= lex->wild ? lex->wild->ptr() : NullS;
CHARSET_INFO *cs= system_charset_info; CHARSET_INFO *cs= system_charset_info;
DBUG_ENTER("get_schema_column_record"); DBUG_ENTER("get_schema_column_record");
if (res) if (res)
{ {
DBUG_RETURN(1); if (lex->orig_sql_command != SQLCOM_SHOW_FIELDS)
{
/*
I.e. we are in SELECT FROM INFORMATION_SCHEMA.COLUMS
rather than in SHOW COLUMNS
*/
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
thd->net.last_errno, thd->net.last_error);
thd->clear_error();
res= 0;
}
DBUG_RETURN(res);
} }
TABLE *show_table= tables->table; TABLE *show_table= tables->table;
...@@ -2745,7 +2757,23 @@ static int get_schema_stat_record(THD *thd, struct st_table_list *tables, ...@@ -2745,7 +2757,23 @@ static int get_schema_stat_record(THD *thd, struct st_table_list *tables,
{ {
CHARSET_INFO *cs= system_charset_info; CHARSET_INFO *cs= system_charset_info;
DBUG_ENTER("get_schema_stat_record"); DBUG_ENTER("get_schema_stat_record");
if (!res && !tables->view) if (res)
{
if (thd->lex->orig_sql_command != SQLCOM_SHOW_KEYS)
{
/*
I.e. we are in SELECT FROM INFORMATION_SCHEMA.STATISTICS
rather than in SHOW KEYS
*/
if (!tables->view)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
thd->net.last_errno, thd->net.last_error);
thd->clear_error();
res= 0;
}
DBUG_RETURN(res);
}
else if (!tables->view)
{ {
TABLE *show_table= tables->table; TABLE *show_table= tables->table;
KEY *key_info=show_table->key_info; KEY *key_info=show_table->key_info;
...@@ -2843,7 +2871,14 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables, ...@@ -2843,7 +2871,14 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
table->file->write_row(table->record[0]); table->file->write_row(table->record[0]);
} }
} }
DBUG_RETURN(res); else
{
if (tables->view)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
thd->net.last_errno, thd->net.last_error);
thd->clear_error();
}
DBUG_RETURN(0);
} }
...@@ -2868,7 +2903,15 @@ static int get_schema_constraints_record(THD *thd, struct st_table_list *tables, ...@@ -2868,7 +2903,15 @@ static int get_schema_constraints_record(THD *thd, struct st_table_list *tables,
const char *file_name) const char *file_name)
{ {
DBUG_ENTER("get_schema_constraints_record"); DBUG_ENTER("get_schema_constraints_record");
if (!res && !tables->view) if (res)
{
if (!tables->view)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
thd->net.last_errno, thd->net.last_error);
thd->clear_error();
DBUG_RETURN(0);
}
else if (!tables->view)
{ {
List<FOREIGN_KEY_INFO> f_key_list; List<FOREIGN_KEY_INFO> f_key_list;
TABLE *show_table= tables->table; TABLE *show_table= tables->table;
...@@ -2925,7 +2968,15 @@ static int get_schema_key_column_usage_record(THD *thd, ...@@ -2925,7 +2968,15 @@ static int get_schema_key_column_usage_record(THD *thd,
{ {
DBUG_ENTER("get_schema_key_column_usage_record"); DBUG_ENTER("get_schema_key_column_usage_record");
CHARSET_INFO *cs= system_charset_info; CHARSET_INFO *cs= system_charset_info;
if (!res && !tables->view) if (res)
{
if (!tables->view)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
thd->net.last_errno, thd->net.last_error);
thd->clear_error();
DBUG_RETURN(0);
}
else if (!tables->view)
{ {
List<FOREIGN_KEY_INFO> f_key_list; List<FOREIGN_KEY_INFO> f_key_list;
TABLE *show_table= tables->table; TABLE *show_table= tables->table;
......
...@@ -1845,8 +1845,9 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds, ...@@ -1845,8 +1845,9 @@ bool st_table_list::setup_ancestor(THD *thd, Item **conds,
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
/* Hide "Unknown column" error */ /* Hide "Unknown column" or "Unknown function" error */
if (thd->net.last_errno == ER_BAD_FIELD_ERROR) if (thd->net.last_errno == ER_BAD_FIELD_ERROR ||
thd->net.last_errno == ER_SP_DOES_NOT_EXIST)
{ {
thd->clear_error(); thd->clear_error();
my_error(ER_VIEW_INVALID, MYF(0), view_db.str, view_name.str); my_error(ER_VIEW_INVALID, MYF(0), view_db.str, view_name.str);
......
...@@ -12065,6 +12065,7 @@ static void test_truncation() ...@@ -12065,6 +12065,7 @@ static void test_truncation()
MYSQL_STMT *stmt; MYSQL_STMT *stmt;
const char *stmt_text; const char *stmt_text;
int rc; int rc;
uint bind_count;
MYSQL_BIND *bind_array, *bind; MYSQL_BIND *bind_array, *bind;
myheader("test_truncation"); myheader("test_truncation");
...@@ -12112,7 +12113,7 @@ static void test_truncation() ...@@ -12112,7 +12113,7 @@ static void test_truncation()
check_execute(stmt, rc); check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt); rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc); check_execute(stmt, rc);
uint bind_count= (uint) mysql_stmt_field_count(stmt); bind_count= (uint) mysql_stmt_field_count(stmt);
/*************** Fill in the bind structure and bind it **************/ /*************** Fill in the bind structure and bind it **************/
bind_array= malloc(sizeof(MYSQL_BIND) * bind_count); bind_array= malloc(sizeof(MYSQL_BIND) * bind_count);
......
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