Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
8a2bf1cc
Commit
8a2bf1cc
authored
Jun 22, 2006
by
konstantin@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/opt/local/work/mysql-5.0-root
into mysql.com:/opt/local/work/mysql-5.0-runtime
parents
fa98891e
e20898a5
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
5 deletions
+136
-5
mysql-test/r/sp-prelocking.result
mysql-test/r/sp-prelocking.result
+18
-0
mysql-test/r/sp.result
mysql-test/r/sp.result
+21
-0
mysql-test/t/sp-prelocking.test
mysql-test/t/sp-prelocking.test
+31
-0
mysql-test/t/sp.test
mysql-test/t/sp.test
+27
-0
sql/sp_head.cc
sql/sp_head.cc
+3
-1
sql/sql_parse.cc
sql/sql_parse.cc
+36
-4
No files found.
mysql-test/r/sp-prelocking.result
View file @
8a2bf1cc
...
...
@@ -237,3 +237,21 @@ deallocate prepare stmt;
drop table t1;
drop view v1, v2, v3;
drop function bug15683;
drop table if exists t1, t2, t3;
drop function if exists bug19634;
create table t1 (id int, data int);
create table t2 (id int);
create table t3 (data int);
create function bug19634() returns int return (select count(*) from t3);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()";
execute stmt;
execute stmt;
deallocate prepare stmt;
create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id";
execute stmt;
execute stmt;
deallocate prepare stmt;
drop function bug19634;
drop table t1, t2, t3;
End of 5.0 tests
mysql-test/r/sp.result
View file @
8a2bf1cc
...
...
@@ -4990,4 +4990,25 @@ CALL bug18037_p2()|
DROP FUNCTION bug18037_f1|
DROP PROCEDURE bug18037_p1|
DROP PROCEDURE bug18037_p2|
drop table if exists t3|
drop procedure if exists bug15217|
create table t3 as select 1|
create procedure bug15217()
begin
declare var1 char(255);
declare cur1 cursor for select * from t3;
open cur1;
fetch cur1 into var1;
select concat('data was: /', var1, '/');
close cur1;
end |
call bug15217()|
concat('data was: /', var1, '/')
data was: /1/
flush tables |
call bug15217()|
concat('data was: /', var1, '/')
data was: /1/
drop table t3|
drop procedure bug15217|
drop table t1,t2;
mysql-test/t/sp-prelocking.test
View file @
8a2bf1cc
...
...
@@ -272,3 +272,34 @@ drop table t1;
drop
view
v1
,
v2
,
v3
;
drop
function
bug15683
;
#
# Bug#19634 "Re-execution of multi-delete which involve trigger/stored
# function crashes server"
#
--
disable_warnings
drop
table
if
exists
t1
,
t2
,
t3
;
drop
function
if
exists
bug19634
;
--
enable_warnings
create
table
t1
(
id
int
,
data
int
);
create
table
t2
(
id
int
);
create
table
t3
(
data
int
);
create
function
bug19634
()
returns
int
return
(
select
count
(
*
)
from
t3
);
prepare
stmt
from
"delete t1 from t1, t2 where t1.id = t2.id and bug19634()"
;
# This should not crash server
execute
stmt
;
execute
stmt
;
deallocate
prepare
stmt
;
create
trigger
t1_bi
before
delete
on
t1
for
each
row
insert
into
t3
values
(
old
.
data
);
prepare
stmt
from
"delete t1 from t1, t2 where t1.id = t2.id"
;
execute
stmt
;
execute
stmt
;
deallocate
prepare
stmt
;
drop
function
bug19634
;
drop
table
t1
,
t2
,
t3
;
--
echo
End
of
5.0
tests
mysql-test/t/sp.test
View file @
8a2bf1cc
...
...
@@ -5888,6 +5888,33 @@ DROP FUNCTION bug18037_f1|
DROP
PROCEDURE
bug18037_p1
|
DROP
PROCEDURE
bug18037_p2
|
#
# Bug#15217 "Using a SP cursor on a table created with PREPARE fails with
# weird error". Check that the code that is supposed to work at
# the first execution of a stored procedure actually works for
# sp_instr_copen.
--
disable_warnings
drop
table
if
exists
t3
|
drop
procedure
if
exists
bug15217
|
--
enable_warnings
create
table
t3
as
select
1
|
create
procedure
bug15217
()
begin
declare
var1
char
(
255
);
declare
cur1
cursor
for
select
*
from
t3
;
open
cur1
;
fetch
cur1
into
var1
;
select
concat
(
'data was: /'
,
var1
,
'/'
);
close
cur1
;
end
|
# Returns expected result
call
bug15217
()
|
flush
tables
|
# Returns error with garbage as column name
call
bug15217
()
|
drop
table
t3
|
drop
procedure
bug15217
|
#
# BUG#NNNN: New bug synopsis
...
...
sql/sp_head.cc
View file @
8a2bf1cc
...
...
@@ -1075,7 +1075,6 @@ sp_head::execute(THD *thd)
thd
->
net
.
no_send_error
=
0
;
if
(
i
->
free_list
)
cleanup_items
(
i
->
free_list
);
i
->
state
=
Query_arena
::
EXECUTED
;
/*
If we've set thd->user_var_events_alloc to mem_root of this SP
...
...
@@ -2210,6 +2209,9 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
m_lex
->
mark_as_requiring_prelocking
(
NULL
);
}
thd
->
rollback_item_tree_changes
();
/* Update the state of the active arena. */
thd
->
stmt_arena
->
state
=
Query_arena
::
EXECUTED
;
/*
Unlike for PS we should not call Item's destructors for newly created
...
...
sql/sql_parse.cc
View file @
8a2bf1cc
...
...
@@ -5202,8 +5202,26 @@ bool check_global_access(THD *thd, ulong want_access)
/*
Check the privilege for all used tables. Table privileges are cached
in the table list for GRANT checking
Check the privilege for all used tables.
SYNOPSYS
check_table_access()
thd Thread context
want_access Privileges requested
tables List of tables to be checked
no_errors FALSE/TRUE - report/don't report error to
the client (using my_error() call).
NOTES
Table privileges are cached in the table list for GRANT checking.
This functions assumes that table list used and
thd->lex->query_tables_own_last value correspond to each other
(the latter should be either 0 or point to next_global member
of one of elements of this table list).
RETURN VALUE
FALSE - OK
TRUE - Access denied
*/
bool
...
...
@@ -7068,14 +7086,28 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables)
SELECT_LEX
*
select_lex
=
&
thd
->
lex
->
select_lex
;
TABLE_LIST
*
aux_tables
=
(
TABLE_LIST
*
)
thd
->
lex
->
auxilliary_table_list
.
first
;
TABLE_LIST
**
save_query_tables_own_last
=
thd
->
lex
->
query_tables_own_last
;
DBUG_ENTER
(
"multi_delete_precheck"
);
/* sql_yacc guarantees that tables and aux_tables are not zero */
DBUG_ASSERT
(
aux_tables
!=
0
);
if
(
check_db_used
(
thd
,
tables
)
||
check_db_used
(
thd
,
aux_tables
)
||
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
)
||
check_table_access
(
thd
,
DELETE_ACL
,
aux_tables
,
0
))
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
))
DBUG_RETURN
(
TRUE
);
/*
Since aux_tables list is not part of LEX::query_tables list we
have to juggle with LEX::query_tables_own_last value to be able
call check_table_access() safely.
*/
thd
->
lex
->
query_tables_own_last
=
0
;
if
(
check_table_access
(
thd
,
DELETE_ACL
,
aux_tables
,
0
))
{
thd
->
lex
->
query_tables_own_last
=
save_query_tables_own_last
;
DBUG_RETURN
(
TRUE
);
}
thd
->
lex
->
query_tables_own_last
=
save_query_tables_own_last
;
if
((
thd
->
options
&
OPTION_SAFE_UPDATES
)
&&
!
select_lex
->
where
)
{
my_message
(
ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment