diff --git a/statement.go b/statement.go index 1265fe1..9420c67 100644 --- a/statement.go +++ b/statement.go @@ -41,6 +41,13 @@ func (b StatementBuilderType) RunWith(runner BaseRunner) StatementBuilderType { return setRunWith(b, runner).(StatementBuilderType) } +// Where adds WHERE expressions to the query. +// +// See SelectBuilder.Where for more information. +func (b StatementBuilderType) Where(pred interface{}, args ...interface{}) StatementBuilderType { + return builder.Append(b, "WhereParts", newWherePart(pred, args...)).(StatementBuilderType) +} + // StatementBuilder is a parent builder for other builders, e.g. SelectBuilder. var StatementBuilder = StatementBuilderType(builder.EmptyBuilder).PlaceholderFormat(Question) diff --git a/statement_test.go b/statement_test.go index 4f3e5f3..3c93360 100644 --- a/statement_test.go +++ b/statement_test.go @@ -66,3 +66,16 @@ func TestRunWithBaseRunnerQueryRowError(t *testing.T) { assert.Error(t, RunnerNotQueryRunner, sb.Select("test").QueryRow().Scan(nil)) } + +func TestStatementBuilderWhere(t *testing.T) { + sb := StatementBuilder.Where("x = ?", 1) + + sql, args, err := sb.Select("test").Where("y = ?", 2).ToSql() + assert.NoError(t, err) + + expectedSql := "SELECT test WHERE x = ? AND y = ?" + assert.Equal(t, expectedSql, sql) + + expectedArgs := []interface{}{1, 2} + assert.Equal(t, expectedArgs, args) +}