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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e4598dae
Commit
e4598dae
authored
Jul 11, 2006
by
kostja@bodhi.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge bodhi.local:/opt/local/work/tmp_merge
into bodhi.local:/opt/local/work/mysql-5.0-runtime-merge-41
parents
fbf54f8d
0db71aaf
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
218 additions
and
171 deletions
+218
-171
mysql-test/t/ps.test
mysql-test/t/ps.test
+181
-150
sql/sql_lex.cc
sql/sql_lex.cc
+1
-0
sql/sql_prepare.cc
sql/sql_prepare.cc
+14
-21
sql/table.cc
sql/table.cc
+17
-0
sql/table.h
sql/table.h
+5
-0
No files found.
mysql-test/t/ps.test
View file @
e4598dae
...
@@ -490,17 +490,6 @@ execute stmt;
...
@@ -490,17 +490,6 @@ execute stmt;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
,
t2
;
drop
table
t1
,
t2
;
#
# Bug#6102 "Server crash with prepared statement and blank after
# function name"
# ensure that stored functions are cached when preparing a statement
# before we open tables
#
create
table
t1
(
a
varchar
(
20
));
insert
into
t1
values
(
'foo'
);
--
error
1305
prepare
stmt
FROM
'SELECT char_length (a) FROM t1'
;
drop
table
t1
;
#
#
# Bug #6089: FOUND_ROWS returns wrong values when no table/view is used
# Bug #6089: FOUND_ROWS returns wrong values when no table/view is used
...
@@ -513,86 +502,6 @@ execute stmt;
...
@@ -513,86 +502,6 @@ execute stmt;
SELECT
FOUND_ROWS
();
SELECT
FOUND_ROWS
();
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
#
# Bug#8115: equality propagation and prepared statements
#
create
table
t1
(
a
char
(
3
)
not
null
,
b
char
(
3
)
not
null
,
c
char
(
3
)
not
null
,
primary
key
(
a
,
b
,
c
));
create
table
t2
like
t1
;
# reduced query
prepare
stmt
from
"select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b)
where t1.a=1"
;
execute
stmt
;
execute
stmt
;
execute
stmt
;
# original query
prepare
stmt
from
"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from
(t1 left outer join t2 on t2.a=? and t1.b=t2.b)
left outer join t2 t3 on t3.a=? where t1.a=?"
;
set
@
a
:=
1
,
@
b
:=
1
,
@
c
:=
1
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
deallocate
prepare
stmt
;
drop
table
t1
,
t2
;
#
# Bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
#
eval
SET
@
aux
=
"SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS A,
INFORMATION_SCHEMA.COLUMNS B
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
AND A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME AND
A.TABLE_NAME = 'user'"
;
let
$exec_loop_count
=
3
;
eval
prepare
my_stmt
from
@
aux
;
while
(
$exec_loop_count
)
{
eval
execute
my_stmt
;
dec
$exec_loop_count
;
}
deallocate
prepare
my_stmt
;
# Test CALL in prepared mode
delimiter
|
;
--
disable_warnings
drop
procedure
if
exists
p1
|
drop
table
if
exists
t1
|
--
enable_warnings
create
table
t1
(
id
int
)
|
insert
into
t1
values
(
1
)
|
create
procedure
p1
(
a
int
,
b
int
)
begin
declare
c
int
;
select
max
(
id
)
+
1
into
c
from
t1
;
insert
into
t1
select
a
+
b
;
insert
into
t1
select
a
-
b
;
insert
into
t1
select
a
-
c
;
end
|
set
@
a
=
3
,
@
b
=
4
|
prepare
stmt
from
"call p1(?, ?)"
|
execute
stmt
using
@
a
,
@
b
|
execute
stmt
using
@
a
,
@
b
|
select
*
from
t1
|
deallocate
prepare
stmt
|
drop
procedure
p1
|
drop
table
t1
|
delimiter
;
|
#
#
# Bug#9096 "select doesn't return all matched records if prepared statements
# Bug#9096 "select doesn't return all matched records if prepared statements
# is used"
# is used"
...
@@ -618,7 +527,6 @@ set @a=200887, @b=860;
...
@@ -618,7 +527,6 @@ set @a=200887, @b=860;
# this query did not return all matching rows
# this query did not return all matching rows
execute
stmt
using
@
a
,
@
b
;
execute
stmt
using
@
a
,
@
b
;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
;
drop
table
t1
;
#
#
...
@@ -667,35 +575,6 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);
...
@@ -667,35 +575,6 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
,
t2
;
drop
table
t1
,
t2
;
#
# Bug#7306 LIMIT ?, ? and also WL#1785 " Prepared statements: implement
# support for placeholders in LIMIT clause."
# Add basic test coverage for the feature.
#
create
table
t1
(
a
int
);
insert
into
t1
(
a
)
values
(
1
),
(
2
),
(
3
),
(
4
),
(
5
),
(
6
),
(
7
),
(
8
),
(
9
),
(
10
);
prepare
stmt
from
"select * from t1 limit ?, ?"
;
set
@
offset
=
0
,
@
limit
=
1
;
execute
stmt
using
@
offset
,
@
limit
;
select
*
from
t1
limit
0
,
1
;
set
@
offset
=
3
,
@
limit
=
2
;
execute
stmt
using
@
offset
,
@
limit
;
select
*
from
t1
limit
3
,
2
;
prepare
stmt
from
"select * from t1 limit ?"
;
execute
stmt
using
@
limit
;
--
error
1235
prepare
stmt
from
"select * from t1 where a in (select a from t1 limit ?)"
;
prepare
stmt
from
"select * from t1 union all select * from t1 limit ?, ?"
;
set
@
offset
=
9
;
set
@
limit
=
2
;
execute
stmt
using
@
offset
,
@
limit
;
prepare
stmt
from
"(select * from t1 limit ?, ?) union all
(select * from t1 limit ?, ?) order by a limit ?"
;
execute
stmt
using
@
offset
,
@
limit
,
@
offset
,
@
limit
,
@
limit
;
drop
table
t1
;
deallocate
prepare
stmt
;
#
#
# Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT
# Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT
# UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ...
# UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ...
...
@@ -707,6 +586,7 @@ execute stmt;
...
@@ -707,6 +586,7 @@ execute stmt;
execute
stmt
;
execute
stmt
;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
;
drop
table
t1
;
#
#
# Bug#11458 "Prepared statement with subselects return random data":
# Bug#11458 "Prepared statement with subselects return random data":
# drop PARAM_TABLE_BIT from the list of tables used by a subquery
# drop PARAM_TABLE_BIT from the list of tables used by a subquery
...
@@ -775,6 +655,7 @@ execute stmt using @user_id, @id;
...
@@ -775,6 +655,7 @@ execute stmt using @user_id, @id;
execute
stmt
using
@
user_id
,
@
id
;
execute
stmt
using
@
user_id
,
@
id
;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
,
t2
,
t3
,
t4
;
drop
table
t1
,
t2
,
t3
,
t4
;
#
#
# Bug#9379: make sure that Item::collation is reset when one sets
# Bug#9379: make sure that Item::collation is reset when one sets
# a parameter marker from a string variable.
# a parameter marker from a string variable.
...
@@ -813,22 +694,6 @@ select ??;
...
@@ -813,22 +694,6 @@ select ??;
select
?
from
t1
;
select
?
from
t1
;
--
enable_ps_protocol
--
enable_ps_protocol
drop
table
t1
;
drop
table
t1
;
#
# Bug#12651
# (Crash on a PS including a subquery which is a select from a simple view)
#
CREATE
TABLE
b12651_T1
(
a
int
)
ENGINE
=
MYISAM
;
CREATE
TABLE
b12651_T2
(
b
int
)
ENGINE
=
MYISAM
;
CREATE
VIEW
b12651_V1
as
SELECT
b
FROM
b12651_T2
;
PREPARE
b12651
FROM
'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)'
;
EXECUTE
b12651
;
DROP
VIEW
b12651_V1
;
DROP
TABLE
b12651_T1
,
b12651_T2
;
DEALLOCATE
PREPARE
b12651
;
#
#
# Bug#9359 "Prepared statements take snapshot of system vars at PREPARE
# Bug#9359 "Prepared statements take snapshot of system vars at PREPARE
# time"
# time"
...
@@ -905,6 +770,7 @@ execute stmt using @like;
...
@@ -905,6 +770,7 @@ execute stmt using @like;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
drop
table
t1
;
drop
table
t1
;
#
#
# Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
# Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
# recreated with PS/SP"
# recreated with PS/SP"
...
@@ -975,17 +841,17 @@ set global max_prepared_stmt_count=10000000000000000;
...
@@ -975,17 +841,17 @@ set global max_prepared_stmt_count=10000000000000000;
select
@@
max_prepared_stmt_count
;
select
@@
max_prepared_stmt_count
;
set
global
max_prepared_stmt_count
=
default
;
set
global
max_prepared_stmt_count
=
default
;
select
@@
max_prepared_stmt_count
;
select
@@
max_prepared_stmt_count
;
--
error
ER_GLOBAL_VARIABLE
--
error
1229
#
ER_GLOBAL_VARIABLE
set
@@
max_prepared_stmt_count
=
1
;
set
@@
max_prepared_stmt_count
=
1
;
--
error
ER_GLOBAL_VARIABLE
--
error
1229
#
ER_GLOBAL_VARIABLE
set
max_prepared_stmt_count
=
1
;
set
max_prepared_stmt_count
=
1
;
--
error
ER_GLOBAL_VARIABLE
--
error
1229
#
ER_GLOBAL_VARIABLE
set
local
max_prepared_stmt_count
=
1
;
set
local
max_prepared_stmt_count
=
1
;
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
--
error
1229
# ER_GLOBAL_VARIABLE
set
local
prepared_stmt_count
=
0
;
set
local
prepared_stmt_count
=
0
;
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
--
error
1229
# ER_GLOBAL_VARIABLE
set
@@
prepared_stmt_count
=
0
;
set
@@
prepared_stmt_count
=
0
;
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
--
error
1232
# ER_WRONG_TYPE_FOR_VAR
set
global
prepared_stmt_count
=
1
;
set
global
prepared_stmt_count
=
1
;
# set to a reasonable limit works
# set to a reasonable limit works
set
global
max_prepared_stmt_count
=
1
;
set
global
max_prepared_stmt_count
=
1
;
...
@@ -995,13 +861,13 @@ select @@max_prepared_stmt_count;
...
@@ -995,13 +861,13 @@ select @@max_prepared_stmt_count;
#
#
set
global
max_prepared_stmt_count
=
0
;
set
global
max_prepared_stmt_count
=
0
;
select
@@
max_prepared_stmt_count
,
@@
prepared_stmt_count
;
select
@@
max_prepared_stmt_count
,
@@
prepared_stmt_count
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt
from
"select 1"
;
prepare
stmt
from
"select 1"
;
select
@@
prepared_stmt_count
;
select
@@
prepared_stmt_count
;
set
global
max_prepared_stmt_count
=
1
;
set
global
max_prepared_stmt_count
=
1
;
prepare
stmt
from
"select 1"
;
prepare
stmt
from
"select 1"
;
select
@@
prepared_stmt_count
;
select
@@
prepared_stmt_count
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt1
from
"select 1"
;
prepare
stmt1
from
"select 1"
;
select
@@
prepared_stmt_count
;
select
@@
prepared_stmt_count
;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
...
@@ -1020,13 +886,13 @@ select @@prepared_stmt_count;
...
@@ -1020,13 +886,13 @@ select @@prepared_stmt_count;
#
#
select
@@
prepared_stmt_count
,
@@
max_prepared_stmt_count
;
select
@@
prepared_stmt_count
,
@@
max_prepared_stmt_count
;
set
global
max_prepared_stmt_count
=
0
;
set
global
max_prepared_stmt_count
=
0
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt
from
"select 1"
;
prepare
stmt
from
"select 1"
;
# Result: the old statement is deallocated, the new is not created.
# Result: the old statement is deallocated, the new is not created.
--
error
1243
# ER_UNKNOWN_STMT_HANDLER
--
error
1243
# ER_UNKNOWN_STMT_HANDLER
execute
stmt
;
execute
stmt
;
select
@@
prepared_stmt_count
;
select
@@
prepared_stmt_count
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt
from
"select 1"
;
prepare
stmt
from
"select 1"
;
select
@@
prepared_stmt_count
;
select
@@
prepared_stmt_count
;
#
#
...
@@ -1040,10 +906,10 @@ connect (con1,localhost,root,,);
...
@@ -1040,10 +906,10 @@ connect (con1,localhost,root,,);
connection
con1
;
connection
con1
;
prepare
stmt
from
"select 2"
;
prepare
stmt
from
"select 2"
;
prepare
stmt1
from
"select 3"
;
prepare
stmt1
from
"select 3"
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt2
from
"select 4"
;
prepare
stmt2
from
"select 4"
;
connection
default
;
connection
default
;
--
error
ER_MAX_PREPARED_STMT_COUNT_REACHED
--
error
1105
# ER_UNKNOWN_ERROR
prepare
stmt2
from
"select 4"
;
prepare
stmt2
from
"select 4"
;
select
@@
max_prepared_stmt_count
,
@@
prepared_stmt_count
;
select
@@
max_prepared_stmt_count
,
@@
prepared_stmt_count
;
disconnect
con1
;
disconnect
con1
;
...
@@ -1063,7 +929,172 @@ select @@max_prepared_stmt_count, @@prepared_stmt_count;
...
@@ -1063,7 +929,172 @@ select @@max_prepared_stmt_count, @@prepared_stmt_count;
set
global
max_prepared_stmt_count
=
@
old_max_prepared_stmt_count
;
set
global
max_prepared_stmt_count
=
@
old_max_prepared_stmt_count
;
--
enable_ps_protocol
--
enable_ps_protocol
# End of 4.1 tests
#
# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
# tables"
# Check that multi-delete tables are also cleaned up before re-execution.
#
--
disable_warnings
drop
table
if
exists
t1
;
create
temporary
table
if
not
exists
t1
(
a1
int
);
--
enable_warnings
# exact delete syntax is essential
prepare
stmt
from
"delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1"
;
drop
temporary
table
t1
;
create
temporary
table
if
not
exists
t1
(
a1
int
);
# the server crashed on the next statement without the fix
execute
stmt
;
drop
temporary
table
t1
;
create
temporary
table
if
not
exists
t1
(
a1
int
);
# the problem was in memory corruption: repeat the test just in case
execute
stmt
;
drop
temporary
table
t1
;
create
temporary
table
if
not
exists
t1
(
a1
int
);
execute
stmt
;
drop
temporary
table
t1
;
deallocate
prepare
stmt
;
--
echo
End
of
4.1
tests
############################# 5.0 tests start ################################
#
#
# Bug#6102 "Server crash with prepared statement and blank after
# function name"
# ensure that stored functions are cached when preparing a statement
# before we open tables
#
create
table
t1
(
a
varchar
(
20
));
insert
into
t1
values
(
'foo'
);
--
error
1305
prepare
stmt
FROM
'SELECT char_length (a) FROM t1'
;
drop
table
t1
;
#
# Bug#8115: equality propagation and prepared statements
#
create
table
t1
(
a
char
(
3
)
not
null
,
b
char
(
3
)
not
null
,
c
char
(
3
)
not
null
,
primary
key
(
a
,
b
,
c
));
create
table
t2
like
t1
;
# reduced query
prepare
stmt
from
"select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b)
where t1.a=1"
;
execute
stmt
;
execute
stmt
;
execute
stmt
;
# original query
prepare
stmt
from
"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from
(t1 left outer join t2 on t2.a=? and t1.b=t2.b)
left outer join t2 t3 on t3.a=? where t1.a=?"
;
set
@
a
:=
1
,
@
b
:=
1
,
@
c
:=
1
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
execute
stmt
using
@
a
,
@
b
,
@
c
;
deallocate
prepare
stmt
;
drop
table
t1
,
t2
;
#
# Bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
#
eval
SET
@
aux
=
"SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS A,
INFORMATION_SCHEMA.COLUMNS B
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
AND A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME AND
A.TABLE_NAME = 'user'"
;
let
$exec_loop_count
=
3
;
eval
prepare
my_stmt
from
@
aux
;
while
(
$exec_loop_count
)
{
eval
execute
my_stmt
;
dec
$exec_loop_count
;
}
deallocate
prepare
my_stmt
;
# Test CALL in prepared mode
delimiter
|
;
--
disable_warnings
drop
procedure
if
exists
p1
|
drop
table
if
exists
t1
|
--
enable_warnings
create
table
t1
(
id
int
)
|
insert
into
t1
values
(
1
)
|
create
procedure
p1
(
a
int
,
b
int
)
begin
declare
c
int
;
select
max
(
id
)
+
1
into
c
from
t1
;
insert
into
t1
select
a
+
b
;
insert
into
t1
select
a
-
b
;
insert
into
t1
select
a
-
c
;
end
|
set
@
a
=
3
,
@
b
=
4
|
prepare
stmt
from
"call p1(?, ?)"
|
execute
stmt
using
@
a
,
@
b
|
execute
stmt
using
@
a
,
@
b
|
select
*
from
t1
|
deallocate
prepare
stmt
|
drop
procedure
p1
|
drop
table
t1
|
delimiter
;
|
#
# Bug#7306 LIMIT ?, ? and also WL#1785 " Prepared statements: implement
# support for placeholders in LIMIT clause."
# Add basic test coverage for the feature.
#
create
table
t1
(
a
int
);
insert
into
t1
(
a
)
values
(
1
),
(
2
),
(
3
),
(
4
),
(
5
),
(
6
),
(
7
),
(
8
),
(
9
),
(
10
);
prepare
stmt
from
"select * from t1 limit ?, ?"
;
set
@
offset
=
0
,
@
limit
=
1
;
execute
stmt
using
@
offset
,
@
limit
;
select
*
from
t1
limit
0
,
1
;
set
@
offset
=
3
,
@
limit
=
2
;
execute
stmt
using
@
offset
,
@
limit
;
select
*
from
t1
limit
3
,
2
;
prepare
stmt
from
"select * from t1 limit ?"
;
execute
stmt
using
@
limit
;
--
error
1235
prepare
stmt
from
"select * from t1 where a in (select a from t1 limit ?)"
;
prepare
stmt
from
"select * from t1 union all select * from t1 limit ?, ?"
;
set
@
offset
=
9
;
set
@
limit
=
2
;
execute
stmt
using
@
offset
,
@
limit
;
prepare
stmt
from
"(select * from t1 limit ?, ?) union all
(select * from t1 limit ?, ?) order by a limit ?"
;
execute
stmt
using
@
offset
,
@
limit
,
@
offset
,
@
limit
,
@
limit
;
drop
table
t1
;
deallocate
prepare
stmt
;
#
# Bug#12651
# (Crash on a PS including a subquery which is a select from a simple view)
#
CREATE
TABLE
b12651_T1
(
a
int
)
ENGINE
=
MYISAM
;
CREATE
TABLE
b12651_T2
(
b
int
)
ENGINE
=
MYISAM
;
CREATE
VIEW
b12651_V1
as
SELECT
b
FROM
b12651_T2
;
PREPARE
b12651
FROM
'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)'
;
EXECUTE
b12651
;
DROP
VIEW
b12651_V1
;
DROP
TABLE
b12651_T1
,
b12651_T2
;
DEALLOCATE
PREPARE
b12651
;
#
#
# Bug #14956: ROW_COUNT() returns incorrect result after EXECUTE of prepared
# Bug #14956: ROW_COUNT() returns incorrect result after EXECUTE of prepared
...
...
sql/sql_lex.cc
View file @
e4598dae
...
@@ -126,6 +126,7 @@ void lex_start(THD *thd, uchar *buf,uint length)
...
@@ -126,6 +126,7 @@ void lex_start(THD *thd, uchar *buf,uint length)
lex
->
param_list
.
empty
();
lex
->
param_list
.
empty
();
lex
->
view_list
.
empty
();
lex
->
view_list
.
empty
();
lex
->
prepared_stmt_params
.
empty
();
lex
->
prepared_stmt_params
.
empty
();
lex
->
auxilliary_table_list
.
empty
();
lex
->
unit
.
next
=
lex
->
unit
.
master
=
lex
->
unit
.
next
=
lex
->
unit
.
master
=
lex
->
unit
.
link_next
=
lex
->
unit
.
return_to
=
0
;
lex
->
unit
.
link_next
=
lex
->
unit
.
return_to
=
0
;
lex
->
unit
.
prev
=
lex
->
unit
.
link_prev
=
0
;
lex
->
unit
.
prev
=
lex
->
unit
.
link_prev
=
0
;
...
...
sql/sql_prepare.cc
View file @
e4598dae
...
@@ -2131,25 +2131,18 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
...
@@ -2131,25 +2131,18 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
tables
;
tables
;
tables
=
tables
->
next_global
)
tables
=
tables
->
next_global
)
{
{
tables
->
reinit_before_use
(
thd
);
}
/*
/*
Reset old pointers to TABLEs: they are not valid since the tables
Cleanup of the special case of DELETE t1, t2 FROM t1, t2, t3 ...
were closed in the end of previous prepare or execute call.
(multi-delete). We do a full clean up, although at the moment all we
need to clean in the tables of MULTI-DELETE list is 'table' member.
*/
*/
tables
->
table
=
0
;
for
(
TABLE_LIST
*
tables
=
(
TABLE_LIST
*
)
lex
->
auxilliary_table_list
.
first
;
/* Reset is_schema_table_processed value(needed for I_S tables */
tables
;
tables
->
is_schema_table_processed
=
FALSE
;
tables
=
tables
->
next
)
TABLE_LIST
*
embedded
;
/* The table at the current level of nesting. */
TABLE_LIST
*
embedding
=
tables
;
/* The parent nested table reference. */
do
{
{
embedded
=
embedding
;
tables
->
reinit_before_use
(
thd
);
if
(
embedded
->
prep_on_expr
)
embedded
->
on_expr
=
embedded
->
prep_on_expr
->
copy_andor_structure
(
thd
);
embedding
=
embedded
->
embedding
;
}
while
(
embedding
&&
embedding
->
nested_join
->
join_list
.
head
()
==
embedded
);
}
}
lex
->
current_select
=
&
lex
->
select_lex
;
lex
->
current_select
=
&
lex
->
select_lex
;
...
...
sql/table.cc
View file @
e4598dae
...
@@ -2985,6 +2985,23 @@ Field_iterator_table_ref::get_natural_column_ref()
...
@@ -2985,6 +2985,23 @@ Field_iterator_table_ref::get_natural_column_ref()
return
nj_col
;
return
nj_col
;
}
}
/*
Cleanup this table for re-execution.
SYNOPSIS
st_table_list::reinit_before_use()
*/
void
st_table_list
::
reinit_before_use
(
THD
*
/* thd */
)
{
/*
Reset old pointers to TABLEs: they are not valid since the tables
were closed in the end of previous prepare or execute call.
*/
table
=
0
;
table_list
=
0
;
}
/*****************************************************************************
/*****************************************************************************
** Instansiate templates
** Instansiate templates
...
...
sql/table.h
View file @
e4598dae
...
@@ -672,6 +672,11 @@ typedef struct st_table_list
...
@@ -672,6 +672,11 @@ typedef struct st_table_list
private:
private:
bool
prep_check_option
(
THD
*
thd
,
uint8
check_opt_type
);
bool
prep_check_option
(
THD
*
thd
,
uint8
check_opt_type
);
bool
prep_where
(
THD
*
thd
,
Item
**
conds
,
bool
no_where_clause
);
bool
prep_where
(
THD
*
thd
,
Item
**
conds
,
bool
no_where_clause
);
/*
Cleanup for re-execution in a prepared statement or a stored
procedure.
*/
void
reinit_before_use
(
THD
*
thd
);
}
TABLE_LIST
;
}
TABLE_LIST
;
class
Item
;
class
Item
;
...
...
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