List:Commits« Previous MessageNext Message »
From:dlenev Date:December 12 2005 11:59am
Subject:bk commit into 5.1 tree (dlenev:1.1973)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of dlenev. When dlenev 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.1973 05/12/12 14:59:14 dlenev@stripped +8 -0
  Merge mysql.com:/home/dlenev/src/mysql-5.0-merges
  into  mysql.com:/home/dlenev/src/mysql-5.1-merges

  tests/mysql_client_test.c
    1.167 05/12/12 14:59:06 dlenev@stripped +0 -0
    Auto merged

  sql/sql_parse.cc
    1.496 05/12/12 14:59:06 dlenev@stripped +0 -0
    Auto merged

  sql/sql_base.cc
    1.285 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

  sql/sp_head.h
    1.80 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

  sql/sp_head.cc
    1.207 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

  sql/sp.cc
    1.100 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

  mysql-test/t/view.test
    1.129 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

  mysql-test/r/view.result
    1.141 05/12/12 14:59:05 dlenev@stripped +0 -0
    Auto merged

# 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:	dlenev
# Host:	brandersnatch.site
# Root:	/home/dlenev/src/mysql-5.1-merges/RESYNC

--- 1.284/sql/sql_base.cc	2005-12-07 13:19:38 +03:00
+++ 1.285/sql/sql_base.cc	2005-12-12 14:59:05 +03:00
@@ -2760,7 +2760,7 @@
         if (!query_tables_last_own)
           query_tables_last_own= thd->lex->query_tables_last;
         if (sp_cache_routines_and_add_tables_for_triggers(thd, thd->lex,
-                                                   tables->table->triggers))
+                                                          tables))
         {
           /*
             Serious error during reading stored routines from mysql.proc table.
@@ -2790,8 +2790,7 @@
       /* We have at least one table in TL here. */
       if (!query_tables_last_own)
         query_tables_last_own= thd->lex->query_tables_last;
-      if (sp_cache_routines_and_add_tables_for_view(thd, thd->lex,
-                                                    tables->view))
+      if (sp_cache_routines_and_add_tables_for_view(thd, thd->lex, tables))
       {
         /*
           Serious error during reading stored routines from mysql.proc table.

--- 1.140/mysql-test/r/view.result	2005-12-07 17:17:10 +03:00
+++ 1.141/mysql-test/r/view.result	2005-12-12 14:59:05 +03:00
@@ -1933,11 +1933,11 @@
 DROP TABLE t1;
 CHECK TABLE v1, v2, v3, v4, v5, v6;
 Table	Op	Msg_type	Msg_text
-test.v1	check	error	Table 'test.t1' doesn't exist
+test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 test.v2	check	status	OK
-test.v3	check	error	Table 'test.t1' doesn't exist
+test.v3	check	error	View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 test.v4	check	status	OK
-test.v5	check	error	Table 'test.t1' doesn't exist
+test.v5	check	error	View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
 test.v6	check	status	OK
 drop function f1;
 drop function f2;

--- 1.128/mysql-test/t/view.test	2005-12-03 09:53:14 +03:00
+++ 1.129/mysql-test/t/view.test	2005-12-12 14:59:05 +03:00
@@ -1744,7 +1744,6 @@
 CHECK TABLE v1, v2, v3, v4, v5, v6;
 create function f1 () returns int return (select max(col1) from t1);
 DROP TABLE t1;
-# following will show underlying table until BUG#11555 fix
 CHECK TABLE v1, v2, v3, v4, v5, v6;
 drop function f1;
 drop function f2;

--- 1.99/sql/sp.cc	2005-12-09 14:39:39 +03:00
+++ 1.100/sql/sp.cc	2005-12-12 14:59:05 +03:00
@@ -1200,6 +1200,12 @@
     for LEX::sroutine/sroutine_list and sp_head::m_sroutines.
   */
   Sroutine_hash_entry *next;
+  /*
+    Uppermost view which directly or indirectly uses this routine.
+    0 if routine is not used in view. Note that it also can be 0 if
+    statement uses routine both via view and directly.
+  */
+  TABLE_LIST *belong_to_view;
 };
 
 
@@ -1254,9 +1260,11 @@
 
   SYNOPSIS
     add_used_routine()
-      lex     - LEX representing statement
-      arena   - arena in which memory for new element will be allocated
-      key     - key for the hash representing set
+      lex             LEX representing statement
+      arena           Arena in which memory for new element will be allocated
+      key             Key for the hash representing set
+      belong_to_view  Uppermost view which uses this routine
+                      (0 if routine is not used by view)
 
   NOTES
     Will also add element to end of 'LEX::sroutines_list' list.
@@ -1279,7 +1287,8 @@
 */
 
 static bool add_used_routine(LEX *lex, Query_arena *arena,
-                             const LEX_STRING *key)
+                             const LEX_STRING *key,
+                             TABLE_LIST *belong_to_view)
 {
   if (!hash_search(&lex->sroutines, (byte *)key->str, key->length))
   {
@@ -1293,6 +1302,7 @@
     memcpy(rn->key.str, key->str, key->length);
     my_hash_insert(&lex->sroutines, (byte *)rn);
     lex->sroutines_list.link_in_list((byte *)rn, (byte **)&rn->next);
+    rn->belong_to_view= belong_to_view;
     return TRUE;
   }
   return FALSE;
@@ -1323,7 +1333,7 @@
                          sp_name *rt, char rt_type)
 {
   rt->set_routine_type(rt_type);
-  (void)add_used_routine(lex, arena, &rt->m_sroutines_key);
+  (void)add_used_routine(lex, arena, &rt->m_sroutines_key, 0);
   lex->sroutines_list_own_last= lex->sroutines_list.next;
   lex->sroutines_list_own_elements= lex->sroutines_list.elements;
 }
@@ -1393,20 +1403,23 @@
 
   SYNOPSIS
     sp_update_stmt_used_routines()
-      thd - thread context
-      lex - LEX representing statement
-      src - hash representing set from which routines will be added
+      thd             Thread context
+      lex             LEX representing statement
+      src             Hash representing set from which routines will be added
+      belong_to_view  Uppermost view which uses these routines, 0 if none
 
   NOTE
     It will also add elements to end of 'LEX::sroutines_list' list.
 */
 
-static void sp_update_stmt_used_routines(THD *thd, LEX *lex, HASH *src)
+static void
+sp_update_stmt_used_routines(THD *thd, LEX *lex, HASH *src,
+                             TABLE_LIST *belong_to_view)
 {
   for (uint i=0 ; i < src->records ; i++)
   {
     Sroutine_hash_entry *rt= (Sroutine_hash_entry *)hash_element(src, i);
-    (void)add_used_routine(lex, thd->stmt_arena, &rt->key);
+    (void)add_used_routine(lex, thd->stmt_arena, &rt->key, belong_to_view);
   }
 }
 
@@ -1417,19 +1430,21 @@
 
   SYNOPSIS
     sp_update_stmt_used_routines()
-      thd  Thread context
-      lex  LEX representing statement
-      src  List representing set from which routines will be added
+      thd             Thread context
+      lex             LEX representing statement
+      src             List representing set from which routines will be added
+      belong_to_view  Uppermost view which uses these routines, 0 if none
 
   NOTE
     It will also add elements to end of 'LEX::sroutines_list' list.
 */
 
-static void sp_update_stmt_used_routines(THD *thd, LEX *lex, SQL_LIST *src)
+static void sp_update_stmt_used_routines(THD *thd, LEX *lex, SQL_LIST *src,
+                                         TABLE_LIST *belong_to_view)
 {
   for (Sroutine_hash_entry *rt= (Sroutine_hash_entry *)src->first;
        rt; rt= rt->next)
-    (void)add_used_routine(lex, thd->stmt_arena, &rt->key);
+    (void)add_used_routine(lex, thd->stmt_arena, &rt->key, belong_to_view);
 }
 
 
@@ -1534,9 +1549,11 @@
     {
       if (!(first && first_no_prelock))
       {
-        sp_update_stmt_used_routines(thd, lex, &sp->m_sroutines);
+        sp_update_stmt_used_routines(thd, lex, &sp->m_sroutines,
+                                     rt->belong_to_view);
         tabschnd|=
-          sp->add_used_tables_to_table_list(thd, &lex->query_tables_last);
+          sp->add_used_tables_to_table_list(thd, &lex->query_tables_last,
+                                            rt->belong_to_view);
       }
     }
     first= FALSE;
@@ -1582,21 +1599,22 @@
 
   SYNOPSIS
     sp_cache_routines_and_add_tables_for_view()
-      thd     - thread context
-      lex     - LEX representing statement
-      aux_lex - LEX representing view
-                         
+      thd   Thread context
+      lex   LEX representing statement
+      view  Table list element representing view
+
   RETURN VALUE
      0     - success
      non-0 - failure
 */
 
 int
-sp_cache_routines_and_add_tables_for_view(THD *thd, LEX *lex, LEX *aux_lex)
+sp_cache_routines_and_add_tables_for_view(THD *thd, LEX *lex, TABLE_LIST *view)
 {
   Sroutine_hash_entry **last_cached_routine_ptr=
                           (Sroutine_hash_entry **)lex->sroutines_list.next;
-  sp_update_stmt_used_routines(thd, lex, &aux_lex->sroutines_list);
+  sp_update_stmt_used_routines(thd, lex, &view->view->sroutines_list,
+                               view->top_table());
   return sp_cache_routines_and_add_tables_aux(thd, lex, 
                                               *last_cached_routine_ptr, FALSE,
                                               NULL);
@@ -1610,9 +1628,9 @@
 
   SYNOPSIS
     sp_cache_routines_and_add_tables_for_triggers()
-      thd      - thread context
-      lex      - LEX respresenting statement
-      triggers - triggers of the table
+      thd    thread context
+      lex    LEX respresenting statement
+      table  Table list element for table with trigger
 
   RETURN VALUE
      0     - success
@@ -1621,11 +1639,12 @@
 
 int
 sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,
-                                              Table_triggers_list *triggers)
+                                              TABLE_LIST *table)
 {
   int ret= 0;
-
-  if (add_used_routine(lex, thd->stmt_arena, &triggers->sroutines_key))
+  Table_triggers_list *triggers= table->table->triggers;
+  if (add_used_routine(lex, thd->stmt_arena, &triggers->sroutines_key,
+                       table->belong_to_view))
   {
     Sroutine_hash_entry **last_cached_routine_ptr=
                             (Sroutine_hash_entry **)lex->sroutines_list.next;
@@ -1635,10 +1654,12 @@
       {
         if (triggers->bodies[i][j])
         {
-          (void)triggers->bodies[i][j]->add_used_tables_to_table_list(thd,
-                                          &lex->query_tables_last);
+          (void)triggers->bodies[i][j]->
+                add_used_tables_to_table_list(thd, &lex->query_tables_last,
+                                              table->belong_to_view);
           sp_update_stmt_used_routines(thd, lex,
-                                       &triggers->bodies[i][j]->m_sroutines);
+                                       &triggers->bodies[i][j]->m_sroutines,
+                                       table->belong_to_view);
         }
       }
     }

--- 1.206/sql/sp_head.cc	2005-12-12 13:29:42 +03:00
+++ 1.207/sql/sp_head.cc	2005-12-12 14:59:05 +03:00
@@ -3244,10 +3244,12 @@
 
   SYNOPSIS
     add_used_tables_to_table_list()
-      thd                   - thread context
-      query_tables_last_ptr - (in/out) pointer the next_global member of last
-                              element of the list where tables will be added
-                              (or to its root).
+      thd                    [in]     Thread context
+      query_tables_last_ptr  [in/out] Pointer to the next_global member of
+                                      last element of the list where tables
+                                      will be added (or to its root).
+      belong_to_view         [in]     Uppermost view which uses this routine,
+                                      0 if none.
 
   DESCRIPTION
     Converts multi-set of tables used by this routine to table list and adds
@@ -3262,7 +3264,8 @@
 
 bool
 sp_head::add_used_tables_to_table_list(THD *thd,
-                                       TABLE_LIST ***query_tables_last_ptr)
+                                       TABLE_LIST ***query_tables_last_ptr,
+                                       TABLE_LIST *belong_to_view)
 {
   uint i;
   Query_arena *arena, backup;
@@ -3305,6 +3308,7 @@
       table->lock_type= stab->lock_type;
       table->cacheable_table= 1;
       table->prelocking_placeholder= 1;
+      table->belong_to_view= belong_to_view;
 
       /* Everyting else should be zeroed */
 

--- 1.79/sql/sp_head.h	2005-12-09 14:39:39 +03:00
+++ 1.80/sql/sp_head.h	2005-12-12 14:59:05 +03:00
@@ -310,7 +310,8 @@
 
   /* Add tables used by routine to the table list. */
   bool add_used_tables_to_table_list(THD *thd,
-                                     TABLE_LIST ***query_tables_last_ptr);
+                                     TABLE_LIST ***query_tables_last_ptr,
+                                     TABLE_LIST *belong_to_view);
 
   /*
     Check if this stored routine contains statements disallowed

--- 1.166/tests/mysql_client_test.c	2005-12-02 18:27:13 +03:00
+++ 1.167/tests/mysql_client_test.c	2005-12-12 14:59:06 +03:00
@@ -14590,6 +14590,40 @@
   myquery(rc);
 }
 
+
+/*
+  Bug #15510: mysql_warning_count returns 0 after mysql_stmt_fetch which
+  should warn
+*/
+static void test_bug15510()
+{
+  MYSQL_STMT *stmt;
+  MYSQL_RES *res;
+  int rc;
+  const char *query= "select 1 from dual where 1/0";
+
+  myheader("test_bug15510");
+
+  rc= mysql_query(mysql, "set @@sql_mode='ERROR_FOR_DIVISION_BY_ZERO'");
+  myquery(rc);
+
+  stmt= mysql_stmt_init(mysql);
+
+  rc= mysql_stmt_prepare(stmt, query, strlen(query));
+  check_execute(stmt, rc);
+
+  rc= mysql_stmt_execute(stmt);
+  check_execute(stmt, rc);
+
+  rc= mysql_stmt_fetch(stmt);
+  DIE_UNLESS(mysql_warning_count(mysql));
+
+  /* Cleanup */
+  mysql_stmt_close(stmt);
+  rc= mysql_query(mysql, "set @@sql_mode=''");
+  myquery(rc);
+}
+
 /*
   Read and parse arguments and MySQL options from my.cnf
 */
@@ -14849,6 +14883,7 @@
   { "test_bug13488", test_bug13488 },
   { "test_bug13524", test_bug13524 },
   { "test_bug14845", test_bug14845 },
+  { "test_bug15510", test_bug15510},
   { 0, 0 }
 };
 
Thread
bk commit into 5.1 tree (dlenev:1.1973)dlenev12 Dec