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
This commit is contained in:
commit
b2c810e847
@ -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
|
|||||||
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)
|
|||||||
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()
|
|||||||
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;
|
|||||||
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
|
|||||||
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;
|
|||||||
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';
|
|||||||
|
|
||||||
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()
|
|||||||
{
|
{
|
||||||
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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user