summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authormonty@donna.mysql.com <>2000-10-25 01:50:46 +0300
committermonty@donna.mysql.com <>2000-10-25 01:50:46 +0300
commitadeed9168d58bd775aa09155f9089facf107e969 (patch)
treee2752fa618359db15b27254ae137517f9bd19779 /sql/field.cc
parent6633c2113a3b18fd4d40eef676de26fe3fa43f32 (diff)
downloadmariadb-git-adeed9168d58bd775aa09155f9089facf107e969.tar.gz
Added bdb_lock_max and fixed bug in BDB tables when using key parts
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc65
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);