This commit is contained in:
hebo
2019-09-09 09:58:14 +08:00
parent a33768d2fb
commit 61c6d83b3a
2 changed files with 17 additions and 20 deletions

View File

@@ -77,35 +77,29 @@ type coverRanges struct {
} }
func NewCoverRanges() *coverRanges { func NewCoverRanges() *coverRanges {
return &coverRanges{} return &coverRanges{
head: &coverageNode{
begin: -1,
},
}
} }
func (crs *coverRanges) clear() { func (crs *coverRanges) clear() {
if crs.head == nil { currRange := crs.head.next;
return if currRange != nil {
}
currRange := crs.head;
if currRange.next != nil {
node := currRange node := currRange
currRange = currRange.next currRange = currRange.next
node.Recovery() node.Recovery()
} }
crs.head = nil crs.head.next = nil
} }
func (crs *coverRanges) addRange(node *coverageNode) { func (crs *coverRanges) addRange(node *coverageNode) {
// empty cover ranges
if crs.head == nil {
crs.head = node
return
}
// insert range in asc order // insert range in asc order
var currRange = crs.head; var currRange = crs.head;
for currRange.next != nil { for currRange != nil && currRange.next != nil {
checkRange := currRange.next checkRange := currRange.next
if checkRange.begin >= node.begin { if checkRange != nil && checkRange.begin >= node.begin {
currRange.next = node currRange.next = node
node.next = checkRange node.next = checkRange
node = nil node = nil
@@ -115,6 +109,7 @@ func (crs *coverRanges) addRange(node *coverageNode) {
currRange = checkRange currRange = checkRange
} }
} }
if node != nil { if node != nil {
currRange.next = node currRange.next = node
} }
@@ -124,8 +119,8 @@ func (crs *coverRanges) addRange(node *coverageNode) {
func (crs *coverRanges) mergeRanges() { func (crs *coverRanges) mergeRanges() {
// merge ranges // merge ranges
currRange := crs.head currRange := crs.head.next
for currRange.next != nil { for currRange != nil && currRange.next != nil {
checkRange := currRange.next checkRange := currRange.next
if currRange.end >= checkRange.begin && currRange.end < checkRange.end { if currRange.end >= checkRange.begin && currRange.end < checkRange.end {
currRange.end = checkRange.end currRange.end = checkRange.end

View File

@@ -110,11 +110,13 @@ func (ms *MysqlSession) readFromServer(bytes []byte) {
} }
func (ms *MysqlSession) checkFinish() bool { func (ms *MysqlSession) checkFinish() bool {
if ms.coverRanges.head == nil { if ms.coverRanges.head == nil || ms.coverRanges.head.next == nil {
return false return false
} }
if ms.coverRanges.head.end - ms.coverRanges.head.begin == int64(len(ms.cachedStmtBytes)) { checkNode := ms.coverRanges.head.next
if checkNode.end - checkNode.begin == int64(len(ms.cachedStmtBytes)) {
return true return true
} }