提交 e5e5a68e authored 作者: Thomas Mueller's avatar Thomas Mueller

MVStore: creating secondary indexes on large tables results in missing rows in the index.

上级 01936aa5
...@@ -18,7 +18,9 @@ Change Log ...@@ -18,7 +18,9 @@ Change Log
<h1>Change Log</h1> <h1>Change Log</h1>
<h2>Next Version (unreleased)</h2> <h2>Next Version (unreleased)</h2>
<ul><li>Metadata: the password of linked tables is now only visible for admin users. <ul><li>MVStore: creating secondary indexes on large tables
results in missing rows in the index.
</li><li>Metadata: the password of linked tables is now only visible for admin users.
</li><li>For Windows, database URLs of the form "jdbc:h2:/test" where considered </li><li>For Windows, database URLs of the form "jdbc:h2:/test" where considered
relative and did not work unless the system property "h2.implicitRelativePath" was used. relative and did not work unless the system property "h2.implicitRelativePath" was used.
</li><li>Follow JDBC specification on Procedures MetaData, use P0 as </li><li>Follow JDBC specification on Procedures MetaData, use P0 as
......
...@@ -151,9 +151,6 @@ public class MVSecondaryIndex extends BaseIndex implements MVIndex { ...@@ -151,9 +151,6 @@ public class MVSecondaryIndex extends BaseIndex implements MVIndex {
} else { } else {
Value nextValue = it.next(); Value nextValue = it.next();
sources.remove(s); sources.remove(s);
if (sources.size() == 0) {
break;
}
s.value = nextValue; s.value = nextValue;
sources.add(s); sources.add(s);
} }
......
...@@ -49,6 +49,7 @@ public class TestMVTableEngine extends TestBase { ...@@ -49,6 +49,7 @@ public class TestMVTableEngine extends TestBase {
@Override @Override
public void test() throws Exception { public void test() throws Exception {
testSecondaryIndex();
testGarbageCollectionForLOB(); testGarbageCollectionForLOB();
testSpatial(); testSpatial();
testCount(); testCount();
...@@ -75,6 +76,28 @@ public class TestMVTableEngine extends TestBase { ...@@ -75,6 +76,28 @@ public class TestMVTableEngine extends TestBase {
testLocking(); testLocking();
testSimple(); testSimple();
} }
private void testSecondaryIndex() throws SQLException {
FileUtils.deleteRecursive(getBaseDir(), true);
Connection conn;
Statement stat;
String url = "mvstore;MV_STORE=TRUE";
url = getURL(url, true);
conn = getConnection(url);
stat = conn.createStatement();
stat.execute("create table test(id int)");
int size = 8 * 1024;
stat.execute("insert into test select mod(x * 111, " + size + ") " +
"from system_range(1, " + size + ")");
stat.execute("create index on test(id)");
ResultSet rs = stat.executeQuery(
"select count(*) from test inner join " +
"system_range(1, " + size + ") where " +
"id = mod(x * 111, " + size + ")");
rs.next();
assertEquals(size, rs.getInt(1));
conn.close();
}
private void testGarbageCollectionForLOB() throws SQLException { private void testGarbageCollectionForLOB() throws SQLException {
FileUtils.deleteRecursive(getBaseDir(), true); FileUtils.deleteRecursive(getBaseDir(), true);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论