summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorAlexey Kopytov <Alexey.Kopytov@Sun.com>2010-09-09 18:44:53 +0400
committerAlexey Kopytov <Alexey.Kopytov@Sun.com>2010-09-09 18:44:53 +0400
commitda7646b64c7e76930e05c0235c724872416ba1dc (patch)
treebee0d2cdb79142f2218fb9e9bc1ae78c00385d8e /sql/item.cc
parent3ce925bfe7b15428abd9ef8534da9f1f369969f0 (diff)
downloadmariadb-git-da7646b64c7e76930e05c0235c724872416ba1dc.tar.gz
Addendum patch for bug #54190.
The patch caused some test failures when merged to 5.5 because, unlike 5.1, it utilizes Item_cache_row to actually cache row values. The problem was that Item_cache_row::bring_value() essentially did nothing. In particular, it did not update its null_value, so all Item_cache_row objects were always having their null_values set to TRUE. This went unnoticed previously, but now when Arg_comparator::compare_row() actually depends on the row's null_value to evaluate the comparison, the problem has surfaced. Fixed by calling the underlying item's bring_value() and updating null_value in Item_cache_row::bring_value(). Since the problem also exists in 5.1 code (albeit hidden, since the relevant code is not used anywhere), the addendum patch is against 5.1.
Diffstat (limited to 'sql/item.cc')
-rw-r--r--sql/item.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/sql/item.cc b/sql/item.cc
index 66c5314c16e..29529abe7b9 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -7404,9 +7404,12 @@ bool Item_cache_row::null_inside()
void Item_cache_row::bring_value()
{
+ if (!example)
+ return;
+ example->bring_value();
+ null_value= example->null_value;
for (uint i= 0; i < item_count; i++)
values[i]->bring_value();
- return;
}