summaryrefslogtreecommitdiff
path: root/sql/opt_range.cc
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2002-11-22 13:35:43 +0200
committerunknown <monty@mashka.mysql.fi>2002-11-22 13:35:43 +0200
commitcb5a2b2fd5541bf019dd0fe1012e687ce1e68eaa (patch)
treedb3e8af5263abbcc2aa4d04d35ea120434795969 /sql/opt_range.cc
parent9b891cee5576e2d1b2aa6bf36ad1416d0eec3f9f (diff)
downloadmariadb-git-cb5a2b2fd5541bf019dd0fe1012e687ce1e68eaa.tar.gz
Fixed bug with indexed NULL column <=> NULL
Fix for Mac OS X shutdown mysql-test/mysql-test-run.sh: Log client error messages mysql-test/r/null_key.result: Test for bug in <=> NULL mysql-test/t/null_key.test: Test for bug in <=> NULL sql/mysqld.cc: Fix for Mac OS X shutdown sql/opt_range.cc: Fixed bug with indexed NULL column <=> NULL
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r--sql/opt_range.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 42f20c0f767..0645fe15df3 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -931,8 +931,11 @@ get_mm_leaf(Field *field,KEY_PART *key_part,
if (!(res= value->val_str(&tmp)))
DBUG_RETURN(&null_element);
- // Check if this was a function. This should have be optimized away
- // in the sql_select.cc
+ /*
+ TODO:
+ Check if this was a function. This should have be optimized away
+ in the sql_select.cc
+ */
if (res != &tmp)
{
tmp.copy(*res); // Get own copy
@@ -1011,8 +1014,10 @@ get_mm_leaf(Field *field,KEY_PART *key_part,
type != Item_func::EQUAL_FUNC)
DBUG_RETURN(0); // Can't optimize this
- /* We can't always use indexes when comparing a string index to a number */
- /* cmp_type() is checked to allow compare of dates to numbers */
+ /*
+ We can't always use indexes when comparing a string index to a number
+ cmp_type() is checked to allow compare of dates to numbers
+ */
if (field->result_type() == STRING_RESULT &&
value->result_type() != STRING_RESULT &&
field->cmp_type() != value->result_type())
@@ -1020,6 +1025,7 @@ get_mm_leaf(Field *field,KEY_PART *key_part,
if (value->save_in_field(field))
{
+ /* This happens when we try to insert a NULL field in a not null column */
if (type == Item_func::EQUAL_FUNC)
{
/* convert column_name <=> NULL -> column_name IS NULL */
@@ -1029,14 +1035,14 @@ get_mm_leaf(Field *field,KEY_PART *key_part,
*str = 1;
DBUG_RETURN(new SEL_ARG(field,str,str));
}
- DBUG_RETURN(&null_element); // NULL is never true
+ DBUG_RETURN(&null_element); // cmp with NULL is never true
}
// Get local copy of key
char *str= (char*) sql_alloc(key_part->part_length+maybe_null);
if (!str)
DBUG_RETURN(0);
if (maybe_null)
- *str=0; // Not NULL
+ *str= (char) field->is_real_null(); // Set to 1 if null
field->get_key_image(str+maybe_null,key_part->part_length);
if (!(tree=new SEL_ARG(field,str,str)))
DBUG_RETURN(0);