List:Commits« Previous MessageNext Message »
From:kgeorge Date:November 28 2006 2:48pm
Subject:bk commit into 5.0 tree (gkodinov:1.2317)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of kgeorge. When kgeorge 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@stripped, 2006-11-28 15:47:53+02:00, gkodinov@stripped +9 -0
  Merge gkodinov@stripped:/home/bk/mysql-5.0-opt
  into  rakia.gmz:/home/kgeorge/mysql/autopush/B11927-5.0-opt
  MERGE: 1.2248.104.28

  mysql-test/r/func_gconcat.result@stripped, 2006-11-28 15:47:46+02:00, gkodinov@stripped +0
-0
    Auto merged
    MERGE: 1.62.1.1

  sql/field.cc@stripped, 2006-11-28 15:47:46+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.326.2.4

  sql/item.cc@stripped, 2006-11-28 15:47:46+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.241.1.1

  sql/item.h@stripped, 2006-11-28 15:47:46+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.211.1.1

  sql/item_func.h@stripped, 2006-11-28 15:47:47+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.155.1.2

  sql/item_subselect.h@stripped, 2006-11-28 15:47:47+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.81.1.1

  sql/item_sum.cc@stripped, 2006-11-28 15:47:47+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.181.2.2

  sql/item_sum.h@stripped, 2006-11-28 15:47:47+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.103.1.2

  sql/sql_string.h@stripped, 2006-11-28 15:47:47+02:00, gkodinov@stripped +0 -0
    Auto merged
    MERGE: 1.61.1.1

# 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:	gkodinov
# Host:	rakia.gmz
# Root:	/home/kgeorge/mysql/autopush/B11927-5.0-opt/RESYNC

--- 1.331/sql/field.cc	2006-11-16 21:19:23 +02:00
+++ 1.332/sql/field.cc	2006-11-28 15:47:46 +02:00
@@ -47,6 +47,8 @@ uchar Field_null::null[1]={1};
 const char field_separator=',';
 
 #define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE 320
+#define LONGLONG_TO_STRING_CONVERSION_BUFFER_SIZE 128
+#define DECIMAL_TO_STRING_CONVERSION_BUFFER_SIZE 128
 #define BLOB_PACK_LENGTH_TO_MAX_LENGH(arg) \
 ((ulong) ((LL(1) << min(arg, 4) * 8) - LL(1)))
 
@@ -6056,19 +6058,49 @@ int Field_longstr::store_decimal(const m
 
 double Field_string::val_real(void)
 {
-  int not_used;
-  char *end_not_used;
+  int error;
+  char *end;
   CHARSET_INFO *cs= charset();
-  return my_strntod(cs,ptr,field_length,&end_not_used,&not_used);
+  double result;
+  
+  result=  my_strntod(cs,ptr,field_length,&end,&error);
+  if (!table->in_use->no_errors &&
+      (error || (field_length != (uint32)(end - ptr) && 
+                !check_if_only_end_space(cs, end, ptr + field_length))))
+  {
+    char buf[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
+    String tmp(buf, sizeof(buf), cs);
+    tmp.copy(ptr, field_length, cs);
+    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                        ER_TRUNCATED_WRONG_VALUE, 
+                        ER(ER_TRUNCATED_WRONG_VALUE),
+                        "DOUBLE", tmp.c_ptr());
+  }
+  return result;
 }
 
 
 longlong Field_string::val_int(void)
 {
-  int not_used;
-  char *end_not_used;
-  CHARSET_INFO *cs=charset();
-  return my_strntoll(cs,ptr,field_length,10,&end_not_used,&not_used);
+  int error;
+  char *end;
+  CHARSET_INFO *cs= charset();
+  longlong result;
+
+  result= my_strntoll(cs,ptr,field_length,10,&end,&error);
+  if (!table->in_use->no_errors &&
+      (error || (field_length != (uint32)(end - ptr) && 
+                !check_if_only_end_space(cs, end, ptr + field_length))))
+  {
+    char buf[LONGLONG_TO_STRING_CONVERSION_BUFFER_SIZE];
+    String tmp(buf, sizeof(buf), cs);
+    tmp.copy(ptr, field_length, cs);
+    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                        ER_TRUNCATED_WRONG_VALUE, 
+                        ER(ER_TRUNCATED_WRONG_VALUE),
+                        "INTEGER", tmp.c_ptr());
+  }
+  return result;
 }
 
 
@@ -6085,8 +6117,20 @@ String *Field_string::val_str(String *va
 
 my_decimal *Field_string::val_decimal(my_decimal *decimal_value)
 {
-  str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(),
+  int err= str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(),
                  decimal_value);
+  if (!table->in_use->no_errors && err)
+  {
+    char buf[DECIMAL_TO_STRING_CONVERSION_BUFFER_SIZE];
+    CHARSET_INFO *cs= charset();
+    String tmp(buf, sizeof(buf), cs);
+    tmp.copy(ptr, field_length, cs);
+    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                        ER_TRUNCATED_WRONG_VALUE, 
+                        ER(ER_TRUNCATED_WRONG_VALUE),
+                        "DECIMAL", tmp.c_ptr());
+  }
+
   return decimal_value;
 }
 

--- 1.242/sql/item.cc	2006-11-16 21:19:24 +02:00
+++ 1.243/sql/item.cc	2006-11-28 15:47:46 +02:00
@@ -2175,12 +2175,6 @@ void Item_string::print(String *str)
 }
 
 
-inline bool check_if_only_end_space(CHARSET_INFO *cs, char *str, char *end)
-{
-  return str+ cs->cset->scan(cs, str, end, MY_SEQ_SPACES) == end;
-}
-
-
 double Item_string::val_real()
 {
   DBUG_ASSERT(fixed == 1);
@@ -4764,6 +4758,22 @@ bool Item_field::send(Protocol *protocol
 }
 
 
+void Item_field::update_null_value() 
+{ 
+  /* 
+    need to set no_errors to prevent warnings about type conversion 
+    popping up.
+  */
+  THD *thd= field->table->in_use;
+  int no_errors;
+
+  no_errors= thd->no_errors;
+  thd->no_errors= 1;
+  Item::update_null_value();
+  thd->no_errors= no_errors;
+}
+
+
 Item_ref::Item_ref(Name_resolution_context *context_arg,
                    Item **item, const char *table_name_arg,
                    const char *field_name_arg)
@@ -6120,7 +6130,7 @@ bool Item_cache_row::null_inside()
     }
     else
     {
-      values[i]->val_int();
+      values[i]->update_null_value();
       if (values[i]->null_value)
 	return 1;
     }

--- 1.212/sql/item.h	2006-11-16 21:19:24 +02:00
+++ 1.213/sql/item.h	2006-11-28 15:47:46 +02:00
@@ -704,6 +704,11 @@ public:
   virtual bool is_null() { return 0; }
 
   /*
+   Make sure the null_value member has a correct value.
+  */
+  virtual void update_null_value () { (void) val_int(); }
+
+  /*
     Inform the item that there will be no distinction between its result
     being FALSE or NULL.
 
@@ -1270,6 +1275,7 @@ public:
   bool get_date_result(TIME *ltime,uint fuzzydate);
   bool get_time(TIME *ltime);
   bool is_null() { return field->is_null(); }
+  void update_null_value();
   Item *get_tmp_table_item(THD *thd);
   bool collect_item_field_processor(byte * arg);
   bool find_item_in_field_list_processor(byte *arg);

--- 1.159/sql/item_func.h	2006-11-16 21:19:24 +02:00
+++ 1.160/sql/item_func.h	2006-11-28 15:47:47 +02:00
@@ -157,7 +157,7 @@ public:
     return (null_value=args[0]->get_time(ltime));
   }
   bool is_null() { 
-    (void) val_int();  /* Discard result. It sets null_value as side-effect. */ 
+    update_null_value();
     return null_value; 
   }
   void signal_divide_by_null();
@@ -241,7 +241,7 @@ public:
   virtual double real_op()= 0;
   virtual my_decimal *decimal_op(my_decimal *)= 0;
   virtual String *str_op(String *)= 0;
-  bool is_null() { (void) val_real(); return null_value; }
+  bool is_null() { update_null_value(); return null_value; }
 };
 
 /* function where type of result detected by first argument */

--- 1.189/sql/item_sum.cc	2006-11-16 21:19:24 +02:00
+++ 1.190/sql/item_sum.cc	2006-11-28 15:47:47 +02:00
@@ -1050,7 +1050,7 @@ bool Item_sum_count::add()
     count++;
   else
   {
-    (void) args[0]->val_int();
+    args[0]->update_null_value();
     if (!args[0]->null_value)
       count++;
   }
@@ -1957,7 +1957,7 @@ void Item_sum_count::reset_field()
     nr=1;
   else
   {
-    (void) args[0]->val_int();
+    args[0]->update_null_value();
     if (!args[0]->null_value)
       nr=1;
   }
@@ -2067,7 +2067,7 @@ void Item_sum_count::update_field()
     nr++;
   else
   {
-    (void) args[0]->val_int();
+    args[0]->update_null_value();
     if (!args[0]->null_value)
       nr++;
   }
@@ -2547,7 +2547,7 @@ bool Item_sum_count_distinct::setup(THD 
       return TRUE;                              // End of memory
     if (item->const_item())
     {
-      (void) item->val_int();
+      item->update_null_value();
       if (item->null_value)
 	always_null=1;
     }

--- 1.106/sql/item_sum.h	2006-11-16 21:19:24 +02:00
+++ 1.107/sql/item_sum.h	2006-11-28 15:47:47 +02:00
@@ -618,7 +618,7 @@ public:
   double val_real();
   longlong val_int();
   my_decimal *val_decimal(my_decimal *);
-  bool is_null() { (void) val_int(); return null_value; }
+  bool is_null() { update_null_value(); return null_value; }
   String *val_str(String*);
   enum_field_types field_type() const
   {
@@ -685,7 +685,7 @@ public:
   { /* can't be fix_fields()ed */ return (longlong) rint(val_real()); }
   String *val_str(String*);
   my_decimal *val_decimal(my_decimal *);
-  bool is_null() { (void) val_int(); return null_value; }
+  bool is_null() { update_null_value(); return null_value; }
   enum_field_types field_type() const
   {
     return hybrid_type == DECIMAL_RESULT ?

--- 1.62/sql/sql_string.h	2006-10-30 08:13:58 +02:00
+++ 1.63/sql/sql_string.h	2006-11-28 15:47:47 +02:00
@@ -363,3 +363,9 @@ public:
     return (s->alloced && Ptr >= s->Ptr && Ptr < s->Ptr +
s->str_length);
   }
 };
+
+static inline bool check_if_only_end_space(CHARSET_INFO *cs, char *str, 
+                                           char *end)
+{
+  return str+ cs->cset->scan(cs, str, end, MY_SEQ_SPACES) == end;
+}

--- 1.82/sql/item_subselect.h	2006-11-16 21:19:24 +02:00
+++ 1.83/sql/item_subselect.h	2006-11-28 15:47:47 +02:00
@@ -91,7 +91,7 @@ public:
   enum Type type() const;
   bool is_null()
   {
-    val_int();
+    update_null_value();
     return null_value;
   }
   bool fix_fields(THD *thd, Item **ref);

--- 1.63/mysql-test/r/func_gconcat.result	2006-11-08 15:03:34 +02:00
+++ 1.64/mysql-test/r/func_gconcat.result	2006-11-28 15:47:46 +02:00
@@ -64,11 +64,49 @@ grp	group_concat(a order by a,d+c-ascii(
 1	1
 2	2,3
 3	4,5,6,7,8,9
+Warnings:
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'c         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'E         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'C         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'D         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'c         '
+Warning	1292	Truncated incorrect DOUBLE value: 'D         '
 select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
 grp	group_concat(a order by d+c-ascii(c),a)
 1	1
 2	3,2
 3	7,8,4,6,9,5
+Warnings:
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'c         '
+Warning	1292	Truncated incorrect DOUBLE value: 'a         '
+Warning	1292	Truncated incorrect DOUBLE value: 'E         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'C         '
+Warning	1292	Truncated incorrect DOUBLE value: 'b         '
+Warning	1292	Truncated incorrect DOUBLE value: 'D         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'd         '
+Warning	1292	Truncated incorrect DOUBLE value: 'c         '
+Warning	1292	Truncated incorrect DOUBLE value: 'D         '
 select grp,group_concat(c order by 1) from t1 group by grp;
 grp	group_concat(c order by 1)
 1	a
Thread
bk commit into 5.0 tree (gkodinov:1.2317)kgeorge28 Nov