1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- package expression_test
15+ package expression
1616
1717import (
18+ "encoding/binary"
19+ "github.com/dolthub/vitess/go/sqltypes"
1820 "testing"
1921
2022 "github.com/stretchr/testify/require"
2123
2224 "github.com/dolthub/go-mysql-server/sql"
23- "github.com/dolthub/go-mysql-server/sql/expression"
2425 "github.com/dolthub/go-mysql-server/sql/types"
2526)
2627
@@ -109,11 +110,11 @@ var likeComparisonCases = map[sql.Type]map[int][][]interface{}{
109110func TestEquals (t * testing.T ) {
110111 require := require .New (t )
111112 for resultType , cmpCase := range comparisonCases {
112- get0 := expression . NewGetField (0 , resultType , "col1" , true )
113+ get0 := NewGetField (0 , resultType , "col1" , true )
113114 require .NotNil (get0 )
114- get1 := expression . NewGetField (1 , resultType , "col2" , true )
115+ get1 := NewGetField (1 , resultType , "col2" , true )
115116 require .NotNil (get1 )
116- eq := expression . NewEquals (get0 , get1 )
117+ eq := NewEquals (get0 , get1 )
117118 require .NotNil (eq )
118119 require .Equal (types .Boolean , eq .Type ())
119120 for cmpResult , cases := range cmpCase {
@@ -136,11 +137,11 @@ func TestEquals(t *testing.T) {
136137func TestNullSafeEquals (t * testing.T ) {
137138 require := require .New (t )
138139 for resultType , cmpCase := range comparisonCases {
139- get0 := expression . NewGetField (0 , resultType , "col1" , true )
140+ get0 := NewGetField (0 , resultType , "col1" , true )
140141 require .NotNil (get0 )
141- get1 := expression . NewGetField (1 , resultType , "col2" , true )
142+ get1 := NewGetField (1 , resultType , "col2" , true )
142143 require .NotNil (get1 )
143- seq := expression . NewNullSafeEquals (get0 , get1 )
144+ seq := NewNullSafeEquals (get0 , get1 )
144145 require .NotNil (seq )
145146 require .Equal (types .Boolean , seq .Type ())
146147 for cmpResult , cases := range cmpCase {
@@ -167,11 +168,11 @@ func TestNullSafeEquals(t *testing.T) {
167168func TestLessThan (t * testing.T ) {
168169 require := require .New (t )
169170 for resultType , cmpCase := range comparisonCases {
170- get0 := expression . NewGetField (0 , resultType , "col1" , true )
171+ get0 := NewGetField (0 , resultType , "col1" , true )
171172 require .NotNil (get0 )
172- get1 := expression . NewGetField (1 , resultType , "col2" , true )
173+ get1 := NewGetField (1 , resultType , "col2" , true )
173174 require .NotNil (get1 )
174- eq := expression . NewLessThan (get0 , get1 )
175+ eq := NewLessThan (get0 , get1 )
175176 require .NotNil (eq )
176177 require .Equal (types .Boolean , eq .Type ())
177178 for cmpResult , cases := range cmpCase {
@@ -194,11 +195,11 @@ func TestLessThan(t *testing.T) {
194195func TestGreaterThan (t * testing.T ) {
195196 require := require .New (t )
196197 for resultType , cmpCase := range comparisonCases {
197- get0 := expression . NewGetField (0 , resultType , "col1" , true )
198+ get0 := NewGetField (0 , resultType , "col1" , true )
198199 require .NotNil (get0 )
199- get1 := expression . NewGetField (1 , resultType , "col2" , true )
200+ get1 := NewGetField (1 , resultType , "col2" , true )
200201 require .NotNil (get1 )
201- eq := expression . NewGreaterThan (get0 , get1 )
202+ eq := NewGreaterThan (get0 , get1 )
202203 require .NotNil (eq )
203204 require .Equal (types .Boolean , eq .Type ())
204205 for cmpResult , cases := range cmpCase {
@@ -218,13 +219,49 @@ func TestGreaterThan(t *testing.T) {
218219 }
219220}
220221
221- func eval (t * testing.T , e sql.Expression , row sql.Row ) interface {} {
222- t .Helper ()
223- v , err := e .Eval (sql .NewEmptyContext (), row )
224- require .NoError (t , err )
225- return v
226- }
227-
228222func TestValueComparison (t * testing.T ) {
229223 // TODO
230224}
225+
226+ // BenchmarkComparison
227+ // BenchmarkComparison-14 4426766 264.4 ns/op
228+ func BenchmarkComparison (b * testing.B ) {
229+ ctx := sql .NewEmptyContext ()
230+ gf1 := NewGetField (0 , types .Int64 , "col1" , true )
231+ gf2 := NewGetField (1 , types .Int64 , "col2" , true )
232+ cmp := newComparison (gf1 , gf2 )
233+ row := sql.Row {1 , 1 }
234+ b .ResetTimer ()
235+
236+ for i := 0 ; i < b .N ; i ++ {
237+ res , err := cmp .Compare (ctx , row )
238+ require .NoError (b , err )
239+ require .Equal (b , 0 , res )
240+ }
241+ }
242+
243+ // BenchmarkValueComparison
244+ // BenchmarkValueComparison-14 4115744 285.8 ns/op
245+ func BenchmarkValueComparison (b * testing.B ) {
246+ ctx := sql .NewEmptyContext ()
247+ gf1 := NewGetField (0 , types .Int64 , "col1" , true )
248+ gf2 := NewGetField (1 , types .Int64 , "col2" , true )
249+ cmp := newComparison (gf1 , gf2 )
250+ row := sql.ValueRow {
251+ {
252+ Val : binary .LittleEndian .AppendUint64 (nil , uint64 (1 )),
253+ Typ : sqltypes .Int64 ,
254+ },
255+ {
256+ Val : binary .LittleEndian .AppendUint64 (nil , uint64 (1 )),
257+ Typ : sqltypes .Int64 ,
258+ },
259+ }
260+ b .ResetTimer ()
261+
262+ for i := 0 ; i < b .N ; i ++ {
263+ res , err := cmp .CompareValue (ctx , row )
264+ require .NoError (b , err )
265+ require .Equal (b , 0 , res )
266+ }
267+ }
0 commit comments