blob: 8b8950d154426e160b6317ea4170c557992c31cc [file] [log] [blame] [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}).
Set("c1", Case("status").When("1", "2").When("2", "1")).
Set("c2", Case().When("a = 2", Expr("?", "foo")).When("a = 3", Expr("?", "bar"))).
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 = ?, " +
"c1 = CASE status WHEN 1 THEN 2 WHEN 2 THEN 1 END, " +
"c2 = CASE WHEN a = 2 THEN ? WHEN a = 3 THEN ? END " +
"WHERE d = ? " +
"ORDER BY e LIMIT 4 OFFSET 5 " +
"RETURNING ?"
assert.Equal(t, expectedSql, sql)
expectedArgs := []interface{}{0, 1, 2, "foo", "bar", 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)
}