提交 356a0a45 authored 作者: Thomas Mueller's avatar Thomas Mueller

When using SELECT_FOR_UPDATE_MVCC (lock only the selected rows when using MVCC),…

When using SELECT_FOR_UPDATE_MVCC (lock only the selected rows when using MVCC), the selected rows were sometimes not locked correctly.
上级 b3fe70e3
...@@ -12,6 +12,7 @@ import org.h2.command.dml.Select; ...@@ -12,6 +12,7 @@ import org.h2.command.dml.Select;
import org.h2.constant.SysProperties; import org.h2.constant.SysProperties;
import org.h2.engine.Right; import org.h2.engine.Right;
import org.h2.engine.Session; import org.h2.engine.Session;
import org.h2.engine.UndoLogRecord;
import org.h2.expression.Comparison; import org.h2.expression.Comparison;
import org.h2.expression.ConditionAndOr; import org.h2.expression.ConditionAndOr;
import org.h2.expression.Expression; import org.h2.expression.Expression;
...@@ -911,9 +912,11 @@ public class TableFilter implements ColumnResolver { ...@@ -911,9 +912,11 @@ public class TableFilter implements ColumnResolver {
*/ */
public void lockRows(ArrayList<Row> forUpdateRows) { public void lockRows(ArrayList<Row> forUpdateRows) {
for (Row row : forUpdateRows) { for (Row row : forUpdateRows) {
Row newRow = row.getCopy();
table.removeRow(session, row); table.removeRow(session, row);
Row r2 = row.getCopy(); session.log(table, UndoLogRecord.DELETE, row);
table.addRow(session, r2); table.addRow(session, newRow);
session.log(table, UndoLogRecord.INSERT, newRow);
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论