diff options
author | unknown <serg@serg.mylan> | 2003-06-13 23:00:04 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2003-06-13 23:00:04 +0200 |
commit | 2c70308c68338098f94d6c882cdbeb4b34445631 (patch) | |
tree | df0e8881447144bf036c31653fe76d66a2419fa1 /sql | |
parent | a5633cc96723bf4f57e4d44f78c018bda7be8ad1 (diff) | |
download | mariadb-git-2c70308c68338098f94d6c882cdbeb4b34445631.tar.gz |
bug #251 - destroyed object reused - fixed
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.h | 9 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/sql/field.h b/sql/field.h index a1f19638658..a72ccfa8354 100644 --- a/sql/field.h +++ b/sql/field.h @@ -50,7 +50,7 @@ public: LEX_STRING comment; ulong query_id; // For quick test of used fields /* Field is part of the following keys */ - key_map key_start,part_of_key,part_of_sortkey; + key_map key_start,part_of_key,part_of_sortkey; enum utype { NONE,DATE,SHIELD,NOEMPTY,CASEUP,PNR,BGNR,PGNR,YES,NO,REL, CHECK,EMPTY,UNKNOWN_FIELD,CASEDN,NEXT_NUMBER,INTERVAL_FIELD, BIT_FIELD, TIMESTAMP_FIELD,CAPITALIZE,BLOB_FIELD}; @@ -134,6 +134,7 @@ public: virtual void sort_string(char *buff,uint length)=0; virtual bool optimize_range(uint idx); virtual bool store_for_compare() { return 0; } + virtual void free() {} Field *new_field(MEM_ROOT *root, struct st_table *new_table) { Field *tmp= (Field*) memdup_root(root,(char*) this,size_of()); @@ -937,11 +938,11 @@ public: int pack_cmp(const char *b, uint key_length); uint packed_col_length(const char *col_ptr, uint length); uint max_packed_col_length(uint max_length); - inline void free() { value.free(); } + void free() { value.free(); } inline void clear_temporary() { bzero((char*) &value,sizeof(value)); } friend void field_conv(Field *to,Field *from); uint size_of() const { return sizeof(*this); } - bool has_charset(void) const + bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } }; @@ -949,7 +950,7 @@ public: class Field_geom :public Field_blob { public: enum geometry_type geom_type; - + Field_geom(char *ptr_arg, uchar *null_ptr_arg, uint null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, struct st_table *table_arg,uint blob_pack_length, diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 61a64573eaa..a5fd69c8fbb 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4791,7 +4791,7 @@ free_tmp_table(THD *thd, TABLE *entry) (void) ha_delete_table(entry->db_type,entry->real_name); /* free blobs */ for (Field **ptr=entry->field ; *ptr ; ptr++) - delete *ptr; + (*ptr)->free(); my_free((gptr) entry->record[0],MYF(0)); free_io_cache(entry); |