MySQL Lists are EOL. Please join:

List:Internals« Previous MessageNext Message »
From:sanja Date:November 30 2005 12:48pm
Subject:bk commit into 5.0 tree (bell:1.2017) BUG#14885
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of bell. When bell 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.2017 05/11/30 14:48:42 bell@stripped +6 -0
  Now we shell store only position (index of first character)
  of SELECT from query begining, to be independed of query buffer
  allocation.
  Correct procedure used to find begining of the current statement
  during parsing (BUG#14885).

  sql/sql_yacc.yy
    1.447 05/11/30 14:48:38 bell@stripped +12 -4
    Now we shell store only position (index of first character)
    of SELECT from query begining.
    Correct procedure used to find begining of the current statement
    during parsing.

  sql/sql_view.cc
    1.79 05/11/30 14:48:38 bell@stripped +2 -3
    Position of the SELECT used to output it to .frm.

  sql/sql_lex.h
    1.209 05/11/30 14:48:38 bell@stripped +2 -2
    Now we shell store only position (index of first character)
    of SELECT from query begining.

  sql/sp_head.cc
    1.203 05/11/30 14:48:38 bell@stripped +6 -2
    The debug print statement fixed to prevent crash in case of NULL
    in m_next_cached_sp.

  mysql-test/t/view.test
    1.127 05/11/30 14:48:38 bell@stripped +19 -0
    BUG#14885 test suite.

  mysql-test/r/view.result
    1.137 05/11/30 14:48:38 bell@stripped +12 -0
    BUG#14885 test suite.

# 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:	bell
# Host:	sanja.is.com.ua
# Root:	/home/bell/mysql/bk/work-bug1-5.0

--- 1.208/sql/sql_lex.h	2005-11-17 12:11:40 +02:00
+++ 1.209/sql/sql_lex.h	2005-11-30 14:48:38 +02:00
@@ -738,8 +738,8 @@
   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;
 
   /*
     The definer of the object being created (view, trigger, stored routine).

--- 1.446/sql/sql_yacc.yy	2005-11-23 12:26:03 +02:00
+++ 1.447/sql/sql_yacc.yy	2005-11-30 14:48:38 +02:00
@@ -3374,7 +3374,6 @@
 	    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);
@@ -8978,7 +8977,6 @@
 	  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;
@@ -9009,11 +9007,21 @@
 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;
 	}
 	;
 

--- 1.136/mysql-test/r/view.result	2005-11-18 16:26:43 +02:00
+++ 1.137/mysql-test/r/view.result	2005-11-30 14:48:38 +02:00
@@ -2424,3 +2424,15 @@
 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;

--- 1.126/mysql-test/t/view.test	2005-11-18 16:26:43 +02:00
+++ 1.127/mysql-test/t/view.test	2005-11-30 14:48:38 +02:00
@@ -2280,3 +2280,22 @@
 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;

--- 1.78/sql/sql_view.cc	2005-11-21 21:15:43 +02:00
+++ 1.79/sql/sql_view.cc	2005-11-30 14:48:38 +02:00
@@ -641,10 +641,9 @@
   /* 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;

--- 1.202/sql/sp_head.cc	2005-11-23 01:12:35 +02:00
+++ 1.203/sql/sp_head.cc	2005-11-30 14:48:38 +02:00
@@ -954,8 +954,12 @@
   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
Thread
bk commit into 5.0 tree (bell:1.2017) BUG#14885sanja30 Nov