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
This commit is contained in:
commit
3d2d9c2259
@ -4099,4 +4099,58 @@ call bug14376(4711)|
|
|||||||
x
|
x
|
||||||
4711
|
4711
|
||||||
drop procedure bug14376|
|
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;
|
drop table t1,t2;
|
||||||
|
@ -2424,3 +2424,30 @@ f1 sum(f2)
|
|||||||
NULL 12
|
NULL 12
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
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;
|
||||||
|
@ -132,4 +132,65 @@ unlock tables;
|
|||||||
set query_cache_wlock_invalidate=default;
|
set query_cache_wlock_invalidate=default;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
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;
|
set GLOBAL query_cache_size=default;
|
||||||
|
@ -760,7 +760,6 @@ show status like "Qcache_queries_in_cache";
|
|||||||
show status like "Qcache_inserts";
|
show status like "Qcache_inserts";
|
||||||
show status like "Qcache_hits";
|
show status like "Qcache_hits";
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# SP cursors and selects with query cache (BUG#9715)
|
# SP cursors and selects with query cache (BUG#9715)
|
||||||
#
|
#
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
|
@ -4898,7 +4898,52 @@ call bug14376(4711)|
|
|||||||
|
|
||||||
drop procedure bug14376|
|
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
|
# BUG#NNNN: New bug synopsis
|
||||||
|
@ -2284,3 +2284,43 @@ create view v1 as select * from t1;
|
|||||||
select f1, sum(f2) from v1 group by f1;
|
select f1, sum(f2) from v1 group by f1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
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;
|
||||||
|
@ -96,4 +96,35 @@ unlock tables;
|
|||||||
set query_cache_wlock_invalidate=default;
|
set query_cache_wlock_invalidate=default;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
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;
|
set GLOBAL query_cache_size=default;
|
||||||
|
@ -960,8 +960,12 @@ int sp_head::execute(THD *thd)
|
|||||||
m_first_instance->m_first_free_instance= m_next_cached_sp;
|
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",
|
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,
|
(ulong)m_first_instance, this, m_next_cached_sp,
|
||||||
m_next_cached_sp->m_recursion_level,
|
(m_next_cached_sp ?
|
||||||
m_next_cached_sp->m_flags));
|
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
|
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
|
pointer to the last instance points on this instance or if there are
|
||||||
|
@ -996,9 +996,9 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
|
|||||||
check all such queries, too.
|
check all such queries, too.
|
||||||
*/
|
*/
|
||||||
if ((my_toupper(system_charset_info, sql[i]) != 'S' ||
|
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 + 1]) != 'E' ||
|
||||||
my_toupper(system_charset_info, sql[i + 2]) != 'L') &&
|
my_toupper(system_charset_info, sql[i + 2]) != 'L') &&
|
||||||
sql[0] != '/')
|
sql[0] != '/')
|
||||||
{
|
{
|
||||||
DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached"));
|
DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached"));
|
||||||
goto err;
|
goto err;
|
||||||
@ -2196,7 +2196,7 @@ Query_cache::register_tables_from_list(TABLE_LIST *tables_used,
|
|||||||
tables_used;
|
tables_used;
|
||||||
tables_used= tables_used->next_global, n++, block_table++)
|
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"));
|
DBUG_PRINT("qcache", ("derived table skipped"));
|
||||||
n--;
|
n--;
|
||||||
|
@ -754,8 +754,8 @@ typedef struct st_lex
|
|||||||
TABLE_LIST **query_tables_last;
|
TABLE_LIST **query_tables_last;
|
||||||
/* store original leaf_tables for INSERT SELECT and PS/SP */
|
/* store original leaf_tables for INSERT SELECT and PS/SP */
|
||||||
TABLE_LIST *leaf_tables_insert;
|
TABLE_LIST *leaf_tables_insert;
|
||||||
char *create_view_start;
|
/* Position (first character index) of SELECT of CREATE VIEW statement */
|
||||||
char *create_view_select_start;
|
uint create_view_select_start;
|
||||||
/* Partition info structure filled in by PARTITION BY parse part */
|
/* Partition info structure filled in by PARTITION BY parse part */
|
||||||
partition_info *part_info;
|
partition_info *part_info;
|
||||||
|
|
||||||
|
@ -350,15 +350,6 @@ bool mysql_create_view(THD *thd,
|
|||||||
*/
|
*/
|
||||||
for (tbl= lex->query_tables; tbl; tbl= tbl->next_global)
|
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? */
|
/* is this table view and the same view which we creates now? */
|
||||||
if (tbl->view &&
|
if (tbl->view &&
|
||||||
strcmp(tbl->view_db.str, view->db) == 0 &&
|
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
|
tbl->table can be NULL when tbl is a placeholder for a view
|
||||||
fill_effective_table_privileges
|
that is indirectly referenced via a stored function from the
|
||||||
(they were not copied at derived tables processing)
|
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 */
|
/* prepare select to resolve all fields */
|
||||||
@ -641,10 +650,9 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
|
|||||||
/* fill structure */
|
/* fill structure */
|
||||||
view->query.str= (char*)str.ptr();
|
view->query.str= (char*)str.ptr();
|
||||||
view->query.length= str.length()-1; // we do not need last \0
|
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 -
|
view->source.length= (thd->query_length -
|
||||||
(thd->lex->create_view_select_start -
|
thd->lex->create_view_select_start);
|
||||||
thd->lex->create_view_start));
|
|
||||||
view->file_version= 1;
|
view->file_version= 1;
|
||||||
view->calc_md5(md5);
|
view->calc_md5(md5);
|
||||||
view->md5.str= md5;
|
view->md5.str= md5;
|
||||||
|
@ -3912,7 +3912,6 @@ alter:
|
|||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
LEX *lex= thd->lex;
|
LEX *lex= thd->lex;
|
||||||
lex->sql_command= SQLCOM_CREATE_VIEW;
|
lex->sql_command= SQLCOM_CREATE_VIEW;
|
||||||
lex->create_view_start= thd->query;
|
|
||||||
lex->create_view_mode= VIEW_ALTER;
|
lex->create_view_mode= VIEW_ALTER;
|
||||||
/* first table in list is target VIEW name */
|
/* first table in list is target VIEW name */
|
||||||
lex->select_lex.add_table_to_list(thd, $6, NULL, 0);
|
lex->select_lex.add_table_to_list(thd, $6, NULL, 0);
|
||||||
@ -9633,7 +9632,6 @@ view_tail:
|
|||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
LEX *lex= thd->lex;
|
LEX *lex= thd->lex;
|
||||||
lex->sql_command= SQLCOM_CREATE_VIEW;
|
lex->sql_command= SQLCOM_CREATE_VIEW;
|
||||||
lex->create_view_start= thd->query;
|
|
||||||
/* first table in list is target VIEW name */
|
/* first table in list is target VIEW name */
|
||||||
if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0))
|
if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0))
|
||||||
YYABORT;
|
YYABORT;
|
||||||
@ -9664,11 +9662,21 @@ view_list:
|
|||||||
view_select:
|
view_select:
|
||||||
SELECT_SYM remember_name select_init2
|
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
|
| '(' 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;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user