mirror of https://github.com/VinGarcia/ksql.git
Fix Delete() to work with postgres
parent
ed8f0550aa
commit
995ccd680c
12
kiss_orm.go
12
kiss_orm.go
|
@ -348,7 +348,7 @@ func (c Client) Delete(
|
|||
return nil
|
||||
}
|
||||
|
||||
query := buildDeleteQuery(c.tableName, ids)
|
||||
query := buildDeleteQuery(c.dialect, c.tableName, ids)
|
||||
|
||||
_, err := c.db.DB().ExecContext(ctx, query, ids...)
|
||||
|
||||
|
@ -737,15 +737,15 @@ func getCachedTagInfo(tagInfoCache map[reflect.Type]structInfo, key reflect.Type
|
|||
return info
|
||||
}
|
||||
|
||||
func buildDeleteQuery(table string, ids []interface{}) string {
|
||||
func buildDeleteQuery(dialect dialect, table string, ids []interface{}) string {
|
||||
values := []string{}
|
||||
for range ids {
|
||||
values = append(values, "?")
|
||||
for i := range ids {
|
||||
values = append(values, dialect.Placeholder(i))
|
||||
}
|
||||
|
||||
return fmt.Sprintf(
|
||||
"DELETE FROM `%s` WHERE id IN (%s)",
|
||||
table,
|
||||
"DELETE FROM %s WHERE id IN (%s)",
|
||||
dialect.Escape(table),
|
||||
strings.Join(values, ","),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -228,17 +228,19 @@ func TestInsert(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDelete(t *testing.T) {
|
||||
err := createTable("sqlite3")
|
||||
for _, driver := range []string{"sqlite3", "postgres"} {
|
||||
t.Run(driver, func(t *testing.T) {
|
||||
err := createTable(driver)
|
||||
if err != nil {
|
||||
t.Fatal("could not create test table!, reason:", err.Error())
|
||||
}
|
||||
|
||||
t.Run("should ignore empty lists of ids", func(t *testing.T) {
|
||||
db := connectDB(t, "sqlite3")
|
||||
db := connectDB(t, driver)
|
||||
defer db.Close()
|
||||
|
||||
ctx := context.Background()
|
||||
c := newTestClient(db, "sqlite3", "users")
|
||||
c := newTestClient(db, driver, "users")
|
||||
|
||||
u := User{
|
||||
Name: "Won't be deleted",
|
||||
|
@ -249,7 +251,7 @@ func TestDelete(t *testing.T) {
|
|||
assert.NotEqual(t, uint(0), u.ID)
|
||||
|
||||
result := User{}
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id=?", u.ID)
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u.ID, result.ID)
|
||||
|
||||
|
@ -257,17 +259,17 @@ func TestDelete(t *testing.T) {
|
|||
assert.Equal(t, nil, err)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u.ID, result.ID)
|
||||
})
|
||||
|
||||
t.Run("should delete one id correctly", func(t *testing.T) {
|
||||
db := connectDB(t, "sqlite3")
|
||||
db := connectDB(t, driver)
|
||||
defer db.Close()
|
||||
|
||||
ctx := context.Background()
|
||||
c := newTestClient(db, "sqlite3", "users")
|
||||
c := newTestClient(db, driver, "users")
|
||||
|
||||
u1 := User{
|
||||
Name: "Fernanda",
|
||||
|
@ -278,7 +280,7 @@ func TestDelete(t *testing.T) {
|
|||
assert.NotEqual(t, uint(0), u1.ID)
|
||||
|
||||
result := User{}
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id=?", u1.ID)
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u1.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u1.ID, result.ID)
|
||||
|
||||
|
@ -291,7 +293,7 @@ func TestDelete(t *testing.T) {
|
|||
assert.NotEqual(t, uint(0), u2.ID)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u2.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u2.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u2.ID, result.ID)
|
||||
|
||||
|
@ -299,7 +301,7 @@ func TestDelete(t *testing.T) {
|
|||
assert.Equal(t, nil, err)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u1.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u1.ID)
|
||||
it.Scan(&result)
|
||||
|
||||
assert.Equal(t, nil, it.Error)
|
||||
|
@ -307,7 +309,7 @@ func TestDelete(t *testing.T) {
|
|||
assert.Equal(t, "", result.Name)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u2.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u2.ID)
|
||||
it.Scan(&result)
|
||||
|
||||
assert.Equal(t, nil, it.Error)
|
||||
|
@ -316,11 +318,11 @@ func TestDelete(t *testing.T) {
|
|||
})
|
||||
|
||||
t.Run("should delete multiple ids correctly", func(t *testing.T) {
|
||||
db := connectDB(t, "sqlite3")
|
||||
db := connectDB(t, driver)
|
||||
defer db.Close()
|
||||
|
||||
ctx := context.Background()
|
||||
c := newTestClient(db, "sqlite3", "users")
|
||||
c := newTestClient(db, driver, "users")
|
||||
|
||||
u1 := User{
|
||||
Name: "Fernanda",
|
||||
|
@ -344,17 +346,17 @@ func TestDelete(t *testing.T) {
|
|||
assert.NotEqual(t, uint(0), u3.ID)
|
||||
|
||||
result := User{}
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id=?", u1.ID)
|
||||
it := c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u1.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u1.ID, result.ID)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u2.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u2.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u2.ID, result.ID)
|
||||
|
||||
result = User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id=?", u3.ID)
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id="+c.dialect.Placeholder(0), u3.ID)
|
||||
it.Scan(&result)
|
||||
assert.Equal(t, u3.ID, result.ID)
|
||||
|
||||
|
@ -362,13 +364,21 @@ func TestDelete(t *testing.T) {
|
|||
assert.Equal(t, nil, err)
|
||||
|
||||
results := []User{}
|
||||
it = c.db.Raw("SELECT * FROM users WHERE id IN (?, ?, ?)", u1.ID, u2.ID, u3.ID)
|
||||
it = c.db.Raw(
|
||||
fmt.Sprintf(
|
||||
"SELECT * FROM users WHERE id IN (%s, %s, %s)",
|
||||
c.dialect.Placeholder(0), c.dialect.Placeholder(1), c.dialect.Placeholder(2),
|
||||
),
|
||||
u1.ID, u2.ID, u3.ID,
|
||||
)
|
||||
it.Scan(&results)
|
||||
|
||||
assert.Equal(t, nil, it.Error)
|
||||
assert.Equal(t, 1, len(results))
|
||||
assert.Equal(t, "This won't be deleted", results[0].Name)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdate(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue