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
3d2d9c22
Commit
3d2d9c22
authored
Dec 03, 2005
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
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
parents
52bb91cc
58c581ab
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
306 additions
and
29 deletions
+306
-29
mysql-test/r/sp.result
mysql-test/r/sp.result
+54
-0
mysql-test/r/view.result
mysql-test/r/view.result
+27
-0
mysql-test/r/view_query_cache.result
mysql-test/r/view_query_cache.result
+61
-0
mysql-test/t/query_cache.test
mysql-test/t/query_cache.test
+0
-1
mysql-test/t/sp.test
mysql-test/t/sp.test
+45
-0
mysql-test/t/view.test
mysql-test/t/view.test
+40
-0
mysql-test/t/view_query_cache.test
mysql-test/t/view_query_cache.test
+31
-0
sql/sp_head.cc
sql/sp_head.cc
+6
-2
sql/sql_cache.cc
sql/sql_cache.cc
+4
-4
sql/sql_lex.h
sql/sql_lex.h
+2
-2
sql/sql_view.cc
sql/sql_view.cc
+24
-16
sql/sql_yacc.yy
sql/sql_yacc.yy
+12
-4
No files found.
mysql-test/r/sp.result
View file @
3d2d9c22
...
...
@@ -4099,4 +4099,58 @@ call bug14376(4711)|
x
4711
drop procedure bug14376|
drop procedure if exists p1|
Warnings:
Note 1305 PROCEDURE p1 does not exist
drop table if exists t1|
create table t1 (a varchar(255))|
insert into t1 (a) values ("a - table column")|
create procedure p1(a varchar(255))
begin
declare i varchar(255);
declare c cursor for select a from t1;
select a;
select a from t1 into i;
select i as 'Parameter takes precedence over table column'; open c;
fetch c into i;
close c;
select i as 'Parameter takes precedence over table column in cursors';
begin
declare a varchar(255) default 'a - local variable';
declare c1 cursor for select a from t1;
select a as 'A local variable takes precedence over parameter';
open c1;
fetch c1 into i;
close c1;
select i as 'A local variable takes precedence over parameter in cursors';
begin
declare a varchar(255) default 'a - local variable in a nested compound statement';
declare c2 cursor for select a from t1;
select a as 'A local variable in a nested compound statement takes precedence over a local variable in the outer statement';
select a from t1 into i;
select i as 'A local variable in a nested compound statement takes precedence over table column';
open c2;
fetch c2 into i;
close c2;
select i as 'A local variable in a nested compound statement takes precedence over table column in cursors';
end;
end;
end|
call p1("a - stored procedure parameter")|
a
a - stored procedure parameter
Parameter takes precedence over table column
a - stored procedure parameter
Parameter takes precedence over table column in cursors
a - stored procedure parameter
A local variable takes precedence over parameter
a - local variable
A local variable takes precedence over parameter in cursors
a - local variable
A local variable in a nested compound statement takes precedence over a local variable in the outer statement
a - local variable in a nested compound statement
A local variable in a nested compound statement takes precedence over table column
a - local variable in a nested compound statement
A local variable in a nested compound statement takes precedence over table column in cursors
a - local variable in a nested compound statement
drop table t1,t2;
mysql-test/r/view.result
View file @
3d2d9c22
...
...
@@ -2424,3 +2424,30 @@ f1 sum(f2)
NULL 12
drop view v1;
drop table t1;
drop procedure if exists p1;
create procedure p1 () deterministic
begin
create view v1 as select 1;
end;
//
call p1();
show create view v1;
View Create View
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
drop view v1;
drop procedure p1;
CREATE VIEW v1 AS SELECT 42 AS Meaning;
DROP FUNCTION IF EXISTS f1;
CREATE FUNCTION f1() RETURNS INTEGER
BEGIN
DECLARE retn INTEGER;
SELECT Meaning FROM v1 INTO retn;
RETURN retn;
END
//
CREATE VIEW v2 AS SELECT f1();
select * from v2;
f1()
42
drop view v2,v1;
drop function f1;
mysql-test/r/view_query_cache.result
View file @
3d2d9c22
...
...
@@ -132,4 +132,65 @@ unlock tables;
set query_cache_wlock_invalidate=default;
drop view v1;
drop table t1;
flush status;
create table t1 (a int, b int);
create algorithm=temptable view v1 as select * from t1;
select * from v1;
a b
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
select * from v1;
a b
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
insert into t1 values (1,1);
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
select * from v1;
a b
1 1
select * from v1;
a b
1 1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 2
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 2
drop view v1;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 2
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 2
drop table t1;
set GLOBAL query_cache_size=default;
mysql-test/t/query_cache.test
View file @
3d2d9c22
...
...
@@ -760,7 +760,6 @@ show status like "Qcache_queries_in_cache";
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
drop
table
t1
;
# SP cursors and selects with query cache (BUG#9715)
#
create
table
t1
(
a
int
);
...
...
mysql-test/t/sp.test
View file @
3d2d9c22
...
...
@@ -4898,7 +4898,52 @@ call bug14376(4711)|
drop
procedure
bug14376
|
#
# Bug#5967 "Stored procedure declared variable used instead of column"
# The bug should be fixed later.
# Test precedence of names of parameters, variable declarations,
# variable declarations in nested compound statements, table columns,
# table columns in cursor declarations.
# According to the standard, table columns take precedence over
# variable declarations. In MySQL 5.0 it's vice versa.
#
drop
procedure
if
exists
p1
|
drop
table
if
exists
t1
|
create
table
t1
(
a
varchar
(
255
))
|
insert
into
t1
(
a
)
values
(
"a - table column"
)
|
create
procedure
p1
(
a
varchar
(
255
))
begin
declare
i
varchar
(
255
);
declare
c
cursor
for
select
a
from
t1
;
select
a
;
select
a
from
t1
into
i
;
select
i
as
'Parameter takes precedence over table column'
;
open
c
;
fetch
c
into
i
;
close
c
;
select
i
as
'Parameter takes precedence over table column in cursors'
;
begin
declare
a
varchar
(
255
)
default
'a - local variable'
;
declare
c1
cursor
for
select
a
from
t1
;
select
a
as
'A local variable takes precedence over parameter'
;
open
c1
;
fetch
c1
into
i
;
close
c1
;
select
i
as
'A local variable takes precedence over parameter in cursors'
;
begin
declare
a
varchar
(
255
)
default
'a - local variable in a nested compound statement'
;
declare
c2
cursor
for
select
a
from
t1
;
select
a
as
'A local variable in a nested compound statement takes precedence over a local variable in the outer statement'
;
select
a
from
t1
into
i
;
select
i
as
'A local variable in a nested compound statement takes precedence over table column'
;
open
c2
;
fetch
c2
into
i
;
close
c2
;
select
i
as
'A local variable in a nested compound statement takes precedence over table column in cursors'
;
end
;
end
;
end
|
call
p1
(
"a - stored procedure parameter"
)
|
#
# BUG#NNNN: New bug synopsis
...
...
mysql-test/t/view.test
View file @
3d2d9c22
...
...
@@ -2284,3 +2284,43 @@ create view v1 as select * from t1;
select
f1
,
sum
(
f2
)
from
v1
group
by
f1
;
drop
view
v1
;
drop
table
t1
;
#
# BUG#14885: incorrect SOURCE in view created in a procedure
# TODO: here SOURCE string must be shown when it will be possible
#
--
disable_warnings
drop
procedure
if
exists
p1
;
--
enable_warnings
delimiter
//;
create
procedure
p1
()
deterministic
begin
create
view
v1
as
select
1
;
end
;
//
delimiter
;
//
call
p1
();
show
create
view
v1
;
drop
view
v1
;
drop
procedure
p1
;
#
# BUG#15096: using function with view for view creation
#
CREATE
VIEW
v1
AS
SELECT
42
AS
Meaning
;
--
disable_warnings
DROP
FUNCTION
IF
EXISTS
f1
;
--
enable_warnings
DELIMITER
//;
CREATE
FUNCTION
f1
()
RETURNS
INTEGER
BEGIN
DECLARE
retn
INTEGER
;
SELECT
Meaning
FROM
v1
INTO
retn
;
RETURN
retn
;
END
//
DELIMITER
;
//
CREATE
VIEW
v2
AS
SELECT
f1
();
select
*
from
v2
;
drop
view
v2
,
v1
;
drop
function
f1
;
mysql-test/t/view_query_cache.test
View file @
3d2d9c22
...
...
@@ -96,4 +96,35 @@ unlock tables;
set
query_cache_wlock_invalidate
=
default
;
drop
view
v1
;
drop
table
t1
;
#
# BUG#15119: returning temptable view from the query cache.
#
flush
status
;
create
table
t1
(
a
int
,
b
int
);
create
algorithm
=
temptable
view
v1
as
select
*
from
t1
;
select
*
from
v1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
select
*
from
v1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
insert
into
t1
values
(
1
,
1
);
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
select
*
from
v1
;
select
*
from
v1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
drop
view
v1
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
drop
table
t1
;
# Reset default environment.
set
GLOBAL
query_cache_size
=
default
;
sql/sp_head.cc
View file @
3d2d9c22
...
...
@@ -960,8 +960,12 @@ int sp_head::execute(THD *thd)
m_first_instance
->
m_first_free_instance
=
m_next_cached_sp
;
DBUG_PRINT
(
"info"
,
(
"first free for 0x%lx ++: 0x%lx->0x%lx, level: %lu, flags %x"
,
(
ulong
)
m_first_instance
,
this
,
m_next_cached_sp
,
m_next_cached_sp
->
m_recursion_level
,
m_next_cached_sp
->
m_flags
));
(
m_next_cached_sp
?
m_next_cached_sp
->
m_recursion_level
:
0
),
(
m_next_cached_sp
?
m_next_cached_sp
->
m_flags
:
0
)));
/*
Check that if there are not any instances after this one then
pointer to the last instance points on this instance or if there are
...
...
sql/sql_cache.cc
View file @
3d2d9c22
...
...
@@ -996,9 +996,9 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
check all such queries, too.
*/
if
((
my_toupper
(
system_charset_info
,
sql
[
i
])
!=
'S'
||
my_toupper
(
system_charset_info
,
sql
[
i
+
1
])
!=
'E'
||
my_toupper
(
system_charset_info
,
sql
[
i
+
2
])
!=
'L'
)
&&
sql
[
0
]
!=
'/'
)
my_toupper
(
system_charset_info
,
sql
[
i
+
1
])
!=
'E'
||
my_toupper
(
system_charset_info
,
sql
[
i
+
2
])
!=
'L'
)
&&
sql
[
0
]
!=
'/'
)
{
DBUG_PRINT
(
"qcache"
,
(
"The statement is not a SELECT; Not cached"
));
goto
err
;
...
...
@@ -2196,7 +2196,7 @@ Query_cache::register_tables_from_list(TABLE_LIST *tables_used,
tables_used
;
tables_used
=
tables_used
->
next_global
,
n
++
,
block_table
++
)
{
if
(
tables_used
->
derived
)
if
(
tables_used
->
derived
&&
!
tables_used
->
view
)
{
DBUG_PRINT
(
"qcache"
,
(
"derived table skipped"
));
n
--
;
...
...
sql/sql_lex.h
View file @
3d2d9c22
...
...
@@ -754,8 +754,8 @@ typedef struct st_lex
TABLE_LIST
**
query_tables_last
;
/* store original leaf_tables for INSERT SELECT and PS/SP */
TABLE_LIST
*
leaf_tables_insert
;
char
*
create_view_start
;
char
*
create_view_select_start
;
/* Position (first character index) of SELECT of CREATE VIEW statement */
uint
create_view_select_start
;
/* Partition info structure filled in by PARTITION BY parse part */
partition_info
*
part_info
;
...
...
sql/sql_view.cc
View file @
3d2d9c22
...
...
@@ -350,15 +350,6 @@ bool mysql_create_view(THD *thd,
*/
for
(
tbl
=
lex
->
query_tables
;
tbl
;
tbl
=
tbl
->
next_global
)
{
/* is this table temporary and is not view? */
if
(
tbl
->
table
->
s
->
tmp_table
!=
NO_TMP_TABLE
&&
!
tbl
->
view
&&
!
tbl
->
schema_table
)
{
my_error
(
ER_VIEW_SELECT_TMPTABLE
,
MYF
(
0
),
tbl
->
alias
);
res
=
TRUE
;
goto
err
;
}
/* is this table view and the same view which we creates now? */
if
(
tbl
->
view
&&
strcmp
(
tbl
->
view_db
.
str
,
view
->
db
)
==
0
&&
...
...
@@ -370,11 +361,29 @@ bool mysql_create_view(THD *thd,
}
/*
Copy the privileges of the underlying VIEWs which were filled by
fill_effective_table_privileges
(they were not copied at derived tables processing)
tbl->table can be NULL when tbl is a placeholder for a view
that is indirectly referenced via a stored function from the
view being created. We don't check these indirectly
referenced views in CREATE VIEW so they don't have table
object.
*/
tbl
->
table
->
grant
.
privilege
=
tbl
->
grant
.
privilege
;
if
(
tbl
->
table
)
{
/* is this table temporary and is not view? */
if
(
tbl
->
table
->
s
->
tmp_table
!=
NO_TMP_TABLE
&&
!
tbl
->
view
&&
!
tbl
->
schema_table
)
{
my_error
(
ER_VIEW_SELECT_TMPTABLE
,
MYF
(
0
),
tbl
->
alias
);
res
=
TRUE
;
goto
err
;
}
/*
Copy the privileges of the underlying VIEWs which were filled by
fill_effective_table_privileges
(they were not copied at derived tables processing)
*/
tbl
->
table
->
grant
.
privilege
=
tbl
->
grant
.
privilege
;
}
}
/* prepare select to resolve all fields */
...
...
@@ -641,10 +650,9 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
/* fill structure */
view
->
query
.
str
=
(
char
*
)
str
.
ptr
();
view
->
query
.
length
=
str
.
length
()
-
1
;
// we do not need last \0
view
->
source
.
str
=
thd
->
lex
->
create_view_select_start
;
view
->
source
.
str
=
thd
->
query
+
thd
->
lex
->
create_view_select_start
;
view
->
source
.
length
=
(
thd
->
query_length
-
(
thd
->
lex
->
create_view_select_start
-
thd
->
lex
->
create_view_start
));
thd
->
lex
->
create_view_select_start
);
view
->
file_version
=
1
;
view
->
calc_md5
(
md5
);
view
->
md5
.
str
=
md5
;
...
...
sql/sql_yacc.yy
View file @
3d2d9c22
...
...
@@ -3912,7 +3912,6 @@ alter:
THD *thd= YYTHD;
LEX *lex= thd->lex;
lex->sql_command= SQLCOM_CREATE_VIEW;
lex->create_view_start= thd->query;
lex->create_view_mode= VIEW_ALTER;
/* first table in list is target VIEW name */
lex->select_lex.add_table_to_list(thd, $6, NULL, 0);
...
...
@@ -9633,7 +9632,6 @@ view_tail:
THD *thd= YYTHD;
LEX *lex= thd->lex;
lex->sql_command= SQLCOM_CREATE_VIEW;
lex->create_view_start= thd->query;
/* first table in list is target VIEW name */
if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0))
YYABORT;
...
...
@@ -9664,11 +9662,21 @@ view_list:
view_select:
SELECT_SYM remember_name select_init2
{
Lex->create_view_select_start= $2;
THD *thd=YYTHD;
LEX *lex= thd->lex;
char *stmt_beg= (lex->sphead ?
(char *)lex->sphead->m_tmp_query :
thd->query);
lex->create_view_select_start= $2 - stmt_beg;
}
| '(' remember_name select_paren ')' union_opt
{
Lex->create_view_select_start= $2;
THD *thd=YYTHD;
LEX *lex= thd->lex;
char *stmt_beg= (lex->sphead ?
(char *)lex->sphead->m_tmp_query :
thd->query);
lex->create_view_select_start= $2 - stmt_beg;
}
;
...
...
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