提交 8dc282eb authored 作者: noelgrandin's avatar noelgrandin

and fix a similar bug in unique hash indexes

上级 c5177149
......@@ -21,7 +21,7 @@ Change Log
<ul><li>Improved spatial index and data type.
</li><li>Issue 467: OSGi Class Loader (ability to create reference to class
in other ClassLoader, for example in another OSGi bundle).
</li><li>Fix bug in non-unique hash index which manifested as incorrect results
</li><li>Fix bug in unique and non-unique hash indexes which manifested as incorrect results
when the search key was a different cardinal type from the table index key.
e.g. where the one was INT and the other was LONG
</li></ul>
......
......@@ -68,8 +68,16 @@ public class HashIndex extends BaseIndex {
// TODO hash index: should additionally check if values are the same
throw DbException.throwInternalError();
}
Value v = first.getValue(indexColumn);
/*
* Sometimes the incoming search is a similar, but not the same type
* e.g. the search value is INT, but the index column is LONG. In which
* case, we need to convert otherwise the ValueHashMap will not find the
* result.
*/
v = v.convertTo(tableData.getColumn(indexColumn).getType());
Row result;
Long pos = rows.get(first.getValue(indexColumn));
Long pos = rows.get(v);
if (pos == null) {
result = null;
} else {
......
......@@ -510,6 +510,10 @@ public class TestIndex extends TestBase {
stat.execute("create memory table hash_index_test as select x as id, x % 10 as data from (select * from system_range(1, 100))");
stat.execute("create hash index idx2 on hash_index_test(data)");
assertEquals(10, getValue("select count(*) from hash_index_test where data = 1"));
stat.execute("drop index idx2");
stat.execute("create unique hash index idx2 on hash_index_test(id)");
assertEquals(1, getValue("select count(*) from hash_index_test where id = 1"));
}
private int getValue(String sql) throws SQLException {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论