-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathdelete.go
More file actions
50 lines (39 loc) · 950 Bytes
/
delete.go
File metadata and controls
50 lines (39 loc) · 950 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package crud
import (
stdsql "database/sql"
"errors"
"fmt"
"github.com/azer/crud/v4/pg"
"github.com/azer/crud/v4/sql"
)
func deleteRow(driver string, exec ExecFn, record interface{}) (stdsql.Result, error) {
table, err := NewTable(driver, record)
if err != nil {
return nil, err
}
pk := table.PrimaryKeyField()
if pk == nil {
return nil, errors.New(fmt.Sprintf("Table '%s' (%s) doesn't have a primary-key field", table.Name, table.SQLName))
}
var query string
if pg.IsPostgres(driver) {
query = pg.DeleteQuery(table.SQLName, pk.SQL.Name)
} else {
query = sql.DeleteQuery(table.SQLName, pk.SQL.Name)
}
return exec(query, pk.Value)
}
func mustDelete(driver string, exec ExecFn, record interface{}) error {
result, err := deleteRow(driver, exec, record)
if err != nil {
return err
}
count, err := result.RowsAffected()
if err != nil {
return err
}
if count == 0 {
return stdsql.ErrNoRows
}
return nil
}