List:Commits« Previous MessageNext Message »
From:holyfoot Date:December 7 2006 5:27am
Subject:bk commit into 5.1 tree (holyfoot:1.2347)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of hf. When hf 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-12-07 09:27:47+04:00, holyfoot@deer.(none) +5 -0
  Merge mysql.com:/home/hf/work/22372/my50-22372
  into  mysql.com:/home/hf/work/22372/my51-22372
  MERGE: 1.1810.1698.203

  mysql-test/r/gis.result@stripped, 2006-12-07 09:25:42+04:00, holyfoot@deer.(none) +0 -0
    SCCS merged
    MERGE: 1.35.1.2

  mysql-test/t/gis.test@stripped, 2006-12-07 09:12:48+04:00, holyfoot@deer.(none) +0 -0
    Auto merged
    MERGE: 1.29.1.1

  sql/field.cc@stripped, 2006-12-07 09:12:48+04:00, holyfoot@deer.(none) +0 -0
    Auto merged
    MERGE: 1.256.1.79

  sql/field.h@stripped, 2006-12-07 09:27:37+04:00, holyfoot@deer.(none) +0 -1
    merging
    MERGE: 1.153.12.7

  sql/sql_load.cc@stripped, 2006-12-07 09:12:49+04:00, holyfoot@deer.(none) +0 -0
    Auto merged
    MERGE: 1.78.1.24

# 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:	holyfoot
# Host:	deer.(none)
# Root:	/home/hf/work/22372/my51-22372/RESYNC

--- 1.359/sql/field.cc	2006-12-07 09:27:55 +04:00
+++ 1.360/sql/field.cc	2006-12-07 09:27:55 +04:00
@@ -1609,10 +1609,11 @@ void Field_null::sql_type(String &res) c
   This is an number stored as a pre-space (or pre-zero) string
 ****************************************************************************/
 
-void
+int
 Field_decimal::reset(void)
 {
   Field_decimal::store(STRING_WITH_LEN("0"),&my_charset_bin);
+  return 0;
 }
 
 void Field_decimal::overflow(bool negative)
@@ -2257,9 +2258,10 @@ Field_new_decimal::Field_new_decimal(uin
 }
 
 
-void Field_new_decimal::reset(void)
+int Field_new_decimal::reset(void)
 {
   store_value(&decimal_zero);
+  return 0;
 }
 
 

--- 1.196/sql/field.h	2006-12-07 09:27:55 +04:00
+++ 1.197/sql/field.h	2006-12-07 09:27:55 +04:00
@@ -155,7 +155,7 @@ public:
   */
   virtual uint32 data_length() { return pack_length(); }
   virtual uint32 sort_length() const { return pack_length(); }
-  virtual void reset(void) { bzero(ptr,pack_length()); }
+  virtual int reset(void) { bzero(ptr,pack_length()); return 0; }
   virtual void reset_fields() {}
   virtual void set_default()
   {
@@ -521,10 +521,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_DECIMAL;}
   enum ha_base_keytype key_type() const
   { return zerofill ? HA_KEYTYPE_BINARY : HA_KEYTYPE_NUM; }
-  void reset(void);
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
+  int reset(void);
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -559,7 +559,7 @@ public:
   enum_field_types type() const { return FIELD_TYPE_NEWDECIMAL;}
   enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; }
   Item_result result_type () const { return DECIMAL_RESULT; }
-  void reset(void);
+  int  reset(void);
   bool store_value(const my_decimal *decimal_value);
   void set_value_on_overflow(my_decimal *decimal_value, bool sign);
   int  store(const char *to, uint length, CHARSET_INFO *charset);
@@ -596,10 +596,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_TINY;}
   enum ha_base_keytype key_type() const
     { return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { ptr[0]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -631,10 +631,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_SHORT;}
   enum ha_base_keytype key_type() const
     { return unsigned_flag ? HA_KEYTYPE_USHORT_INT : HA_KEYTYPE_SHORT_INT;}
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { ptr[0]=ptr[1]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -661,10 +661,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_INT24;}
   enum ha_base_keytype key_type() const
     { return unsigned_flag ? HA_KEYTYPE_UINT24 : HA_KEYTYPE_INT24; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
   int store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; }
+  int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -696,10 +696,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_LONG;}
   enum ha_base_keytype key_type() const
     { return unsigned_flag ? HA_KEYTYPE_ULONG_INT : HA_KEYTYPE_LONG_INT; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   bool send_binary(Protocol *protocol);
@@ -733,10 +733,14 @@ public:
   enum_field_types type() const { return FIELD_TYPE_LONGLONG;}
   enum ha_base_keytype key_type() const
     { return unsigned_flag ? HA_KEYTYPE_ULONGLONG : HA_KEYTYPE_LONGLONG; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void)
+  {
+    ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0;
+    return 0;
+  }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -768,10 +772,10 @@ public:
     {}
   enum_field_types type() const { return FIELD_TYPE_FLOAT;}
   enum ha_base_keytype key_type() const { return HA_KEYTYPE_FLOAT; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { bzero(ptr,sizeof(float)); }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { bzero(ptr,sizeof(float)); return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -804,7 +808,7 @@ public:
   int  store(const char *to,uint length,CHARSET_INFO *charset);
   int  store(double nr);
   int  store(longlong nr, bool unsigned_val);
-  void reset(void) { bzero(ptr,sizeof(double)); }
+  int reset(void) { bzero(ptr,sizeof(double)); return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -831,10 +835,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_NULL;}
   int  store(const char *to, uint length, CHARSET_INFO *cs)
   { null[0]=1; return 0; }
-  int  store(double nr)   { null[0]=1; return 0; }
-  int  store(longlong nr, bool unsigned_val) { null[0]=1; return 0; }
-  int  store_decimal(const my_decimal *d)  { null[0]=1; return 0; }
-  void reset(void)	  {}
+  int store(double nr)   { null[0]=1; return 0; }
+  int store(longlong nr, bool unsigned_val) { null[0]=1; return 0; }
+  int store_decimal(const my_decimal *d)  { null[0]=1; return 0; }
+  int reset(void)	  { return 0; }
   double val_real(void)		{ return 0.0;}
   longlong val_int(void)	{ return 0;}
   my_decimal *val_decimal(my_decimal *) { return 0; }
@@ -863,7 +867,7 @@ public:
   int  store(const char *to,uint length,CHARSET_INFO *charset);
   int  store(double nr);
   int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; }
+  int  reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -938,10 +942,10 @@ public:
   enum_field_types type() const { return FIELD_TYPE_DATE;}
   enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; }
   enum Item_result cmp_type () const { return INT_RESULT; }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -971,7 +975,7 @@ public:
   int  store(double nr);
   int  store(longlong nr, bool unsigned_val);
   int store_time(TIME *ltime, timestamp_type type);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; }
+  int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -1003,10 +1007,10 @@ public:
   enum ha_base_keytype key_type() const { return HA_KEYTYPE_INT24; }
   enum Item_result cmp_type () const { return INT_RESULT; }
   int store_time(TIME *ltime, timestamp_type type);
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(double nr);
-  int  store(longlong nr, bool unsigned_val);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(double nr);
+  int store(longlong nr, bool unsigned_val);
+  int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -1044,7 +1048,11 @@ public:
   int  store(double nr);
   int  store(longlong nr, bool unsigned_val);
   int store_time(TIME *ltime, timestamp_type type);
-  void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; }
+  int reset(void)
+  {
+    ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0;
+    return 0;
+  }
   double val_real(void);
   longlong val_int(void);
   String *val_str(String*,String *);
@@ -1087,9 +1095,13 @@ public:
   enum ha_base_keytype key_type() const
     { return binary() ? HA_KEYTYPE_BINARY : HA_KEYTYPE_TEXT; }
   bool zero_pack() const { return 0; }
-  void reset(void) { charset()->cset->fill(charset(),ptr,field_length,' '); }
-  int  store(const char *to,uint length,CHARSET_INFO *charset);
-  int  store(longlong nr, bool unsigned_val);
+  int reset(void)
+  {
+    charset()->cset->fill(charset(),ptr,field_length,' ');
+    return 0;
+  }
+  int store(const char *to,uint length,CHARSET_INFO *charset);
+  int store(longlong nr, bool unsigned_val);
   int store(double nr) { return Field_str::store(nr); } /* QQ: To be deleted */
   double val_real(void);
   longlong val_int(void);
@@ -1141,7 +1153,7 @@ public:
   enum_field_types type() const { return MYSQL_TYPE_VARCHAR; }
   enum ha_base_keytype key_type() const;
   bool zero_pack() const { return 0; }
-  void reset(void) { bzero(ptr,field_length+length_bytes); }
+  int  reset(void) { bzero(ptr,field_length+length_bytes); return 0; }
   uint32 pack_length() const { return (uint32) field_length+length_bytes; }
   uint32 key_length() const { return (uint32) field_length; }
   uint32 sort_length() const
@@ -1249,7 +1261,7 @@ public:
   {
     return (uint32) (((ulonglong) 1 << (packlength*8)) -1);
   }
-  void reset(void) { bzero(ptr, packlength+sizeof(char*)); }
+  int reset(void) { bzero(ptr, packlength+sizeof(char*)); return 0; }
   void reset_fields() { bzero((char*) &value,sizeof(value)); }
   void store_length(uint32 number);
   inline uint32 get_length(uint row_offset=0)
@@ -1333,6 +1345,7 @@ public:
   int  store_decimal(const my_decimal *);
   void get_key_image(char *buff,uint length,imagetype type);
   uint size_of() const { return sizeof(*this); }
+  int  reset(void) { return !maybe_null(); }
 };
 #endif /*HAVE_SPATIAL*/
 
@@ -1434,7 +1447,7 @@ public:
   uint32 max_length() { return field_length; }
   uint size_of() const { return sizeof(*this); }
   Item_result result_type () const { return INT_RESULT; }
-  void reset(void) { bzero(ptr, bytes_in_rec); }
+  int reset(void) { bzero(ptr, bytes_in_rec); return 0; }
   int store(const char *to, uint length, CHARSET_INFO *charset);
   int store(double nr);
   int store(longlong nr, bool unsigned_val);

--- 1.108/sql/sql_load.cc	2006-12-07 09:27:55 +04:00
+++ 1.109/sql/sql_load.cc	2006-12-07 09:27:55 +04:00
@@ -710,7 +710,12 @@ read_sep_field(THD *thd, COPY_INFO &info
         if (item->type() == Item::FIELD_ITEM)
         {
           Field *field= ((Item_field *)item)->field;
-          field->reset();
+          if (field->reset())
+          {
+            my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0), field->field_name,
+                     thd->row_count);
+            DBUG_RETURN(1);
+          }
           field->set_null();
           if (field == table->next_number_field)
             table->auto_increment_field_not_null= TRUE;
@@ -759,6 +764,13 @@ read_sep_field(THD *thd, COPY_INFO &info
       {
         if (item->type() == Item::FIELD_ITEM)
         {
+          Field *field= ((Item_field *)item)->field;
+          if (field->reset())
+          {
+            my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),field->field_name,
+                     thd->row_count);
+            DBUG_RETURN(1);
+          }
           /*
             QQ: We probably should not throw warning for each field.
             But how about intention to always have the same number

--- 1.38/mysql-test/r/gis.result	2006-12-07 09:27:55 +04:00
+++ 1.39/mysql-test/r/gis.result	2006-12-07 09:27:55 +04:00
@@ -673,6 +673,22 @@ POINT(10 10)
 select (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440))));
 (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440))))
 POINT(10 10)
+create table t1 (g GEOMETRY);
+select * from t1;
+Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
+def	test	t1	t1	g	g	255	4294967295	0	Y	144	0	63
+g
+select asbinary(g) from t1;
+Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
+def					asbinary(g)	252	8192	0	Y	128	0	63
+asbinary(g)
+drop table t1;
+create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
+alter table t1 disable keys;
+load data infile '../../std_data/bad_gis_data.dat' into table t1;
+ERROR 22004: Column was set to data type implicit default; NULL supplied for NOT NULL column 'b' at row 1
+alter table t1 enable keys;
+drop table t1;
 create table t1 (s1 geometry not null,s2 char(100));
 create trigger t1_bu before update on t1 for each row set new.s1 = null;
 insert into t1 values (null,null);
@@ -695,16 +711,6 @@ create table t1(pt GEOMETRY);
 alter table t1 add primary key pti(pt);
 ERROR 42000: BLOB/TEXT column 'pt' used in key specification without a key length
 alter table t1 add primary key pti(pt(20));
-drop table t1;
-create table t1 (g GEOMETRY);
-select * from t1;
-Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
-def	test	t1	t1	g	g	255	4294967295	0	Y	144	0	63
-g
-select asbinary(g) from t1;
-Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
-def					asbinary(g)	252	16777216	0	Y	128	0	63
-asbinary(g)
 drop table t1;
 create table t1 select GeomFromText('point(1 1)');
 desc t1;

--- 1.30/mysql-test/t/gis.test	2006-12-07 09:27:55 +04:00
+++ 1.31/mysql-test/t/gis.test	2006-12-07 09:27:55 +04:00
@@ -375,6 +375,20 @@ drop table t1;
 select (asWKT(geomfromwkb((0x000000000140240000000000004024000000000000))));
 select (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440))));
 
+--enable_metadata
+create table t1 (g GEOMETRY);
+select * from t1;
+select asbinary(g) from t1;
+--disable_metadata
+drop table t1;
+
+create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
+alter table t1 disable keys;
+--error 1263
+load data infile '../../std_data/bad_gis_data.dat' into table t1;
+alter table t1 enable keys;
+drop table t1;
+
 # End of 4.1 tests
 
 #
@@ -410,15 +424,7 @@ alter table t1 add primary key pti(pt);
 alter table t1 add primary key pti(pt(20));
 drop table t1;
 
---enable_metadata
-create table t1 (g GEOMETRY);
-select * from t1;
-select asbinary(g) from t1;
---disable_metadata
-drop table t1;
-
 
 create table t1 select GeomFromText('point(1 1)');
 desc t1;
 drop table t1;
-
Thread
bk commit into 5.1 tree (holyfoot:1.2347)holyfoot7 Dec