List:Internals« Previous MessageNext Message »
From:Alexander Nozdrin Date:October 24 2005 10:54pm
Subject:bk commit into 5.0 tree (anozdrin:1.2028) BUG#13095
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of alik. When alik does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2028 05/10/25 00:54:04 anozdrin@stripped +6 -0
  Fix for BUG#13095: Cannot create VIEWs in prepared statements
    - allow CREATE VIEW as well as DROP VIEW to use in prepared statements;
    - fix CREATE VIEW implementation to make it work in prepared statements.

  sql/sql_yacc.yy
    1.437 05/10/25 00:53:56 anozdrin@stripped +2 -0
    Remember start of whole CREATE VIEW statement as well as start of its
    SELECT part.

  sql/sql_view.cc
    1.71 05/10/25 00:53:55 anozdrin@stripped +2 -1
    Use stored start of whole CREATE VIEW statement instead of thd->query,
    which differs from the original when prepared statement is executing.

  sql/sql_prepare.cc
    1.160 05/10/25 00:53:55 anozdrin@stripped +2 -0
    Allow CREATE VIEW and DROP VIEW to use in prepared statements.

  sql/sql_lex.h
    1.203 05/10/25 00:53:55 anozdrin@stripped +1 -0
    Added a variable to remember start of whole CREATE VIEW statement
    as well as start of its SELECT part.

  mysql-test/t/sp.test
    1.161 05/10/25 00:53:55 anozdrin@stripped +56 -0
    Test case for BUG#13095.

  mysql-test/r/sp.result
    1.167 05/10/25 00:53:55 anozdrin@stripped +43 -0
    Results file for the test case for BUG#13095.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	anozdrin
# Host:	station.home
# Root:	/home/alik/Documents/AllProgs/MySQL/devel/5.0-bug13095

--- 1.202/sql/sql_lex.h	2005-10-21 05:01:32 +04:00
+++ 1.203/sql/sql_lex.h	2005-10-25 00:53:55 +04:00
@@ -738,6 +738,7 @@
   /* store original leaf_tables for INSERT SELECT and PS/SP */
   TABLE_LIST *leaf_tables_insert;
   st_lex_user *create_view_definer;
+  char *create_view_start;
   char *create_view_select_start;
 
   List<key_part_spec> col_list;

--- 1.436/sql/sql_yacc.yy	2005-10-21 15:46:51 +04:00
+++ 1.437/sql/sql_yacc.yy	2005-10-25 00:53:56 +04:00
@@ -1263,6 +1263,7 @@
 	    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, $7, NULL, 0))
               YYABORT;
@@ -3425,6 +3426,7 @@
 	    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);

--- 1.70/sql/sql_view.cc	2005-10-12 01:58:19 +04:00
+++ 1.71/sql/sql_view.cc	2005-10-25 00:53:55 +04:00
@@ -643,7 +643,8 @@
   view->query.length= str.length()-1; // we do not need last \0
   view->source.str= thd->lex->create_view_select_start;
   view->source.length= (thd->query_length -
-                        (thd->lex->create_view_select_start - thd->query));
+                        (thd->lex->create_view_select_start -
+                         thd->lex->create_view_start));
   view->file_version= 1;
   view->calc_md5(md5);
   view->md5.str= md5;

--- 1.166/mysql-test/r/sp.result	2005-10-19 16:54:41 +04:00
+++ 1.167/mysql-test/r/sp.result	2005-10-25 00:53:55 +04:00
@@ -3532,4 +3532,47 @@
 Local
 drop function bug13941|
 drop procedure bug13941|
+DROP PROCEDURE IF EXISTS bug13095;
+DROP TABLE IF EXISTS bug13095_t1;
+DROP VIEW IF EXISTS bug13095_v1;
+CREATE PROCEDURE bug13095(tbl_name varchar(32))
+BEGIN
+SET @str =
+CONCAT("CREATE TABLE ", tbl_name, "(stuff char(15))");
+SELECT @str;
+PREPARE stmt FROM @str;
+EXECUTE stmt;
+SET @str =
+CONCAT("INSERT INTO ", tbl_name, " VALUES('row1'),('row2'),('row3')" );
+SELECT @str;
+PREPARE stmt FROM @str;
+EXECUTE stmt;
+SET @str =
+CONCAT("CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM ", tbl_name);
+SELECT @str;
+PREPARE stmt FROM @str;
+EXECUTE stmt;
+SELECT * FROM bug13095_v1;
+SET @str =
+"DROP VIEW bug13095_v1";
+SELECT @str;
+PREPARE stmt FROM @str;
+EXECUTE stmt;
+END|
+CALL bug13095('bug13095_t1');
+@str
+CREATE TABLE bug13095_t1(stuff char(15))
+@str
+INSERT INTO bug13095_t1 VALUES('row1'),('row2'),('row3')
+@str
+CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM bug13095_t1
+c1
+row1
+row2
+row3
+@str
+DROP VIEW bug13095_v1
+DROP PROCEDURE IF EXISTS bug13095;
+DROP VIEW IF EXISTS bug13095_v1;
+DROP TABLE IF EXISTS bug13095_t1;
 drop table t1,t2;

--- 1.160/mysql-test/t/sp.test	2005-10-19 16:54:41 +04:00
+++ 1.161/mysql-test/t/sp.test	2005-10-25 00:53:55 +04:00
@@ -4434,6 +4434,62 @@
 
 
 #
+# BUG#13095: Cannot create VIEWs in prepared statements
+#
+
+delimiter ;|
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS bug13095;
+DROP TABLE IF EXISTS bug13095_t1;
+DROP VIEW IF EXISTS bug13095_v1;
+--enable_warnings
+
+delimiter |;
+
+CREATE PROCEDURE bug13095(tbl_name varchar(32))
+BEGIN
+  SET @str =
+    CONCAT("CREATE TABLE ", tbl_name, "(stuff char(15))");
+  SELECT @str;
+  PREPARE stmt FROM @str;
+  EXECUTE stmt;
+
+  SET @str =
+    CONCAT("INSERT INTO ", tbl_name, " VALUES('row1'),('row2'),('row3')" );
+  SELECT @str;
+  PREPARE stmt FROM @str;
+  EXECUTE stmt;
+
+  SET @str =
+    CONCAT("CREATE VIEW bug13095_v1(c1) AS SELECT stuff FROM ", tbl_name);
+  SELECT @str;
+  PREPARE stmt FROM @str;
+  EXECUTE stmt;
+
+  SELECT * FROM bug13095_v1;
+
+  SET @str =
+    "DROP VIEW bug13095_v1";
+  SELECT @str;
+  PREPARE stmt FROM @str;
+  EXECUTE stmt;
+END|
+
+delimiter ;|
+
+CALL bug13095('bug13095_t1');
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS bug13095;
+DROP VIEW IF EXISTS bug13095_v1;
+DROP TABLE IF EXISTS bug13095_t1;
+--enable_warnings
+
+delimiter |;
+
+
+#
 # BUG#NNNN: New bug synopsis
 #
 #--disable_warnings

--- 1.159/sql/sql_prepare.cc	2005-10-12 01:58:18 +04:00
+++ 1.160/sql/sql_prepare.cc	2005-10-25 00:53:55 +04:00
@@ -1742,6 +1742,8 @@
   case SQLCOM_ROLLBACK:
   case SQLCOM_TRUNCATE:
   case SQLCOM_CALL:
+  case SQLCOM_CREATE_VIEW:
+  case SQLCOM_DROP_VIEW:
     break;
 
   default:
Thread
bk commit into 5.0 tree (anozdrin:1.2028) BUG#13095Alexander Nozdrin24 Oct