提交 0b2f337b authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 b9630220
...@@ -95,14 +95,7 @@ public class TableData extends Table implements RecordReader { ...@@ -95,14 +95,7 @@ public class TableData extends Table implements RecordReader {
for (; i < indexes.size(); i++) { for (; i < indexes.size(); i++) {
Index index = (Index) indexes.get(i); Index index = (Index) indexes.get(i);
index.add(session, row); index.add(session, row);
if (SysProperties.CHECK) { checkRowCount(session, index, 1);
if (!database.isMultiVersion()) {
long rc = index.getRowCount(session);
if (rc != rowCount + 1) {
throw Message.getInternalError("rowCount expected " + (rowCount + 1) + " got " + rc);
}
}
}
} }
rowCount++; rowCount++;
} catch (Throwable e) { } catch (Throwable e) {
...@@ -110,14 +103,7 @@ public class TableData extends Table implements RecordReader { ...@@ -110,14 +103,7 @@ public class TableData extends Table implements RecordReader {
while (--i >= 0) { while (--i >= 0) {
Index index = (Index) indexes.get(i); Index index = (Index) indexes.get(i);
index.remove(session, row); index.remove(session, row);
if (SysProperties.CHECK) { checkRowCount(session, index, 0);
if (!database.isMultiVersion()) {
long rc = index.getRowCount(session);
if (rc != rowCount) {
throw Message.getInternalError("rowCount expected " + (rowCount) + " got " + rc);
}
}
}
} }
} catch (SQLException e2) { } catch (SQLException e2) {
// this could happen, for example on failure in the storage // this could happen, for example on failure in the storage
...@@ -130,6 +116,15 @@ public class TableData extends Table implements RecordReader { ...@@ -130,6 +116,15 @@ public class TableData extends Table implements RecordReader {
} }
} }
private void checkRowCount(Session session, Index index, int offset) {
if (SysProperties.CHECK && !database.isMultiVersion()) {
long rc = index.getRowCount(session);
if (rc != rowCount + offset) {
throw Message.getInternalError("rowCount expected " + (rowCount + offset) + " got " + rc + " " + getName() + "." + index.getName());
}
}
}
public Index getScanIndex(Session session) { public Index getScanIndex(Session session) {
return (Index) indexes.get(0); return (Index) indexes.get(0);
} }
...@@ -285,19 +280,30 @@ public class TableData extends Table implements RecordReader { ...@@ -285,19 +280,30 @@ public class TableData extends Table implements RecordReader {
throw Message.getSQLException(ErrorCode.CONCURRENT_UPDATE_1, getName()); throw Message.getSQLException(ErrorCode.CONCURRENT_UPDATE_1, getName());
} }
} }
for (int i = indexes.size() - 1; i >= 0; i--) { int i = indexes.size() - 1;
try {
for (; i >= 0; i--) {
Index index = (Index) indexes.get(i); Index index = (Index) indexes.get(i);
index.remove(session, row); index.remove(session, row);
if (SysProperties.CHECK) { checkRowCount(session, index, -1);
if (!database.isMultiVersion()) {
long rc = index.getRowCount(session);
if (rc != rowCount - 1) {
throw Message.getInternalError("rowCount expected " + (rowCount - 1) + " got " + rc);
} }
rowCount--;
} catch (Throwable e) {
try {
while (++i < indexes.size()) {
Index index = (Index) indexes.get(i);
index.add(session, row);
checkRowCount(session, index, 0);
} }
} catch (SQLException e2) {
// this could happen, for example on failure in the storage
// but if that is not the case it means there is something wrong
// with the database
// TODO log this problem
throw e2;
} }
throw Message.convert(e);
} }
rowCount--;
} }
public void truncate(Session session) throws SQLException { public void truncate(Session session) throws SQLException {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论