diff options
author | unknown <monty@donna.mysql.com> | 2000-10-25 01:50:46 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-10-25 01:50:46 +0300 |
commit | 5aacf92e2215cc40a8d8934fe7376180fe30ee10 (patch) | |
tree | e2752fa618359db15b27254ae137517f9bd19779 /sql/field.cc | |
parent | 08dc21df3ad57f782bce0b7277900e880415a0a5 (diff) | |
download | mariadb-git-5aacf92e2215cc40a8d8934fe7376180fe30ee10.tar.gz |
Added bdb_lock_max and fixed bug in BDB tables when using key parts
Docs/Makefile.am:
Don't try to get the manual from SCCS
Docs/manual.texi:
Added bdb_lock_max + some information about Linux and big files
myisam/myisamchk.c:
Code cleanup
mysql.proj:
updated
sql/field.cc:
Added compare of packed BDB key
sql/field.h:
Added compare of packed BDB key
sql/ha_berkeley.cc:
Added compare of packed BDB keys and bdb_lock_max variable
sql/ha_berkeley.h:
Added bdb_lock_max variable
sql/key.cc:
cleanup
sql/mysqld.cc:
Added bdb_lock_max
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sql/field.cc b/sql/field.cc index 459c53ffcb1..639c2def068 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3439,6 +3439,23 @@ int Field_string::pack_cmp(const char *a, const char *b, uint length) } +int Field_string::pack_cmp(const char *b, uint length) +{ + uint b_length= (uint) (uchar) *b++; + char *end= ptr + field_length; + while (end > ptr && end[-1] == ' ') + end--; + uint a_length = (uint) (end - ptr); + + if (binary_flag) + { + int cmp= memcmp(ptr,b,min(a_length,b_length)); + return cmp ? cmp : (int) (a_length - b_length); + } + return my_sortncmp(ptr,a_length, b, b_length); +} + + uint Field_string::packed_col_length(const char *ptr) { if (field_length > 255) @@ -3637,6 +3654,27 @@ int Field_varstring::pack_cmp(const char *a, const char *b, uint key_length) return my_sortncmp(a,a_length, b,b_length); } +int Field_varstring::pack_cmp(const char *b, uint key_length) +{ + char *a=ptr+2; + uint a_length=uint2korr(ptr); + uint b_length; + if (key_length > 255) + { + b_length=uint2korr(b); b+=2; + } + else + { + b_length= (uint) (uchar) *b++; + } + if (binary_flag) + { + int cmp= memcmp(a,b,min(a_length,b_length)); + return cmp ? cmp : (int) (a_length - b_length); + } + return my_sortncmp(a,a_length, b,b_length); +} + uint Field_varstring::packed_col_length(const char *ptr) { if (field_length > 255) @@ -4019,6 +4057,33 @@ int Field_blob::pack_cmp(const char *a, const char *b, uint key_length) return my_sortncmp(a,a_length, b,b_length); } + +int Field_blob::pack_cmp(const char *b, uint key_length) +{ + char *a; + memcpy_fixed(&a,ptr+packlength,sizeof(char*)); + if (!a) + return key_length > 0 ? -1 : 0; + uint a_length=get_length(ptr); + uint b_length; + + if (key_length > 255) + { + b_length=uint2korr(b); b+=2; + } + else + { + b_length= (uint) (uchar) *b++; + } + if (binary_flag) + { + int cmp= memcmp(a,b,min(a_length,b_length)); + return cmp ? cmp : (int) (a_length - b_length); + } + return my_sortncmp(a,a_length, b,b_length); +} + + char *Field_blob::pack_key(char *to, const char *from, uint max_length) { uint length=uint2korr(to); |