2019-04-20 19:49:29 +02:00
|
|
|
package sqlbuilder
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
|
|
|
|
"github.com/dropbox/godropbox/errors"
|
|
|
|
|
"github.com/sub0zero/go-sqlbuilder/types"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type DeleteStatement interface {
|
|
|
|
|
Statement
|
|
|
|
|
|
|
|
|
|
WHERE(expression BoolExpression) DeleteStatement
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newDeleteStatement(table WritableTable) DeleteStatement {
|
|
|
|
|
return &deleteStatementImpl{
|
|
|
|
|
table: table,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type deleteStatementImpl struct {
|
|
|
|
|
table WritableTable
|
|
|
|
|
where BoolExpression
|
|
|
|
|
order *listClause
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (u *deleteStatementImpl) Query(db types.Db, destination interface{}) error {
|
|
|
|
|
return Query(u, db, destination)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (u *deleteStatementImpl) Execute(db types.Db) (res sql.Result, err error) {
|
|
|
|
|
return Execute(u, db)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (d *deleteStatementImpl) WHERE(expression BoolExpression) DeleteStatement {
|
|
|
|
|
d.where = expression
|
|
|
|
|
return d
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-29 14:39:48 +02:00
|
|
|
func (d *deleteStatementImpl) Sql() (query string, args []interface{}, err error) {
|
|
|
|
|
queryData := &queryData{}
|
|
|
|
|
|
|
|
|
|
queryData.WriteString("DELETE FROM ")
|
2019-04-20 19:49:29 +02:00
|
|
|
|
|
|
|
|
if d.table == nil {
|
2019-04-29 14:39:48 +02:00
|
|
|
return "", nil, errors.New("nil tableName.")
|
2019-04-20 19:49:29 +02:00
|
|
|
}
|
|
|
|
|
|
2019-04-29 14:39:48 +02:00
|
|
|
if err = d.table.SerializeSql(queryData); err != nil {
|
2019-04-20 19:49:29 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if d.where == nil {
|
2019-04-29 14:39:48 +02:00
|
|
|
return "", nil, errors.New("Deleting without a WHERE clause.")
|
2019-04-20 19:49:29 +02:00
|
|
|
}
|
|
|
|
|
|
2019-04-29 14:39:48 +02:00
|
|
|
queryData.WriteString(" WHERE ")
|
|
|
|
|
|
|
|
|
|
if err = d.where.Serialize(queryData); err != nil {
|
2019-04-20 19:49:29 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if d.order != nil {
|
2019-04-29 14:39:48 +02:00
|
|
|
queryData.WriteString(" ORDER BY ")
|
|
|
|
|
if err = d.order.Serialize(queryData); err != nil {
|
2019-04-20 19:49:29 +02:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-29 14:39:48 +02:00
|
|
|
return queryData.queryBuff.String() + ";", queryData.args, nil
|
2019-04-20 19:49:29 +02:00
|
|
|
}
|