Commit 4cfc649d authored by unknown's avatar unknown

Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0

into  sanja.is.com.ua:/home/bell/mysql/bk/work-merge-5.1


configure.in:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/t/view.test:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/sql_view.cc:
  Auto merged
sql/share/errmsg.txt:
  merge
parents c7a5f503 8dc06e0f
...@@ -361,7 +361,8 @@ AC_CACHE_VAL(mysql_cv_termcap_lib, ...@@ -361,7 +361,8 @@ AC_CACHE_VAL(mysql_cv_termcap_lib,
[AC_CHECK_LIB(ncurses, tgetent, mysql_cv_termcap_lib=libncurses, [AC_CHECK_LIB(ncurses, tgetent, mysql_cv_termcap_lib=libncurses,
[AC_CHECK_LIB(curses, tgetent, mysql_cv_termcap_lib=libcurses, [AC_CHECK_LIB(curses, tgetent, mysql_cv_termcap_lib=libcurses,
[AC_CHECK_LIB(termcap, tgetent, mysql_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(termcap, tgetent, mysql_cv_termcap_lib=libtermcap,
mysql_cv_termcap_lib=NOT_FOUND)])])]) [AC_CHECK_LIB(tinfo, tgetent, mysql_cv_termcap_lib=libtinfo,
mysql_cv_termcap_lib=NOT_FOUND)])])])])
AC_MSG_CHECKING(for termcap functions library) AC_MSG_CHECKING(for termcap functions library)
if test "$mysql_cv_termcap_lib" = "NOT_FOUND"; then if test "$mysql_cv_termcap_lib" = "NOT_FOUND"; then
AC_MSG_ERROR([No curses/termcap library found]) AC_MSG_ERROR([No curses/termcap library found])
...@@ -369,6 +370,8 @@ elif test "$mysql_cv_termcap_lib" = "libtermcap"; then ...@@ -369,6 +370,8 @@ elif test "$mysql_cv_termcap_lib" = "libtermcap"; then
TERMCAP_LIB=-ltermcap TERMCAP_LIB=-ltermcap
elif test "$mysql_cv_termcap_lib" = "libncurses"; then elif test "$mysql_cv_termcap_lib" = "libncurses"; then
TERMCAP_LIB=-lncurses TERMCAP_LIB=-lncurses
elif test "$mysql_cv_termcap_lib" = "libtinfo"; then
TERMCAP_LIB=-ltinfo
else else
TERMCAP_LIB=-lcurses TERMCAP_LIB=-lcurses
fi fi
......
...@@ -775,6 +775,9 @@ AC_SUBST(WRAPLIBS) ...@@ -775,6 +775,9 @@ AC_SUBST(WRAPLIBS)
if test "$TARGET_LINUX" = "true"; then if test "$TARGET_LINUX" = "true"; then
AC_MSG_CHECKING([for atomic operations]) AC_MSG_CHECKING([for atomic operations])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
atom_ops= atom_ops=
AC_TRY_RUN([ AC_TRY_RUN([
#include <asm/atomic.h> #include <asm/atomic.h>
...@@ -810,6 +813,8 @@ int main() ...@@ -810,6 +813,8 @@ int main()
if test -z "$atom_ops"; then atom_ops="no"; fi if test -z "$atom_ops"; then atom_ops="no"; fi
AC_MSG_RESULT($atom_ops) AC_MSG_RESULT($atom_ops)
AC_LANG_RESTORE
AC_ARG_WITH(pstack, AC_ARG_WITH(pstack,
[ --with-pstack Use the pstack backtrace library], [ --with-pstack Use the pstack backtrace library],
[ USE_PSTACK=$withval ], [ USE_PSTACK=$withval ],
......
...@@ -35,3 +35,14 @@ select -1 >> 0, -1 << 0; ...@@ -35,3 +35,14 @@ select -1 >> 0, -1 << 0;
select -1 >> 1, -1 << 1; select -1 >> 1, -1 << 1;
-1 >> 1 -1 << 1 -1 >> 1 -1 << 1
9223372036854775807 18446744073709551614 9223372036854775807 18446744073709551614
drop table if exists t1,t2;
create table t1(a int);
create table t2(a int, b int);
insert into t1 values (1), (2), (3);
insert into t2 values (1, 7), (3, 7);
select t1.a, t2.a, t2.b, bit_count(t2.b) from t1 left join t2 on t1.a=t2.a;
a a b bit_count(t2.b)
1 1 7 3
2 NULL NULL NULL
3 3 7 3
drop table t1, t2;
...@@ -2600,3 +2600,26 @@ id td ...@@ -2600,3 +2600,26 @@ id td
5 2005-01-04 5 2005-01-04
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
create table t1 (a int);
create view v1 as select * from t1;
create view v2 as select * from v1;
drop table t1;
rename table v2 to t1;
select * from v1;
ERROR HY000: `test`.`v1` contain view recursion
drop view t1, v1;
create table t1 (a int);
create function f1() returns int
begin
declare mx int;
select max(a) from t1 into mx;
return mx;
end//
create view v1 as select f1() as a;
create view v2 as select * from v1;
drop table t1;
rename table v2 to t1;
select * from v1;
ERROR HY000: Recursive stored functions and triggers are not allowed.
drop function f1;
drop view t1, v1;
...@@ -17,4 +17,18 @@ select 0 | -1, 0 ^ -1, 0 & -1; ...@@ -17,4 +17,18 @@ select 0 | -1, 0 ^ -1, 0 & -1;
select -1 >> 0, -1 << 0; select -1 >> 0, -1 << 0;
select -1 >> 1, -1 << 1; select -1 >> 1, -1 << 1;
#
# Bug 13044: wrong bit_count() results
#
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
create table t1(a int);
create table t2(a int, b int);
insert into t1 values (1), (2), (3);
insert into t2 values (1, 7), (3, 7);
select t1.a, t2.a, t2.b, bit_count(t2.b) from t1 left join t2 on t1.a=t2.a;
drop table t1, t2;
# End of 4.1 tests # End of 4.1 tests
...@@ -2459,3 +2459,34 @@ SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; ...@@ -2459,3 +2459,34 @@ SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04';
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
#
# BUG#14308: Recursive view definitions
#
# using view only
create table t1 (a int);
create view v1 as select * from t1;
create view v2 as select * from v1;
drop table t1;
rename table v2 to t1;
-- error ER_VIEW_RECURSIVE
select * from v1;
drop view t1, v1;
# using SP function
create table t1 (a int);
delimiter //;
create function f1() returns int
begin
declare mx int;
select max(a) from t1 into mx;
return mx;
end//
delimiter ;//
create view v1 as select f1() as a;
create view v2 as select * from v1;
drop table t1;
rename table v2 to t1;
-- error ER_SP_NO_RECURSION
select * from v1;
drop function f1;
drop view t1, v1;
...@@ -2489,11 +2489,8 @@ longlong Item_func_bit_count::val_int() ...@@ -2489,11 +2489,8 @@ longlong Item_func_bit_count::val_int()
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
ulonglong value= (ulonglong) args[0]->val_int(); ulonglong value= (ulonglong) args[0]->val_int();
if (args[0]->null_value) if ((null_value= args[0]->null_value))
{
null_value=1; /* purecov: inspected */
return 0; /* purecov: inspected */ return 0; /* purecov: inspected */
}
return (longlong) my_count_bits(value); return (longlong) my_count_bits(value);
} }
......
...@@ -5836,3 +5836,5 @@ ER_WRONG_PARTITION_NAME ...@@ -5836,3 +5836,5 @@ ER_WRONG_PARTITION_NAME
swe "Felaktigt partitionsnamn" swe "Felaktigt partitionsnamn"
ER_MAX_PREPARED_STMT_COUNT_REACHED 42000 ER_MAX_PREPARED_STMT_COUNT_REACHED 42000
eng "Can't create more than max_prepared_stmt_count statements (current value: %lu)" eng "Can't create more than max_prepared_stmt_count statements (current value: %lu)"
ER_VIEW_RECURSIVE
eng "`%-.64s`.`%-.64s` contain view recursion"
...@@ -773,6 +773,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) ...@@ -773,6 +773,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
SELECT_LEX *end, *view_select; SELECT_LEX *end, *view_select;
LEX *old_lex, *lex; LEX *old_lex, *lex;
Query_arena *arena, backup; Query_arena *arena, backup;
TABLE_LIST *top_view= table->top_table();
int res; int res;
bool result; bool result;
DBUG_ENTER("mysql_make_view"); DBUG_ENTER("mysql_make_view");
...@@ -800,6 +801,24 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) ...@@ -800,6 +801,24 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
DBUG_RETURN(0); DBUG_RETURN(0);
} }
/* check loop via view definition */
for (TABLE_LIST *precedent= table->referencing_view;
precedent;
precedent= precedent->referencing_view)
{
if (precedent->view_name.length == table->table_name_length &&
precedent->view_db.length == table->db_length &&
my_strcasecmp(system_charset_info,
precedent->view_name.str, table->table_name) == 0 &&
my_strcasecmp(system_charset_info,
precedent->view_db.str, table->db) == 0)
{
my_error(ER_VIEW_RECURSIVE, MYF(0),
top_view->view_db.str, top_view->view_name.str);
DBUG_RETURN(TRUE);
}
}
/* /*
For now we assume that tables will not be changed during PS life (it For now we assume that tables will not be changed during PS life (it
will be TRUE as far as we make new table cache). will be TRUE as far as we make new table cache).
...@@ -898,7 +917,6 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) ...@@ -898,7 +917,6 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
} }
if (!res && !thd->is_fatal_error) if (!res && !thd->is_fatal_error)
{ {
TABLE_LIST *top_view= table->top_table();
TABLE_LIST *view_tables= lex->query_tables; TABLE_LIST *view_tables= lex->query_tables;
TABLE_LIST *view_tables_tail= 0; TABLE_LIST *view_tables_tail= 0;
TABLE_LIST *tbl; TABLE_LIST *tbl;
......
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