diff options
author | unknown <monty@mysql.com> | 2004-12-18 05:19:21 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2004-12-18 05:19:21 +0200 |
commit | 8eaef91fff849885a7369a21a752e87cb1e592c8 (patch) | |
tree | eb62c04f31efc6c7cb435cef36a43e2e361eed1c /sql/field.h | |
parent | 5ae35e327a39ec036a9d938f8555278bf96f2a27 (diff) | |
download | mariadb-git-8eaef91fff849885a7369a21a752e87cb1e592c8.tar.gz |
Add 0x before pointers (to help with debugging)
Add support for VARCHAR with 1 or 2 length bytes
Enable VARCHAR packing in MyISAM files (previous patch didn't pack data properly)
Give error if we got problems in temporary tables during a SELECT
Don't use new table generated by ALTER TABLE if index generation fails
Fixed wrong call by range_end() (Could cause an ASSERT in debug mode)
BUILD/SETUP.sh:
Add flags for Intel 64
dbug/dbug.c:
Add 0x before pointers (to help with debugging)
heap/_check.c:
Add 0x before pointers (to help with debugging)
heap/hp_create.c:
Add support for VARCHAR with 1 or 2 length bytes
heap/hp_delete.c:
Add 0x before pointers
heap/hp_hash.c:
Add support for VARCHAR with 1 or 2 length bytes
Added more debugging
heap/hp_open.c:
Add 0x before pointers
heap/hp_rkey.c:
Add 0x before pointers
heap/hp_rrnd.c:
Add 0x before pointers
heap/hp_write.c:
Add 0x before pointers
include/my_base.h:
Add support for VARCHAR with 1 or 2 length bytes
myisam/ft_static.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/ft_test1.c:
Add support for VARCHAR with 1 or 2 length bytes
Fixed indentation
(This file should probably be deleted as it doesn't compile)
myisam/ft_update.c:
Add support for VARCHAR with 1 or 2 length bytes
Fixed indentation
Removed some not needed 'else'
myisam/mi_check.c:
Don't give an error for tables packed with myisampack
myisam/mi_checksum.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_create.c:
Add support for VARCHAR with 1 or 2 length bytes
Store in number of pack-length-bytes in keyseg->bit_start
myisam/mi_dbug.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_dynrec.c:
Add support for VARCHAR with 1 or 2 length bytes
(old code in _mi_rec_unpack() didn't really work with VARCHAR's)
myisam/mi_key.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_open.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_packrec.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_search.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_test1.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_test3.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/mi_test_all.res:
Update results
myisam/mi_unique.c:
Add support for VARCHAR with 1 or 2 length bytes
myisam/myisampack.c:
Add support for VARCHAR with 1 or 2 length bytes
mysql-test/include/varchar.inc:
Added more tests
mysql-test/r/bdb.result:
Update results after new tests
mysql-test/r/information_schema.result:
Update results
mysql-test/r/innodb.result:
Update results
mysql-test/r/myisam.result:
Update results after new tests
mysql-test/r/ps_1general.result:
Update results
mysql-test/t/bdb.test:
Shorter comments
mysys/list.c:
Add 0x before pointers
mysys/my_handler.c:
Add support for VARCHAR with 1 or 2 length bytes
mysys/raid.cc:
Add 0x before pointers
sql/field.cc:
Add support for VARCHAR with 1 or 2 length bytes
sql/field.h:
Add support for VARCHAR with 1 or 2 length bytes
sql/field_conv.cc:
Add support for VARCHAR with 1 or 2 length bytes
sql/ha_berkeley.cc:
Add support for VARCHAR with 1 or 2 length bytes
sql/ha_heap.cc:
Add support for VARCHAR with 1 or 2 length bytes
sql/ha_myisam.cc:
Ensure that enable_indexes() will report an error if it fails
Enable VARCHAR packing for MyISAM files
sql/item_sum.cc:
Change key_cmp -> cmp() as we are comparing fields, not key segements
sql/opt_range.cc:
Add support for VARCHAR with 1 or 2 length bytes
Change range_end to call ha_index_or_rnd_end() as in some error cases we may be in rnd mode when we abort
sql/sql_base.cc:
Remove compiler warning
sql/sql_parse.cc:
Move length checking code to sql_table.cc (as we don't have character set for fields at this stage)
sql/sql_select.cc:
Add support for VARCHAR with 1 or 2 length bytes
Ensure that we report an error if we get an error while writing to internal temporary tables
sql/sql_select.h:
Add support for VARCHAR with 1 or 2 length bytes
sql/sql_show.cc:
Fix typo in comment
sql/sql_table.cc:
Don't use new table generated by ALTER TABLE if index generation fails
vio/vio.c:
Fixed DBUG info
vio/viosocket.c:
Fixed DBUG info
vio/viossl.c:
Fixed DBUG info
vio/viosslfactories.c:
Fixed DBUG info
Diffstat (limited to 'sql/field.h')
-rw-r--r-- | sql/field.h | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/sql/field.h b/sql/field.h index 4353780f9a4..521bfb818b0 100644 --- a/sql/field.h +++ b/sql/field.h @@ -139,10 +139,9 @@ public: virtual int cmp(const char *,const char *)=0; virtual int cmp_binary(const char *a,const char *b, uint32 max_length=~0L) { return memcmp(a,b,pack_length()); } - virtual int cmp_offset(uint row_offset) - { return memcmp(ptr,ptr+row_offset,pack_length()); } - virtual int cmp_binary_offset(uint row_offset) - { return memcmp(ptr,ptr+row_offset,pack_length()); } + int cmp_offset(uint row_offset) { return cmp(ptr,ptr+row_offset); } + int cmp_binary_offset(uint row_offset) + { return cmp_binary(ptr, ptr+row_offset); }; virtual int key_cmp(const byte *a,const byte *b) { return cmp((char*) a,(char*) b); } virtual int key_cmp(const byte *str, uint length) @@ -185,6 +184,10 @@ public: virtual bool can_be_compared_as_longlong() const { return FALSE; } virtual void free() {} virtual Field *new_field(MEM_ROOT *root, struct st_table *new_table); + virtual Field *new_key_field(MEM_ROOT *root, struct st_table *new_table) + { + return new_field(root, new_table); + } inline void move_field(char *ptr_arg,uchar *null_ptr_arg,uchar null_bit_arg) { ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg; @@ -925,26 +928,31 @@ public: class Field_varstring :public Field_str { public: - Field_varstring(char *ptr_arg, uint32 len_arg,uchar *null_ptr_arg, + /* Store number of bytes used to store length (1 or 2) */ + uint32 length_bytes; + Field_varstring(char *ptr_arg, + uint32 len_arg, uint length_bytes_arg, + uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, struct st_table *table_arg, CHARSET_INFO *cs) :Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, - unireg_check_arg, field_name_arg, table_arg, cs) + unireg_check_arg, field_name_arg, table_arg, cs), + length_bytes(length_bytes_arg) {} Field_varstring(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg, struct st_table *table_arg, CHARSET_INFO *cs) :Field_str((char*) 0,len_arg, maybe_null_arg ? (uchar*) "": 0,0, - NONE, field_name_arg, table_arg, cs) + NONE, field_name_arg, table_arg, cs), + length_bytes(len_arg < 256 ? 1 :2) {} enum_field_types type() const { return MYSQL_TYPE_VARCHAR; } - enum ha_base_keytype key_type() const - { return binary() ? HA_KEYTYPE_VARBINARY : HA_KEYTYPE_VARTEXT; } + enum ha_base_keytype key_type() const; bool zero_pack() const { return 0; } - void reset(void) { bzero(ptr,field_length+2); } - uint32 pack_length() const { return (uint32) field_length+2; } + void reset(void) { bzero(ptr,field_length+length_bytes); } + uint32 pack_length() const { return (uint32) field_length+length_bytes; } uint32 key_length() const { return (uint32) field_length; } int store(const char *to,uint length,CHARSET_INFO *charset); int store(longlong nr); @@ -959,12 +967,13 @@ public: void sql_type(String &str) const; char *pack(char *to, const char *from, uint max_length=~(uint) 0); char *pack_key(char *to, const char *from, uint max_length); + char *pack_key_from_key_image(char* to, const char *from, uint max_length); const char *unpack(char* to, const char *from); + const char *unpack_key(char* to, const char *from, uint max_length); int pack_cmp(const char *a, const char *b, uint key_length, my_bool insert_or_update); int pack_cmp(const char *b, uint key_length,my_bool insert_or_update); int cmp_binary(const char *a,const char *b, uint32 max_length=~0L); - int cmp_binary_offset(uint row_offset); int key_cmp(const byte *,const byte*); int key_cmp(const byte *str, uint length); uint packed_col_length(const char *to, uint length); @@ -974,6 +983,8 @@ public: bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } field_cast_enum field_cast_type() { return FIELD_CAST_VARSTRING; } + Field *new_field(MEM_ROOT *root, struct st_table *new_table); + Field *new_key_field(MEM_ROOT *root, struct st_table *new_table); }; @@ -996,7 +1007,7 @@ public: } enum_field_types type() const { return FIELD_TYPE_BLOB;} enum ha_base_keytype key_type() const - { return binary() ? HA_KEYTYPE_VARBINARY : HA_KEYTYPE_VARTEXT; } + { return binary() ? HA_KEYTYPE_VARBINARY2 : HA_KEYTYPE_VARTEXT2; } int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr); int store(longlong nr); @@ -1005,9 +1016,7 @@ public: String *val_str(String*,String *); int cmp(const char *,const char*); int cmp(const char *a, uint32 a_length, const char *b, uint32 b_length); - int cmp_offset(uint offset); int cmp_binary(const char *a,const char *b, uint32 max_length=~0L); - int cmp_binary_offset(uint row_offset); int key_cmp(const byte *,const byte*); int key_cmp(const byte *str, uint length); uint32 key_length() const { return 0; } @@ -1054,9 +1063,9 @@ public: return 0; } char *pack(char *to, const char *from, uint max_length= ~(uint) 0); - const char *unpack(char *to, const char *from); char *pack_key(char *to, const char *from, uint max_length); char *pack_key_from_key_image(char* to, const char *from, uint max_length); + const char *unpack(char *to, const char *from); const char *unpack_key(char* to, const char *from, uint max_length); int pack_cmp(const char *a, const char *b, uint key_length, my_bool insert_or_update); @@ -1091,7 +1100,7 @@ public: :Field_blob(len_arg, maybe_null_arg, field_name_arg, table_arg, &my_charset_bin) { geom_type= geom_type_arg; } - enum ha_base_keytype key_type() const { return HA_KEYTYPE_VARBINARY; } + enum ha_base_keytype key_type() const { return HA_KEYTYPE_VARBINARY2; } enum_field_types type() const { return FIELD_TYPE_GEOMETRY; } void sql_type(String &str) const; int store(const char *to, uint length, CHARSET_INFO *charset); |