Skip to content

Commit

Permalink
Merge pull request #43 from geoffreybauduin/dev/gbauduin/equality
Browse files Browse the repository at this point in the history
fix: bring back ValueFilter.IsEquality and ValueFilter.GetEquality
  • Loading branch information
geoffreybauduin authored Sep 29, 2020
2 parents aa0bf5e + c547178 commit 4f01be4
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
16 changes: 16 additions & 0 deletions filterapply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,3 +250,19 @@ func TestFilterApplier_ApplyRaw_EscapedFields(t *testing.T) {
assert.Len(t, models, 1)
assert.Equal(t, models[0].(*testdata.TwoI).ID, category.ID)
}

func TestFilterApply_Like(t *testing.T) {
killDb, err := testdata.SetupTestDatabase("test")
defer killDb()
assert.Nil(t, err)
dbp, err := yaorm.NewDBProvider(context.TODO(), "test")
assert.Nil(t, err)
category := &testdata.TwoI{Name: "category"}
saveModel(t, dbp, category)
category2 := &testdata.TwoI{Name: "category2"}
saveModel(t, dbp, category2)

models, err := yaorm.GenericSelectAll(dbp, testdata.NewTwoIFilter().Name(yaormfilter.Like("category%")))
assert.Nil(t, err)
assert.Len(t, models, 2)
}
9 changes: 9 additions & 0 deletions yaormfilter/tools_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ func TestEquals(t *testing.T) {
assert.IsType(t, &yaormfilter.BoolFilter{}, yaormfilter.Equals(false))
}

func TestEquality(t *testing.T) {
f := yaormfilter.Equals("abdef")
assert.True(t, f.IsEquality())
assert.Equal(t, "abdef", f.GetEquality())

f = yaormfilter.NotEquals("bdef")
assert.False(t, f.IsEquality())
}

func TestNotEquals(t *testing.T) {
assert.IsType(t, &yaormfilter.StringFilter{}, yaormfilter.NotEquals("abcdef"))
assert.IsType(t, &yaormfilter.Int64Filter{}, yaormfilter.NotEquals(int64(12)))
Expand Down
18 changes: 16 additions & 2 deletions yaormfilter/valuefilter.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,22 @@ type ValueFilter interface {
In(v ...interface{}) ValueFilter
NotIn(v ...interface{}) ValueFilter
Raw(fn RawFilterFunc) ValueFilter
IsEquality() bool
GetEquality() interface{}
}

type valuefilterimpl struct {
filterFn RawFilterFunc
filterFn RawFilterFunc
shouldEqual bool
equals_ interface{}
}

func (f valuefilterimpl) IsEquality() bool {
return f.shouldEqual
}

func (f valuefilterimpl) GetEquality() interface{} {
return f.equals_
}

func (f *valuefilterimpl) nil(v bool) *valuefilterimpl {
Expand All @@ -38,6 +50,8 @@ func (f *valuefilterimpl) nil(v bool) *valuefilterimpl {
}

func (f *valuefilterimpl) equals(e interface{}) *valuefilterimpl {
f.shouldEqual = true
f.equals_ = e
return f.raw(func(field string) interface{} {
return squirrel.Eq{field: e}
})
Expand All @@ -51,7 +65,7 @@ func (f *valuefilterimpl) notEquals(e interface{}) *valuefilterimpl {

func (f *valuefilterimpl) like(e interface{}) *valuefilterimpl {
return f.raw(func(field string) interface{} {
return fmt.Sprintf("%s LIKE %s", field, e)
return squirrel.Expr(fmt.Sprintf("%s LIKE ?", field), e)
})
}

Expand Down

0 comments on commit 4f01be4

Please sign in to comment.