mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/bug10713_new/my50-bug10713_new
This commit is contained in:
@@ -3225,4 +3225,43 @@ select @var|
|
||||
@var
|
||||
abcdabcd
|
||||
drop procedure bug12849_2|
|
||||
drop procedure if exists bug131333|
|
||||
drop function if exists bug131333|
|
||||
create procedure bug131333()
|
||||
begin
|
||||
begin
|
||||
declare a int;
|
||||
select a;
|
||||
set a = 1;
|
||||
select a;
|
||||
end;
|
||||
begin
|
||||
declare b int;
|
||||
select b;
|
||||
end;
|
||||
end|
|
||||
create function bug131333()
|
||||
returns int
|
||||
begin
|
||||
begin
|
||||
declare a int;
|
||||
set a = 1;
|
||||
end;
|
||||
begin
|
||||
declare b int;
|
||||
return b;
|
||||
end;
|
||||
end|
|
||||
call bug131333()|
|
||||
a
|
||||
NULL
|
||||
a
|
||||
1
|
||||
b
|
||||
NULL
|
||||
select bug131333()|
|
||||
bug131333()
|
||||
NULL
|
||||
drop procedure bug131333|
|
||||
drop function bug131333|
|
||||
drop table t1,t2;
|
||||
|
||||
@@ -1146,11 +1146,11 @@ create view v2 as select * from v1;
|
||||
alter view v1 as select * from v2;
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
alter view v1 as select * from v1;
|
||||
ERROR 42000: Not unique table/alias: 'v1'
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
create or replace view v1 as select * from v2;
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
create or replace view v1 as select * from v1;
|
||||
ERROR 42000: Not unique table/alias: 'v1'
|
||||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
drop view v2,v1;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
@@ -2186,3 +2186,7 @@ r_object_id users_names
|
||||
120001a080000542 guser02
|
||||
drop view v1, v2;
|
||||
drop table t1, t2;
|
||||
create table t1 (s1 int);
|
||||
create view abc as select * from t1 as abc;
|
||||
drop table t1;
|
||||
drop view abc;
|
||||
|
||||
@@ -826,10 +826,10 @@ DROP TABLE t1, t2;
|
||||
# Bugs #9136, #12917: problems with --defaults-extra-file option
|
||||
#
|
||||
|
||||
--exec echo "[client]" > $MYSQL_TEST_DIR/var/tmp/tmp.cnf
|
||||
--exec echo "[mysqltest1]" > $MYSQL_TEST_DIR/var/tmp/tmp.cnf
|
||||
--exec echo "port=1234" >> $MYSQL_TEST_DIR/var/tmp/tmp.cnf
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -c $MYSQL_TEST_DIR/var/tmp/tmp.cnf client
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -e $MYSQL_TEST_DIR/var/tmp/tmp.cnf client
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -c $MYSQL_TEST_DIR/var/tmp/tmp.cnf mysqltest1
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -e $MYSQL_TEST_DIR/var/tmp/tmp.cnf mysqltest1
|
||||
--exec rm $MYSQL_TEST_DIR/var/tmp/tmp.cnf
|
||||
|
||||
#
|
||||
|
||||
@@ -4063,6 +4063,51 @@ call bug12849_2(@var)|
|
||||
select @var|
|
||||
drop procedure bug12849_2|
|
||||
|
||||
#
|
||||
# BUG#13133: Local variables in stored procedures are not initialized correctly.
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug131333|
|
||||
drop function if exists bug131333|
|
||||
--enable_warnings
|
||||
create procedure bug131333()
|
||||
begin
|
||||
begin
|
||||
declare a int;
|
||||
|
||||
select a;
|
||||
set a = 1;
|
||||
select a;
|
||||
end;
|
||||
begin
|
||||
declare b int;
|
||||
|
||||
select b;
|
||||
end;
|
||||
end|
|
||||
|
||||
create function bug131333()
|
||||
returns int
|
||||
begin
|
||||
begin
|
||||
declare a int;
|
||||
|
||||
set a = 1;
|
||||
end;
|
||||
begin
|
||||
declare b int;
|
||||
|
||||
return b;
|
||||
end;
|
||||
end|
|
||||
|
||||
call bug131333()|
|
||||
select bug131333()|
|
||||
|
||||
drop procedure bug131333|
|
||||
drop function bug131333|
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
||||
@@ -1083,11 +1083,11 @@ create view v1 as select * from t1;
|
||||
create view v2 as select * from v1;
|
||||
-- error 1146
|
||||
alter view v1 as select * from v2;
|
||||
-- error 1066
|
||||
-- error 1146
|
||||
alter view v1 as select * from v1;
|
||||
-- error 1146
|
||||
create or replace view v1 as select * from v2;
|
||||
-- error 1066
|
||||
-- error 1146
|
||||
create or replace view v1 as select * from v1;
|
||||
drop view v2,v1;
|
||||
drop table t1;
|
||||
@@ -2059,3 +2059,12 @@ order by users_names;
|
||||
|
||||
drop view v1, v2;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #6808 - Views: CREATE VIEW v ... FROM t AS v fails
|
||||
#
|
||||
|
||||
create table t1 (s1 int);
|
||||
create view abc as select * from t1 as abc;
|
||||
drop table t1;
|
||||
drop view abc;
|
||||
|
||||
@@ -272,6 +272,9 @@ SignalSender::execNodeStatus(void* signalSender,
|
||||
NdbCondition_Signal(ss->m_cond);
|
||||
}
|
||||
|
||||
#if __SUNPRO_CC != 0x560
|
||||
template SimpleSignal* SignalSender::waitFor<WaitForNode>(unsigned, WaitForNode&);
|
||||
template SimpleSignal* SignalSender::waitFor<WaitForAny>(unsigned, WaitForAny&);
|
||||
#endif
|
||||
template class Vector<SimpleSignal*>;
|
||||
|
||||
|
||||
@@ -1078,7 +1078,6 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
|
||||
sp_rcontext *octx = thd->spcont;
|
||||
sp_rcontext *nctx = NULL;
|
||||
uint i;
|
||||
Item_null *nit;
|
||||
int ret= -1; // Assume error
|
||||
|
||||
if (argcount != params)
|
||||
@@ -1109,22 +1108,15 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
|
||||
nctx->push_item(it);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
The rest of the frame are local variables which are all IN.
|
||||
Default all variables to null (those with default clauses will
|
||||
be set by an set instruction).
|
||||
Push NULLs to get the right size (and make the reuse mechanism work) -
|
||||
the will be initialized by set instructions in each frame.
|
||||
*/
|
||||
|
||||
nit= NULL; // Re-use this, and only create if needed
|
||||
for (; i < csize ; i++)
|
||||
{
|
||||
if (! nit)
|
||||
{
|
||||
if (!(nit= new Item_null()))
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
nctx->push_item(nit);
|
||||
}
|
||||
nctx->push_item(NULL);
|
||||
|
||||
thd->spcont= nctx;
|
||||
|
||||
binlog_save_options= thd->options;
|
||||
@@ -1321,23 +1313,14 @@ int sp_head::execute_procedure(THD *thd, List<Item> *args)
|
||||
close_thread_tables(thd, 0, 0);
|
||||
|
||||
DBUG_PRINT("info",(" %.*s: eval args done", m_name.length, m_name.str));
|
||||
|
||||
/*
|
||||
The rest of the frame are local variables which are all IN.
|
||||
Default all variables to null (those with default clauses will
|
||||
be set by an set instruction).
|
||||
Push NULLs to get the right size (and make the reuse mechanism work) -
|
||||
the will be initialized by set instructions in each frame.
|
||||
*/
|
||||
for (; i < csize ; i++)
|
||||
{
|
||||
if (! nit)
|
||||
{
|
||||
if (!(nit= new Item_null()))
|
||||
{
|
||||
ret= -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
nctx->push_item(nit);
|
||||
}
|
||||
nctx->push_item(NULL);
|
||||
}
|
||||
|
||||
thd->spcont= nctx;
|
||||
|
||||
@@ -184,7 +184,6 @@ sp_pcontext::push_pvar(LEX_STRING *name, enum enum_field_types type,
|
||||
p->type= type;
|
||||
p->mode= mode;
|
||||
p->offset= current_pvars();
|
||||
p->isset= (mode == sp_param_out ? FALSE : TRUE);
|
||||
p->dflt= NULL;
|
||||
insert_dynamic(&m_pvar, (gptr)&p);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ typedef struct sp_pvar
|
||||
enum enum_field_types type;
|
||||
sp_param_mode_t mode;
|
||||
uint offset; // Offset in current frame
|
||||
my_bool isset;
|
||||
Item *dflt;
|
||||
} sp_pvar_t;
|
||||
|
||||
@@ -147,15 +146,6 @@ class sp_pcontext : public Sql_alloc
|
||||
p->type= type;
|
||||
}
|
||||
|
||||
inline void
|
||||
set_isset(uint i, my_bool val)
|
||||
{
|
||||
sp_pvar_t *p= find_pvar(i);
|
||||
|
||||
if (p)
|
||||
p->isset= val;
|
||||
}
|
||||
|
||||
inline void
|
||||
set_default(uint i, Item *it)
|
||||
{
|
||||
|
||||
@@ -6056,7 +6056,10 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
/* check that used name is unique */
|
||||
if (lock_type != TL_IGNORE)
|
||||
{
|
||||
for (TABLE_LIST *tables=(TABLE_LIST*) table_list.first ;
|
||||
TABLE_LIST *first_table= (TABLE_LIST*) table_list.first;
|
||||
if (lex->sql_command == SQLCOM_CREATE_VIEW)
|
||||
first_table= first_table ? first_table->next_local : NULL;
|
||||
for (TABLE_LIST *tables= first_table ;
|
||||
tables ;
|
||||
tables=tables->next_local)
|
||||
{
|
||||
|
||||
@@ -118,9 +118,18 @@ public:
|
||||
bool deallocate();
|
||||
|
||||
/* Possible values of flags */
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1300
|
||||
static const int IS_IN_USE;
|
||||
#else
|
||||
static const int IS_IN_USE= 1;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* VC6 can't handle initializing in declaration */
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1300
|
||||
const int Prepared_statement::IS_IN_USE= 1;
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
Implementation
|
||||
******************************************************************************/
|
||||
|
||||
@@ -1657,42 +1657,41 @@ sp_decls:
|
||||
;
|
||||
|
||||
sp_decl:
|
||||
DECLARE_SYM sp_decl_idents type
|
||||
DECLARE_SYM sp_decl_idents type
|
||||
{ Lex->sphead->reset_lex(YYTHD); }
|
||||
sp_opt_default
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
sp_pcontext *ctx= lex->spcont;
|
||||
uint max= ctx->context_pvars();
|
||||
enum enum_field_types type= (enum enum_field_types)$3;
|
||||
Item *it= $5;
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
sp_pcontext *ctx= lex->spcont;
|
||||
uint max= ctx->context_pvars();
|
||||
enum enum_field_types type= (enum enum_field_types)$3;
|
||||
Item *it= $5;
|
||||
bool has_default= (it != NULL);
|
||||
|
||||
for (uint i = max-$2 ; i < max ; i++)
|
||||
{
|
||||
ctx->set_type(i, type);
|
||||
if (! it)
|
||||
ctx->set_isset(i, FALSE);
|
||||
else
|
||||
{
|
||||
sp_instr_set *in= new sp_instr_set(lex->sphead->instructions(),
|
||||
ctx,
|
||||
ctx->pvar_context2index(i),
|
||||
it, type, lex,
|
||||
(i == max - 1));
|
||||
for (uint i = max-$2 ; i < max ; i++)
|
||||
{
|
||||
sp_instr_set *in;
|
||||
|
||||
/*
|
||||
The last instruction is assigned to be responsible for
|
||||
freeing LEX.
|
||||
*/
|
||||
lex->sphead->add_instr(in);
|
||||
ctx->set_isset(i, TRUE);
|
||||
ctx->set_default(i, it);
|
||||
}
|
||||
}
|
||||
ctx->set_type(i, type);
|
||||
if (! has_default)
|
||||
it= new Item_null(); /* QQ Set to the type with null_value? */
|
||||
in = new sp_instr_set(lex->sphead->instructions(),
|
||||
ctx,
|
||||
ctx->pvar_context2index(i),
|
||||
it, type, lex,
|
||||
(i == max - 1));
|
||||
|
||||
/*
|
||||
The last instruction is assigned to be responsible for
|
||||
freeing LEX.
|
||||
*/
|
||||
lex->sphead->add_instr(in);
|
||||
ctx->set_default(i, it);
|
||||
}
|
||||
lex->sphead->restore_lex(YYTHD);
|
||||
$$.vars= $2;
|
||||
$$.conds= $$.hndlrs= $$.curs= 0;
|
||||
}
|
||||
$$.vars= $2;
|
||||
$$.conds= $$.hndlrs= $$.curs= 0;
|
||||
}
|
||||
| DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
@@ -2268,7 +2267,6 @@ sp_fetch_list:
|
||||
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
|
||||
|
||||
i->add_to_varlist(spv);
|
||||
spv->isset= TRUE;
|
||||
}
|
||||
}
|
||||
|
|
||||
@@ -2290,7 +2288,6 @@ sp_fetch_list:
|
||||
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
|
||||
|
||||
i->add_to_varlist(spv);
|
||||
spv->isset= TRUE;
|
||||
}
|
||||
}
|
||||
;
|
||||
@@ -5894,7 +5891,6 @@ select_var_ident:
|
||||
else
|
||||
{
|
||||
((select_dumpvar *)lex->result)->var_list.push_back( new my_var($1,1,t->offset,t->type));
|
||||
t->isset= TRUE;
|
||||
}
|
||||
}
|
||||
;
|
||||
@@ -7925,7 +7921,6 @@ sys_option_value:
|
||||
sp_set= new sp_instr_set(lex->sphead->instructions(), ctx,
|
||||
spv->offset, it, spv->type, lex, TRUE);
|
||||
lex->sphead->add_instr(sp_set);
|
||||
spv->isset= TRUE;
|
||||
}
|
||||
}
|
||||
| option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
|
||||
|
||||
Reference in New Issue
Block a user