summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authormonty@hundin.mysql.fi <>2001-11-03 15:18:09 +0200
committermonty@hundin.mysql.fi <>2001-11-03 15:18:09 +0200
commit8cd4c2358de1581b36faa4d197508e232b1390b4 (patch)
treed5d2a601f2e922dce27a5041739103c6468d4cf8 /sql
parentdaa4229a3d54f72d1704e38355dacc0a7cbf1547 (diff)
downloadmariadb-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.cc24
-rw-r--r--sql/field.h17
-rw-r--r--sql/ha_berkeley.cc16
-rw-r--r--sql/ha_myisammrg.cc4
-rw-r--r--sql/item_timefunc.cc4
-rw-r--r--sql/share/swedish/errmsg.txt2
-rw-r--r--sql/sql_acl.cc4
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(&ltime);
- 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;