提交 ba74733f authored 作者: Noel Grandin's avatar Noel Grandin 提交者: GitHub

Merge pull request #391 from svenschrader/master

spatial key fix for null geometries
...@@ -126,6 +126,11 @@ public class MVSpatialIndex extends BaseIndex implements SpatialIndex, MVIndex { ...@@ -126,6 +126,11 @@ public class MVSpatialIndex extends BaseIndex implements SpatialIndex, MVIndex {
public void add(Session session, Row row) { public void add(Session session, Row row) {
TransactionMap<SpatialKey, Value> map = getMap(session); TransactionMap<SpatialKey, Value> map = getMap(session);
SpatialKey key = getKey(row); SpatialKey key = getKey(row);
if (key.isNull()) {
return;
}
if (indexType.isUnique()) { if (indexType.isUnique()) {
// this will detect committed entries only // this will detect committed entries only
RTreeCursor cursor = spatialMap.findContainedKeys(key); RTreeCursor cursor = spatialMap.findContainedKeys(key);
...@@ -166,6 +171,11 @@ public class MVSpatialIndex extends BaseIndex implements SpatialIndex, MVIndex { ...@@ -166,6 +171,11 @@ public class MVSpatialIndex extends BaseIndex implements SpatialIndex, MVIndex {
@Override @Override
public void remove(Session session, Row row) { public void remove(Session session, Row row) {
SpatialKey key = getKey(row); SpatialKey key = getKey(row);
if (key.isNull()) {
return;
}
TransactionMap<SpatialKey, Value> map = getMap(session); TransactionMap<SpatialKey, Value> map = getMap(session);
try { try {
Value old = map.remove(key); Value old = map.remove(key);
......
...@@ -1009,9 +1009,9 @@ public class TestSpatial extends TestBase { ...@@ -1009,9 +1009,9 @@ public class TestSpatial extends TestBase {
stat.execute("create memory table test" stat.execute("create memory table test"
+ "(id int primary key, the_geom geometry, description varchar2(32))"); + "(id int primary key, the_geom geometry, description varchar2(32))");
stat.execute("create spatial index on test(the_geom)"); stat.execute("create spatial index on test(the_geom)");
stat.execute("insert into test values(1, null, null)"); for (int i = 0; i < 1000; i++) {
stat.execute("insert into test values(2, null, null)"); stat.execute("insert into test values("+ (i + 1) +", null, null)");
stat.execute("insert into test values(3, null, null)"); }
ResultSet rs = stat.executeQuery("select * from test"); ResultSet rs = stat.executeQuery("select * from test");
assertTrue(rs.next()); assertTrue(rs.next());
assertEquals(1, rs.getInt(1)); assertEquals(1, rs.getInt(1));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论