mydb/internal/sqladapter/exql/column_value_test.go
2023-09-18 15:15:42 +08:00

116 lines
4.5 KiB
Go

package exql
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestColumnValue(t *testing.T) {
cv := &ColumnValue{Column: ColumnWithName("id"), Operator: "=", Value: NewValue(1)}
s, err := cv.Compile(defaultTemplate)
assert.NoError(t, err)
assert.Equal(t, `"id" = '1'`, s)
cv = &ColumnValue{Column: ColumnWithName("date"), Operator: "=", Value: &Raw{Value: "NOW()"}}
s, err = cv.Compile(defaultTemplate)
assert.NoError(t, err)
assert.Equal(t, `"date" = NOW()`, s)
}
func TestColumnValues(t *testing.T) {
cvs := JoinColumnValues(
&ColumnValue{Column: ColumnWithName("id"), Operator: ">", Value: NewValue(8)},
&ColumnValue{Column: ColumnWithName("other.id"), Operator: "<", Value: NewValue(&Raw{Value: "100"})},
&ColumnValue{Column: ColumnWithName("name"), Operator: "=", Value: NewValue("Haruki Murakami")},
&ColumnValue{Column: ColumnWithName("created"), Operator: ">=", Value: NewValue(&Raw{Value: "NOW()"})},
&ColumnValue{Column: ColumnWithName("modified"), Operator: "<=", Value: NewValue(&Raw{Value: "NOW()"})},
)
s, err := cvs.Compile(defaultTemplate)
assert.NoError(t, err)
assert.Equal(t, `"id" > '8', "other"."id" < 100, "name" = 'Haruki Murakami', "created" >= NOW(), "modified" <= NOW()`, s)
}
func BenchmarkNewColumnValue(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = &ColumnValue{Column: ColumnWithName("a"), Operator: "=", Value: NewValue(Raw{Value: "7"})}
}
}
func BenchmarkColumnValueHash(b *testing.B) {
cv := &ColumnValue{Column: ColumnWithName("id"), Operator: "=", Value: NewValue(1)}
b.ResetTimer()
for i := 0; i < b.N; i++ {
cv.Hash()
}
}
func BenchmarkColumnValueCompile(b *testing.B) {
cv := &ColumnValue{Column: ColumnWithName("id"), Operator: "=", Value: NewValue(1)}
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _ = cv.Compile(defaultTemplate)
}
}
func BenchmarkColumnValueCompileNoCache(b *testing.B) {
for i := 0; i < b.N; i++ {
cv := &ColumnValue{Column: ColumnWithName("id"), Operator: "=", Value: NewValue(1)}
_, _ = cv.Compile(defaultTemplate)
}
}
func BenchmarkJoinColumnValues(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = JoinColumnValues(
&ColumnValue{Column: ColumnWithName("id"), Operator: ">", Value: NewValue(8)},
&ColumnValue{Column: ColumnWithName("other.id"), Operator: "<", Value: NewValue(Raw{Value: "100"})},
&ColumnValue{Column: ColumnWithName("name"), Operator: "=", Value: NewValue("Haruki Murakami")},
&ColumnValue{Column: ColumnWithName("created"), Operator: ">=", Value: NewValue(Raw{Value: "NOW()"})},
&ColumnValue{Column: ColumnWithName("modified"), Operator: "<=", Value: NewValue(Raw{Value: "NOW()"})},
)
}
}
func BenchmarkColumnValuesHash(b *testing.B) {
cvs := JoinColumnValues(
&ColumnValue{Column: ColumnWithName("id"), Operator: ">", Value: NewValue(8)},
&ColumnValue{Column: ColumnWithName("other.id"), Operator: "<", Value: NewValue(&Raw{Value: "100"})},
&ColumnValue{Column: ColumnWithName("name"), Operator: "=", Value: NewValue("Haruki Murakami")},
&ColumnValue{Column: ColumnWithName("created"), Operator: ">=", Value: NewValue(&Raw{Value: "NOW()"})},
&ColumnValue{Column: ColumnWithName("modified"), Operator: "<=", Value: NewValue(&Raw{Value: "NOW()"})},
)
b.ResetTimer()
for i := 0; i < b.N; i++ {
cvs.Hash()
}
}
func BenchmarkColumnValuesCompile(b *testing.B) {
cvs := JoinColumnValues(
&ColumnValue{Column: ColumnWithName("id"), Operator: ">", Value: NewValue(8)},
&ColumnValue{Column: ColumnWithName("other.id"), Operator: "<", Value: NewValue(&Raw{Value: "100"})},
&ColumnValue{Column: ColumnWithName("name"), Operator: "=", Value: NewValue("Haruki Murakami")},
&ColumnValue{Column: ColumnWithName("created"), Operator: ">=", Value: NewValue(&Raw{Value: "NOW()"})},
&ColumnValue{Column: ColumnWithName("modified"), Operator: "<=", Value: NewValue(&Raw{Value: "NOW()"})},
)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _ = cvs.Compile(defaultTemplate)
}
}
func BenchmarkColumnValuesCompileNoCache(b *testing.B) {
for i := 0; i < b.N; i++ {
cvs := JoinColumnValues(
&ColumnValue{Column: ColumnWithName("id"), Operator: ">", Value: NewValue(8)},
&ColumnValue{Column: ColumnWithName("other.id"), Operator: "<", Value: NewValue(&Raw{Value: "100"})},
&ColumnValue{Column: ColumnWithName("name"), Operator: "=", Value: NewValue("Haruki Murakami")},
&ColumnValue{Column: ColumnWithName("created"), Operator: ">=", Value: NewValue(&Raw{Value: "NOW()"})},
&ColumnValue{Column: ColumnWithName("modified"), Operator: "<=", Value: NewValue(&Raw{Value: "NOW()"})},
)
_, _ = cvs.Compile(defaultTemplate)
}
}