Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion select.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,13 +275,15 @@ func (b *SelectStmt) Distinct() *SelectStmt {
}

// Where adds a where condition.
// query can be Builder or string. value is used only if query type is string.
// query can be Builder or []Builder or string. value is used only if query type is string.
func (b *SelectStmt) Where(query interface{}, value ...interface{}) *SelectStmt {
switch query := query.(type) {
case string:
b.WhereCond = append(b.WhereCond, Expr(query, value...))
case Builder:
b.WhereCond = append(b.WhereCond, query)
case []Builder:
b.WhereCond = append(b.WhereCond, query...)
}
return b
}
Expand Down
16 changes: 16 additions & 0 deletions select_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,22 @@ func TestSelectStmt(t *testing.T) {
require.Equal(t, 3, len(buf.Value()))
}

func TestWhereSliceBuild(t *testing.T) {
buf := NewBuffer()
builder := Select("a", "b").
From("table").
Where(
[]Builder{
Eq("c", 1),
Eq("d", 2),
},
)
err := builder.Build(dialect.MySQL, buf)
require.NoError(t, err)
require.Equal(t, "SELECT a, b FROM table WHERE (`c` = ?) AND (`d` = ?)", buf.String())

}

func BenchmarkSelectSQL(b *testing.B) {
buf := NewBuffer()
for i := 0; i < b.N; i++ {
Expand Down