Skip to content

Commit

Permalink
executor: use before statement snapshot for UnionScan (pingcap#19276) (
Browse files Browse the repository at this point in the history
  • Loading branch information
Zejun Li authored Sep 9, 2020
1 parent da76c5c commit 40a147c
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 1 deletion.
2 changes: 1 addition & 1 deletion executor/mem_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ func iterTxnMemBuffer(ctx sessionctx.Context, kvRanges []kv.KeyRange, fn process
return err
}
for _, rg := range kvRanges {
iter, err := txn.GetMemBuffer().Iter(rg.StartKey, rg.EndKey)
iter, err := txn.GetMemBufferSnapshot().Iter(rg.StartKey, rg.EndKey)
if err != nil {
return err
}
Expand Down
2 changes: 2 additions & 0 deletions kv/kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ type Transaction interface {
Valid() bool
// GetMemBuffer return the MemBuffer binding to this transaction.
GetMemBuffer() MemBuffer
// GetMemBufferSnapshot is used to return a snapshot of MemBuffer without any statement modify.
GetMemBufferSnapshot() MemBuffer
// SetVars sets variables to the transaction.
SetVars(vars *Variables)
// SetAssertion sets an assertion for an operation on the key.
Expand Down
4 changes: 4 additions & 0 deletions kv/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ func (t *mockTxn) SetCap(cap int) {

}

func (t *mockTxn) GetMemBufferSnapshot() MemBuffer {
return nil
}

func (t *mockTxn) Reset() {
t.valid = false
}
Expand Down
5 changes: 5 additions & 0 deletions session/txn.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,11 @@ func (st *TxnState) GetMemBuffer() kv.MemBuffer {
return kv.NewBufferStoreFrom(st.Transaction.GetMemBuffer(), st.buf)
}

// GetMemBufferSnapshot overrides the Transaction interface.
func (st *TxnState) GetMemBufferSnapshot() kv.MemBuffer {
return st.Transaction.GetMemBuffer()
}

// BatchGet overrides the Transaction interface.
func (st *TxnState) BatchGet(keys []kv.Key) (map[string][]byte, error) {
bufferValues := make([][]byte, len(keys))
Expand Down
4 changes: 4 additions & 0 deletions store/tikv/txn.go
Original file line number Diff line number Diff line change
Expand Up @@ -519,3 +519,7 @@ func (txn *tikvTxn) Size() int {
func (txn *tikvTxn) GetMemBuffer() kv.MemBuffer {
return txn.us.GetMemBuffer()
}

func (txn *tikvTxn) GetMemBufferSnapshot() kv.MemBuffer {
panic("unsupported operation")
}

0 comments on commit 40a147c

Please sign in to comment.