blob: 13795c3dfc0c9ec7e01d9d731c9e3486438259d4 [file] [edit]
package squirrel
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestUpdateBuilderToSql(t *testing.T) {
b := Update("").
Prefix("WITH prefix AS ?", 0).
Table("a").
Set("b", Expr("? + 1", 1)).
SetMap(Eq{"c": 2}).
Where("d = ?", 3).
OrderBy("e").
Limit(4).
Offset(5).
Suffix("RETURNING ?", 6)
sql, args, err := b.ToSql()
assert.NoError(t, err)
expectedSql :=
"WITH prefix AS ? " +
"UPDATE a SET b = ? + 1, c = ? WHERE d = ? " +
"ORDER BY e LIMIT 4 OFFSET 5 " +
"RETURNING ?"
assert.Equal(t, expectedSql, sql)
expectedArgs := []interface{}{0, 1, 2, 3, 6}
assert.Equal(t, expectedArgs, args)
}
func TestUpdateBuilderToSqlErr(t *testing.T) {
_, _, err := Update("").Set("x", 1).ToSql()
assert.Error(t, err)
_, _, err = Update("x").ToSql()
assert.Error(t, err)
}
func TestUpdateBuilderPlaceholders(t *testing.T) {
b := Update("test").SetMap(Eq{"x": 1, "y": 2})
sql, _, _ := b.PlaceholderFormat(Question).ToSql()
assert.Equal(t, "UPDATE test SET x = ?, y = ?", sql)
sql, _, _ = b.PlaceholderFormat(Dollar).ToSql()
assert.Equal(t, "UPDATE test SET x = $1, y = $2", sql)
}
func TestUpdateBuilderRunners(t *testing.T) {
db := &DBStub{}
b := Update("test").Set("x", 1).RunWith(db)
expectedSql := "UPDATE test SET x = ?"
b.Exec()
assert.Equal(t, expectedSql, db.LastExecSql)
}
func TestUpdateBuilderNoRunner(t *testing.T) {
b := Update("test").Set("x", 1)
_, err := b.Exec()
assert.Equal(t, RunnerNotSet, err)
}