116 lines
4.5 KiB
Go
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)
|
||
|
}
|
||
|
}
|