62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
// delete deletes the row with the provided key from the table.
|
|
func (tm *objectIndexer) delete(ctx context.Context, conn dbConn, key interface{}) error {
|
|
buf := new(strings.Builder)
|
|
var params []interface{}
|
|
var err error
|
|
if !tm.options.disableRetainDeletions && tm.typ.RetainDeletions {
|
|
params, err = tm.retainDeleteSqlAndParams(buf, key)
|
|
} else {
|
|
params, err = tm.deleteSqlAndParams(buf, key)
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sqlStr := buf.String()
|
|
tm.options.logger.Info("Delete", "sql", sqlStr, "params", params)
|
|
_, err = conn.ExecContext(ctx, sqlStr, params...)
|
|
return err
|
|
}
|
|
|
|
// deleteSqlAndParams generates a DELETE statement and binding parameters for the provided key.
|
|
func (tm *objectIndexer) deleteSqlAndParams(w io.Writer, key interface{}) ([]interface{}, error) {
|
|
_, err := fmt.Fprintf(w, "DELETE FROM %q", tm.tableName())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, keyParams, err := tm.whereSqlAndParams(w, key, 1)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = fmt.Fprintf(w, ";")
|
|
return keyParams, err
|
|
}
|
|
|
|
// retainDeleteSqlAndParams generates an UPDATE statement to set the _deleted column to true for the provided key
|
|
// which is used when the table is set to retain deletions mode.
|
|
func (tm *objectIndexer) retainDeleteSqlAndParams(w io.Writer, key interface{}) ([]interface{}, error) {
|
|
_, err := fmt.Fprintf(w, "UPDATE %q SET _deleted = TRUE", tm.tableName())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, keyParams, err := tm.whereSqlAndParams(w, key, 1)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = fmt.Fprintf(w, ";")
|
|
return keyParams, err
|
|
}
|