jet/sqlbuilder/delete_statement.go

63 lines
1.3 KiB
Go
Raw Normal View History

2019-04-20 19:49:29 +02:00
package sqlbuilder
import (
"database/sql"
"github.com/dropbox/godropbox/errors"
"github.com/sub0zero/go-sqlbuilder/types"
)
2019-05-07 19:06:21 +02:00
type deleteStatement interface {
statement
2019-04-20 19:49:29 +02:00
2019-05-07 19:06:21 +02:00
WHERE(expression boolExpression) deleteStatement
2019-04-20 19:49:29 +02:00
}
2019-05-07 19:06:21 +02:00
func newDeleteStatement(table writableTable) deleteStatement {
2019-04-20 19:49:29 +02:00
return &deleteStatementImpl{
table: table,
}
}
type deleteStatementImpl struct {
2019-05-07 19:06:21 +02:00
table writableTable
where boolExpression
2019-04-20 19:49:29 +02:00
}
2019-05-07 19:06:21 +02:00
func (d *deleteStatementImpl) WHERE(expression boolExpression) deleteStatement {
2019-04-20 19:49:29 +02:00
d.where = expression
return d
}
func (d *deleteStatementImpl) Sql() (query string, args []interface{}, err error) {
queryData := &queryData{}
2019-05-03 12:51:57 +02:00
queryData.statementType = delete_statement
queryData.WriteString("DELETE FROM ")
2019-04-20 19:49:29 +02:00
if d.table == nil {
return "", nil, errors.New("nil tableName.")
2019-04-20 19:49:29 +02:00
}
2019-05-07 19:06:21 +02:00
if err = d.table.serializeSql(queryData); err != nil {
2019-04-20 19:49:29 +02:00
return
}
if d.where == nil {
return "", nil, errors.New("Deleting without a WHERE clause.")
2019-04-20 19:49:29 +02:00
}
2019-05-03 12:51:57 +02:00
if err = queryData.WriteWhere(d.where); err != nil {
2019-04-20 19:49:29 +02:00
return
}
2019-05-01 14:42:46 +02:00
return queryData.buff.String() + ";", queryData.args, nil
2019-04-20 19:49:29 +02:00
}
2019-05-03 12:51:57 +02:00
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)
}