1package squirrel 2 3import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7) 8 9func TestUpdateBuilderToSql(t *testing.T) { 10 b := Update(""). 11 Prefix("WITH prefix AS ?", 0). 12 Table("a"). 13 Set("b", Expr("? + 1", 1)). 14 SetMap(Eq{"c": 2}). 15 Set("c1", Case("status").When("1", "2").When("2", "1")). 16 Set("c2", Case().When("a = 2", Expr("?", "foo")).When("a = 3", Expr("?", "bar"))). 17 Set("c3", Select("a").From("b")). 18 Where("d = ?", 3). 19 OrderBy("e"). 20 Limit(4). 21 Offset(5). 22 Suffix("RETURNING ?", 6) 23 24 sql, args, err := b.ToSql() 25 assert.NoError(t, err) 26 27 expectedSql := 28 "WITH prefix AS ? " + 29 "UPDATE a SET b = ? + 1, c = ?, " + 30 "c1 = CASE status WHEN 1 THEN 2 WHEN 2 THEN 1 END, " + 31 "c2 = CASE WHEN a = 2 THEN ? WHEN a = 3 THEN ? END, " + 32 "c3 = (SELECT a FROM b) " + 33 "WHERE d = ? " + 34 "ORDER BY e LIMIT 4 OFFSET 5 " + 35 "RETURNING ?" 36 assert.Equal(t, expectedSql, sql) 37 38 expectedArgs := []interface{}{0, 1, 2, "foo", "bar", 3, 6} 39 assert.Equal(t, expectedArgs, args) 40} 41 42func TestUpdateBuilderToSqlErr(t *testing.T) { 43 _, _, err := Update("").Set("x", 1).ToSql() 44 assert.Error(t, err) 45 46 _, _, err = Update("x").ToSql() 47 assert.Error(t, err) 48} 49 50func TestUpdateBuilderPlaceholders(t *testing.T) { 51 b := Update("test").SetMap(Eq{"x": 1, "y": 2}) 52 53 sql, _, _ := b.PlaceholderFormat(Question).ToSql() 54 assert.Equal(t, "UPDATE test SET x = ?, y = ?", sql) 55 56 sql, _, _ = b.PlaceholderFormat(Dollar).ToSql() 57 assert.Equal(t, "UPDATE test SET x = $1, y = $2", sql) 58} 59 60func TestUpdateBuilderRunners(t *testing.T) { 61 db := &DBStub{} 62 b := Update("test").Set("x", 1).RunWith(db) 63 64 expectedSql := "UPDATE test SET x = ?" 65 66 b.Exec() 67 assert.Equal(t, expectedSql, db.LastExecSql) 68} 69 70func TestUpdateBuilderNoRunner(t *testing.T) { 71 b := Update("test").Set("x", 1) 72 73 _, err := b.Exec() 74 assert.Equal(t, RunnerNotSet, err) 75} 76