List:Commits« Previous MessageNext Message »
From:pem Date:March 2 2006 1:54pm
Subject:bk commit into 5.0 tree (pem:1.2095) BUG#17476
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of pem. When pem 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.2095 06/03/02 14:54:04 pem@stripped +4 -0
  Fixed BUG#17476: Stored procedure not returning data when it is called first
                   time per connection
    Removed const_string() method from Item_string (it was only used in one
    place, in a bad way). Defer possible SP variable, and access data directly
    instead, in date_format item.

  sql/item_timefunc.cc
    1.103 06/03/02 14:54:00 pem@stripped +10 -3
    Must defer a (possible) local SP variable to use max_length and str_value
    in Item_func_date_format::fix_length_and_dec(), and refer to str_value
    directly without the const_string() method (now removed); the cast didn't
    work in all cases anyway.

  sql/item.h
    1.189 06/03/02 14:54:00 pem@stripped +0 -1
    Removed const_string() from Item_string.
    It was only used in one place, and we can just use str_value in Item directly.

  mysql-test/t/sp.test
    1.178 06/03/02 14:54:00 pem@stripped +25 -0
    New test case (BUG#17476)

  mysql-test/r/sp.result
    1.189 06/03/02 14:54:00 pem@stripped +19 -0
    Updated results for new test (BUG#17476).

# 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:	pem
# Host:	pem.mysql.com
# Root:	/extern/mysql/5.0/bug17476/mysql-5.0

--- 1.188/sql/item.h	2006-03-01 12:48:52 +01:00
+++ 1.189/sql/item.h	2006-03-02 14:54:00 +01:00
@@ -1585,7 +1585,6 @@
     			   str_value.length(), collation.collation);
   }
   Item *safe_charset_converter(CHARSET_INFO *tocs);
-  String *const_string() { return &str_value; }
   inline void append(char *str, uint length) { str_value.append(str, length); }
   void print(String *str);
   // to prevent drop fixed flag (no need parent cleanup call)

--- 1.102/sql/item_timefunc.cc	2006-02-02 21:35:16 +01:00
+++ 1.103/sql/item_timefunc.cc	2006-03-02 14:54:00 +01:00
@@ -1605,9 +1605,15 @@
 
 void Item_func_date_format::fix_length_and_dec()
 {
+  /*
+    Must use this_item() in case it's a local SP variable
+    (for ->max_length and ->str_value)
+  */
+  Item *arg1= args[1]->this_item();
+
   decimals=0;
   collation.set(&my_charset_bin);
-  if (args[1]->type() == STRING_ITEM)
+  if (arg1->type() == STRING_ITEM)
   {						// Optimize the normal case
     fixed_length=1;
 
@@ -1615,13 +1621,13 @@
       The result is a binary string (no reason to use collation->mbmaxlen
       This is becasue make_date_time() only returns binary strings
     */
-    max_length= format_length(((Item_string*) args[1])->const_string());
+    max_length= format_length(&arg1->str_value);
   }
   else
   {
     fixed_length=0;
     /* The result is a binary string (no reason to use collation->mbmaxlen */
-    max_length=min(args[1]->max_length,MAX_BLOB_WIDTH) * 10;
+    max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10;
     set_if_smaller(max_length,MAX_BLOB_WIDTH);
   }
   maybe_null=1;					// If wrong date
@@ -1631,6 +1637,7 @@
 bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const
 {
   Item_func_date_format *item_func;
+
   if (item->type() != FUNC_ITEM)
     return 0;
   if (func_name() != ((Item_func*) item)->func_name())

--- 1.188/mysql-test/r/sp.result	2006-02-24 17:34:08 +01:00
+++ 1.189/mysql-test/r/sp.result	2006-03-02 14:54:00 +01:00
@@ -4768,4 +4768,23 @@
 Inner
 drop procedure bug15011|
 drop table t3|
+drop procedure if exists bug17476|
+create table t3 ( d date )|
+insert into t3 values
+( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ),
+( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )|
+create procedure bug17476(pDateFormat varchar(10))
+select date_format(t3.d, pDateFormat), count(*)
+from t3 
+group by date_format(t3.d, pDateFormat)|
+call bug17476('%Y-%m')|
+date_format(t3.d, pDateFormat)	count(*)
+2005-01	4
+2005-02	2
+call bug17476('%Y-%m')|
+date_format(t3.d, pDateFormat)	count(*)
+2005-01	4
+2005-02	2
+drop table t3|
+drop procedure bug17476|
 drop table t1,t2;

--- 1.177/mysql-test/t/sp.test	2006-02-24 17:34:08 +01:00
+++ 1.178/mysql-test/t/sp.test	2006-03-02 14:54:00 +01:00
@@ -5616,6 +5616,31 @@
 
 
 #
+# BUG#17476: Stored procedure not returning data when it is called first
+#            time per connection
+#
+--disable_warnings
+drop procedure if exists bug17476|
+--enable_warnings
+
+create table t3 ( d date )|
+insert into t3 values
+  ( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ),
+  ( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )|
+
+create procedure bug17476(pDateFormat varchar(10))
+  select date_format(t3.d, pDateFormat), count(*)
+    from t3 
+    group by date_format(t3.d, pDateFormat)|
+
+call bug17476('%Y-%m')|
+call bug17476('%Y-%m')|
+
+drop table t3|
+drop procedure bug17476|
+
+
+#
 # BUG#NNNN: New bug synopsis
 #
 #--disable_warnings
Thread
bk commit into 5.0 tree (pem:1.2095) BUG#17476pem2 Mar