diff options
author | monty@hundin.mysql.fi <> | 2001-11-03 15:18:09 +0200 |
---|---|---|
committer | monty@hundin.mysql.fi <> | 2001-11-03 15:18:09 +0200 |
commit | 8cd4c2358de1581b36faa4d197508e232b1390b4 (patch) | |
tree | d5d2a601f2e922dce27a5041739103c6468d4cf8 /sql | |
parent | daa4229a3d54f72d1704e38355dacc0a7cbf1547 (diff) | |
download | mariadb-git-8cd4c2358de1581b36faa4d197508e232b1390b4.tar.gz |
Fix that mysqladmin shutdown can be interrupted with ^C
Fixed bug with BLOB keys in BDB tables
Fixed problem with MERGE tables on OS with 32 bit files
Fixed that TIME_TO_SEC() works with negative times
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 24 | ||||
-rw-r--r-- | sql/field.h | 17 | ||||
-rw-r--r-- | sql/ha_berkeley.cc | 16 | ||||
-rw-r--r-- | sql/ha_myisammrg.cc | 4 | ||||
-rw-r--r-- | sql/item_timefunc.cc | 4 | ||||
-rw-r--r-- | sql/share/swedish/errmsg.txt | 2 | ||||
-rw-r--r-- | sql/sql_acl.cc | 4 |
7 files changed, 44 insertions, 27 deletions
diff --git a/sql/field.cc b/sql/field.cc index bd923a09dc6..c6a26a48c0c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3466,9 +3466,9 @@ int Field_string::pack_cmp(const char *b, uint length) } -uint Field_string::packed_col_length(const char *ptr) +uint Field_string::packed_col_length(const char *ptr, uint length) { - if (field_length > 255) + if (length > 255) return uint2korr(ptr)+2; else return (uint) ((uchar) *ptr)+1; @@ -3476,7 +3476,7 @@ uint Field_string::packed_col_length(const char *ptr) uint Field_string::max_packed_col_length(uint max_length) { - return (field_length > 255 ? 2 : 1)+max_length; + return (max_length > 255 ? 2 : 1)+max_length; } @@ -3685,9 +3685,9 @@ int Field_varstring::pack_cmp(const char *b, uint key_length) return my_sortncmp(a,a_length, b,b_length); } -uint Field_varstring::packed_col_length(const char *ptr) +uint Field_varstring::packed_col_length(const char *ptr, uint length) { - if (field_length > 255) + if (length > 255) return uint2korr(ptr)+2; else return (uint) ((uchar) *ptr)+1; @@ -3695,7 +3695,7 @@ uint Field_varstring::packed_col_length(const char *ptr) uint Field_varstring::max_packed_col_length(uint max_length) { - return (field_length > 255 ? 2 : 1)+max_length; + return (max_length > 255 ? 2 : 1)+max_length; } /**************************************************************************** @@ -4225,6 +4225,18 @@ char *Field_blob::pack_key_from_key_image(char *to, const char *from, return to+length; } +uint Field_blob::packed_col_length(const char *ptr, uint length) +{ + if (length > 255) + return uint2korr(ptr)+2; + else + return (uint) ((uchar) *ptr)+1; +} + +uint Field_blob::max_packed_col_length(uint max_length) +{ + return (max_length > 255 ? 2 : 1)+max_length; +} /**************************************************************************** ** enum type. diff --git a/sql/field.h b/sql/field.h index b9d8e1957c9..b138eb772d8 100644 --- a/sql/field.h +++ b/sql/field.h @@ -176,10 +176,10 @@ public: { return pack(to,from,max_length); } - virtual uint packed_col_length(const char *to) - { return pack_length();} + virtual uint packed_col_length(const char *to, uint length) + { return length;} virtual uint max_packed_col_length(uint max_length) - { return pack_length();} + { return max_length;} virtual int pack_cmp(const char *a,const char *b, uint key_length_arg) { return cmp(a,b); } @@ -748,7 +748,7 @@ public: const char *unpack(char* to, const char *from); int pack_cmp(const char *a,const char *b,uint key_length); int pack_cmp(const char *b,uint key_length); - uint packed_col_length(const char *to); + uint packed_col_length(const char *to, uint length); uint max_packed_col_length(uint max_length); uint size_of() const { return sizeof(*this); } enum_field_types real_type() const { return FIELD_TYPE_STRING; } @@ -800,7 +800,7 @@ public: const char *unpack(char* to, const char *from); int pack_cmp(const char *a, const char *b, uint key_length); int pack_cmp(const char *b, uint key_length); - uint packed_col_length(const char *to); + uint packed_col_length(const char *to, uint length); uint max_packed_col_length(uint max_length); uint size_of() const { return sizeof(*this); } enum_field_types real_type() const { return FIELD_TYPE_VAR_STRING; } @@ -901,11 +901,8 @@ public: char *pack_key_from_key_image(char* to, const char *from, uint max_length); int pack_cmp(const char *a, const char *b, uint key_length); int pack_cmp(const char *b, uint key_length); - uint packed_col_length(const char *col_ptr) - { return get_length(col_ptr)+packlength;} - virtual uint max_packed_col_length(uint max_length) - { return packlength+max_length; } - + uint packed_col_length(const char *col_ptr, uint length); + uint max_packed_col_length(uint max_length); inline void free() { value.free(); } inline void clear_temporary() { bzero((char*) &value,sizeof(value)); } friend void field_conv(Field *to,Field *from); diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index e9cd3f57122..f52b99f5a12 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -28,8 +28,8 @@ - Get a more accurate count of the number of rows (estimate_number_of_rows()). We could store the found number of rows when the table is scanned and then increment the counter for each attempted write. - - We will need a manager thread that calls flush_logs, removes old - logs and makes checkpoints at given intervals. + - We will need to extend the manager thread to makes checkpoints at + given intervals. - When not using UPDATE IGNORE, don't make a sub transaction but abort the main transaction on errors. - Handling of drop table during autocommit=0 ? @@ -90,7 +90,7 @@ const char *berkeley_lock_names[] = { "DEFAULT", "OLDEST","RANDOM","YOUNGEST",0 }; u_int32_t berkeley_lock_types[]= { DB_LOCK_DEFAULT, DB_LOCK_OLDEST, DB_LOCK_RANDOM }; -TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names),"", +TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names)-1,"", berkeley_lock_names}; static void berkeley_print_error(const char *db_errpfx, char *buffer); @@ -372,10 +372,12 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) if ((cmp=key_part->field->pack_cmp(new_key_ptr,saved_key_ptr, key_part->length))) return cmp; - uint length=key_part->field->packed_col_length(new_key_ptr); + uint length=key_part->field->packed_col_length(new_key_ptr, + key_part->length); new_key_ptr+=length; key_length-=length; - saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr); + saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr, + key_part->length); } return key->handler.bdb_return_if_eq; } @@ -433,7 +435,7 @@ berkeley_key_cmp(TABLE *table, KEY *key_info, const char *key, uint key_length) } if ((cmp=key_part->field->pack_cmp(key,key_part->length))) return cmp; - uint length=key_part->field->packed_col_length(key); + uint length=key_part->field->packed_col_length(key,key_part->length); key+=length; key_length-=length; } @@ -1552,7 +1554,7 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos) KEY_PART_INFO *end=key_part+table->key_info[primary_key].key_parts; for ( ; key_part != end ; key_part++) - pos+=key_part->field->packed_col_length((char*) pos); + pos+=key_part->field->packed_col_length((char*) pos,key_part->length); to->size= (uint) (pos- (byte*) to->data); } return to; diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index 1feaa4e5d66..9499c42fdc9 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -175,7 +175,11 @@ void ha_myisammrg::info(uint flag) mean_rec_length=info.reclength; block_size=0; update_time=0; +#if SIZEOF_OFF_T > 4 ref_length=6; // Should be big enough +#else + ref_length=4; // Can't be > than my_off_t +#endif } diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index b305b5ccec3..a8bd219eef1 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -248,8 +248,10 @@ longlong Item_func_unix_timestamp::val_int() longlong Item_func_time_to_sec::val_int() { TIME ltime; + longlong seconds; (void) get_arg0_time(<ime); - return ltime.hour*3600L+ltime.minute*60+ltime.second; + seconds=ltime.hour*3600L+ltime.minute*60+ltime.second; + return ltime.neg ? -seconds : seconds; } diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 7e8dcaaafcc..1b7b6012a39 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -212,7 +212,7 @@ "DROP DATABASE är inte tillåtet när man har ett globalt läs-lås", "CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås", "Felaktiga argument till %s", -"%-.32s@%-.64s har inte rättigheter att skapa nya användare", +"%-.32s@%-.64s har inte rättighet att skapa nya användare", "Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas", "Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen", "Tabelltypen har inte hantering av FULLTEXT index", diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 835b873aee6..ce66b60a49f 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1003,8 +1003,8 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo, my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT), MYF(0),combo.user.str,combo.host.str); else - my_printf_error(ER_NO_PERMISSON_TO_CREATE_USER, - ER(ER_NO_PERMISSON_TO_CREATE_USER), + my_printf_error(ER_NO_PERMISSION_TO_CREATE_USER, + ER(ER_NO_PERMISSION_TO_CREATE_USER), MYF(0),thd->user, thd->host ? thd->host : thd->ip ? thd->ip: ""); error= -1; |