diff options
author | Alexey Kopytov <Alexey.Kopytov@Sun.com> | 2010-09-09 18:44:53 +0400 |
---|---|---|
committer | Alexey Kopytov <Alexey.Kopytov@Sun.com> | 2010-09-09 18:44:53 +0400 |
commit | da7646b64c7e76930e05c0235c724872416ba1dc (patch) | |
tree | bee0d2cdb79142f2218fb9e9bc1ae78c00385d8e /sql/item.cc | |
parent | 3ce925bfe7b15428abd9ef8534da9f1f369969f0 (diff) | |
download | mariadb-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.cc | 5 |
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; } |