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
8cbf1e51
Commit
8cbf1e51
authored
Dec 01, 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-merge1-5.0
parents
ab04ceaf
7796a794
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
215 additions
and
28 deletions
+215
-28
mysql-test/r/query_cache.result
mysql-test/r/query_cache.result
+25
-0
mysql-test/r/view.result
mysql-test/r/view.result
+15
-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
+15
-0
mysql-test/t/view.test
mysql-test/t/view.test
+21
-0
mysql-test/t/view_query_cache.test
mysql-test/t/view_query_cache.test
+31
-0
sql/sql_cache.cc
sql/sql_cache.cc
+25
-15
sql/sql_view.cc
sql/sql_view.cc
+22
-13
No files found.
mysql-test/r/query_cache.result
View file @
8cbf1e51
...
...
@@ -850,6 +850,31 @@ group_concat(a)
set group_concat_max_len=default;
drop table t1;
create table t1 (a int);
flush status;
(select a from t1) union (select a from t1);
a
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 a from t1) union (select a from t1);
a
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
drop table t1;
create table t1 (a int);
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
...
...
mysql-test/r/view.result
View file @
8cbf1e51
...
...
@@ -2424,3 +2424,18 @@ f1 sum(f2)
NULL 12
drop view v1;
drop table t1;
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 @
8cbf1e51
...
...
@@ -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 @
8cbf1e51
...
...
@@ -742,6 +742,21 @@ show status like "Qcache_inserts";
show
status
like
"Qcache_hits"
;
drop
table
t1
;
#
# BUG#14652: Queries with leading '(' characters.
#
create
table
t1
(
a
int
);
flush
status
;
(
select
a
from
t1
)
union
(
select
a
from
t1
);
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_inserts"
;
show
status
like
"Qcache_hits"
;
(
select
a
from
t1
)
union
(
select
a
from
t1
);
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)
#
...
...
mysql-test/t/view.test
View file @
8cbf1e51
...
...
@@ -2280,3 +2280,24 @@ create view v1 as select * from t1;
select
f1
,
sum
(
f2
)
from
v1
group
by
f1
;
drop
view
v1
;
drop
table
t1
;
#
# 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 @
8cbf1e51
...
...
@@ -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/sql_cache.cc
View file @
8cbf1e51
...
...
@@ -977,22 +977,32 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
goto
err
;
}
{
uint
i
=
0
;
/*
Skip '(' characters in queries like following:
(select a from t1) union (select a from t1);
*/
while
(
sql
[
i
]
==
'('
)
i
++
;
/*
Test if the query is a SELECT
(pre-space is removed in dispatch_command).
(pre-space is removed in dispatch_command)
First '/' looks like comment before command it is not
frequently appeared in real lihe, consequently we can
check all such queries, too.
*/
if
((
my_toupper
(
system_charset_info
,
sql
[
0
])
!=
'S'
||
my_toupper
(
system_charset_info
,
sql
[
1
])
!=
'E'
||
my_toupper
(
system_charset_info
,
sql
[
2
])
!=
'L'
)
&&
sql
[
0
]
!=
'/'
)
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
[
i
]
!=
'/'
)
{
DBUG_PRINT
(
"qcache"
,
(
"The statement is not a SELECT; Not cached"
));
goto
err
;
}
}
STRUCT_LOCK
(
&
structure_guard_mutex
);
if
(
query_cache_size
==
0
)
...
...
@@ -2184,7 +2194,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_view.cc
View file @
8cbf1e51
...
...
@@ -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
&&
...
...
@@ -369,6 +360,23 @@ bool mysql_create_view(THD *thd,
goto
err
;
}
/*
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.
*/
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
...
...
@@ -376,6 +384,7 @@ bool mysql_create_view(THD *thd,
*/
tbl
->
table
->
grant
.
privilege
=
tbl
->
grant
.
privilege
;
}
}
/* prepare select to resolve all fields */
lex
->
view_prepare_mode
=
1
;
...
...
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