@@ -75,6 +75,63 @@ func TestBuildKvRangesForIndexJoinWithoutCwc(t *testing.T) {
75
75
}
76
76
}
77
77
78
+ func TestBuildKvRangesForIndexJoinWithoutCwcAndWithMemoryTracker (t * testing.T ) {
79
+ indexRanges := make ([]* ranger.Range , 0 , 6 )
80
+ indexRanges = append (indexRanges , generateIndexRange (1 , 1 , 1 , 1 , 1 ))
81
+ indexRanges = append (indexRanges , generateIndexRange (1 , 1 , 2 , 1 , 1 ))
82
+ indexRanges = append (indexRanges , generateIndexRange (1 , 1 , 2 , 1 , 2 ))
83
+ indexRanges = append (indexRanges , generateIndexRange (1 , 1 , 3 , 1 , 1 ))
84
+ indexRanges = append (indexRanges , generateIndexRange (2 , 1 , 1 , 1 , 1 ))
85
+ indexRanges = append (indexRanges , generateIndexRange (2 , 1 , 2 , 1 , 1 ))
86
+
87
+ bytesConsumed1 := int64 (0 )
88
+ {
89
+ joinKeyRows := make ([]* indexJoinLookUpContent , 0 , 10 )
90
+ for i := int64 (0 ); i < 10 ; i ++ {
91
+ joinKeyRows = append (joinKeyRows , & indexJoinLookUpContent {keys : generateDatumSlice (1 , i )})
92
+ }
93
+
94
+ keyOff2IdxOff := []int {1 , 3 }
95
+ ctx := mock .NewContext ()
96
+ memTracker := memory .NewTracker (memory .LabelForIndexWorker , - 1 )
97
+ kvRanges , err := buildKvRangesForIndexJoin (ctx , 0 , 0 , joinKeyRows , indexRanges , keyOff2IdxOff , nil , memTracker , nil )
98
+ require .NoError (t , err )
99
+ // Check the kvRanges is in order.
100
+ for i , kvRange := range kvRanges {
101
+ require .True (t , kvRange .StartKey .Cmp (kvRange .EndKey ) < 0 )
102
+ if i > 0 {
103
+ require .True (t , kvRange .StartKey .Cmp (kvRanges [i - 1 ].EndKey ) >= 0 )
104
+ }
105
+ }
106
+ bytesConsumed1 = memTracker .BytesConsumed ()
107
+ }
108
+
109
+ bytesConsumed2 := int64 (0 )
110
+ {
111
+ joinKeyRows := make ([]* indexJoinLookUpContent , 0 , 20 )
112
+ for i := int64 (0 ); i < 20 ; i ++ {
113
+ joinKeyRows = append (joinKeyRows , & indexJoinLookUpContent {keys : generateDatumSlice (1 , i )})
114
+ }
115
+
116
+ keyOff2IdxOff := []int {1 , 3 }
117
+ ctx := mock .NewContext ()
118
+ memTracker := memory .NewTracker (memory .LabelForIndexWorker , - 1 )
119
+ kvRanges , err := buildKvRangesForIndexJoin (ctx , 0 , 0 , joinKeyRows , indexRanges , keyOff2IdxOff , nil , memTracker , nil )
120
+ require .NoError (t , err )
121
+ // Check the kvRanges is in order.
122
+ for i , kvRange := range kvRanges {
123
+ require .True (t , kvRange .StartKey .Cmp (kvRange .EndKey ) < 0 )
124
+ if i > 0 {
125
+ require .True (t , kvRange .StartKey .Cmp (kvRanges [i - 1 ].EndKey ) >= 0 )
126
+ }
127
+ }
128
+ bytesConsumed2 = memTracker .BytesConsumed ()
129
+ }
130
+
131
+ require .Equal (t , 2 * bytesConsumed1 , bytesConsumed2 )
132
+ require .Equal (t , int64 (20760 ), bytesConsumed1 )
133
+ }
134
+
78
135
func generateIndexRange (vals ... int64 ) * ranger.Range {
79
136
lowDatums := generateDatumSlice (vals ... )
80
137
highDatums := make ([]types.Datum , len (vals ))
0 commit comments