susumu.yata
null+****@clear*****
Thu Dec 25 16:48:52 JST 2014
susumu.yata 2014-12-25 16:48:52 +0900 (Thu, 25 Dec 2014) New Revision: f8f2fb993d5469ea2b6ea3a1574be82dd3ed5159 https://github.com/groonga/grnxx/commit/f8f2fb993d5469ea2b6ea3a1574be82dd3ed5159 Message: Fix a bug that an indexes column cannot find N/A with find_one(). (#135) Modified files: lib/grnxx/impl/column/scalar/float.cpp lib/grnxx/impl/column/scalar/int.cpp lib/grnxx/impl/column/scalar/text.cpp Modified: lib/grnxx/impl/column/scalar/float.cpp (+3 -2) =================================================================== --- lib/grnxx/impl/column/scalar/float.cpp 2014-12-25 16:48:31 +0900 (dd92ed3) +++ lib/grnxx/impl/column/scalar/float.cpp 2014-12-25 16:48:52 +0900 (653de66) @@ -72,10 +72,11 @@ bool Column<Float>::contains(const Datum &datum) const { Int Column<Float>::find_one(const Datum &datum) const { // TODO: Choose the best index. - if (!indexes_.is_empty()) { + Float value = parse_datum(datum); + if (!value.is_na() && !indexes_.is_empty()) { return indexes_[0]->find_one(datum); } - return scan(parse_datum(datum)); + return scan(value); } void Column<Float>::unset(Int row_id) { Modified: lib/grnxx/impl/column/scalar/int.cpp (+2 -1) =================================================================== --- lib/grnxx/impl/column/scalar/int.cpp 2014-12-25 16:48:31 +0900 (2a4d1cf) +++ lib/grnxx/impl/column/scalar/int.cpp 2014-12-25 16:48:52 +0900 (2fc1be0) @@ -111,7 +111,8 @@ bool Column<Int>::contains(const Datum &datum) const { Int Column<Int>::find_one(const Datum &datum) const { // TODO: Choose the best index. - if (!indexes_.is_empty()) { + Int value = parse_datum(datum); + if (!value.is_na() && !indexes_.is_empty()) { return indexes_[0]->find_one(datum); } return scan(parse_datum(datum)); Modified: lib/grnxx/impl/column/scalar/text.cpp (+2 -2) =================================================================== --- lib/grnxx/impl/column/scalar/text.cpp 2014-12-25 16:48:31 +0900 (2524567) +++ lib/grnxx/impl/column/scalar/text.cpp 2014-12-25 16:48:52 +0900 (cc8855e) @@ -171,10 +171,10 @@ bool Column<Text>::contains(const Datum &datum) const { Int Column<Text>::find_one(const Datum &datum) const { // TODO: Choose the best index. - if (!indexes_.is_empty()) { + Text value = parse_datum(datum); + if (!value.is_na() && !indexes_.is_empty()) { return indexes_[0]->find_one(datum); } - Text value = parse_datum(datum); size_t valid_size = get_valid_size(); if (value.is_na()) { for (size_t i = 0; i < valid_size; ++i) { -------------- next part -------------- HTML����������������������������...Download