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