jet/sqlbuilder/delete_statement.go

90 lines
1.9 KiB
Go
Raw Normal View History

2019-04-20 19:49:29 +02:00
package sqlbuilder
import (
2019-06-20 12:22:19 +02:00
"context"
2019-04-20 19:49:29 +02:00
"database/sql"
2019-06-05 17:15:20 +02:00
"errors"
2019-06-05 17:56:24 +02:00
"github.com/go-jet/jet/sqlbuilder/execution"
2019-04-20 19:49:29 +02:00
)
2019-06-04 12:10:23 +02:00
type DeleteStatement interface {
2019-05-12 18:15:23 +02:00
Statement
2019-04-20 19:49:29 +02:00
2019-06-04 12:10:23 +02:00
WHERE(expression BoolExpression) DeleteStatement
2019-04-20 19:49:29 +02:00
}
2019-06-05 17:15:20 +02:00
func newDeleteStatement(table WritableTable) DeleteStatement {
2019-04-20 19:49:29 +02:00
return &deleteStatementImpl{
table: table,
}
}
type deleteStatementImpl struct {
2019-06-05 17:15:20 +02:00
table WritableTable
where BoolExpression
2019-04-20 19:49:29 +02:00
}
2019-06-04 12:10:23 +02:00
func (d *deleteStatementImpl) WHERE(expression BoolExpression) DeleteStatement {
2019-04-20 19:49:29 +02:00
d.where = expression
return d
}
2019-05-12 18:15:23 +02:00
func (d *deleteStatementImpl) serializeImpl(out *queryData) error {
2019-05-13 12:33:11 +02:00
if d == nil {
return errors.New("delete statement is nil")
2019-05-13 12:33:11 +02:00
}
out.newLine()
2019-05-12 18:15:23 +02:00
out.writeString("DELETE FROM")
2019-04-20 19:49:29 +02:00
if d.table == nil {
return errors.New("nil tableName")
2019-04-20 19:49:29 +02:00
}
2019-05-12 18:15:23 +02:00
if err := d.table.serialize(delete_statement, out); err != nil {
return err
2019-04-20 19:49:29 +02:00
}
if d.where == nil {
return errors.New("deleting without a WHERE clause")
2019-04-20 19:49:29 +02:00
}
2019-05-12 18:15:23 +02:00
if err := out.writeWhere(delete_statement, d.where); err != nil {
return err
}
return nil
}
func (d *deleteStatementImpl) Sql() (query string, args []interface{}, err error) {
queryData := &queryData{}
err = d.serializeImpl(queryData)
if err != nil {
2019-04-20 19:49:29 +02:00
return
}
2019-05-12 18:15:23 +02:00
query, args = queryData.finalize()
return
}
func (d *deleteStatementImpl) DebugSql() (query string, err error) {
return DebugSql(d)
2019-04-20 19:49:29 +02:00
}
2019-05-03 12:51:57 +02:00
func (d *deleteStatementImpl) Query(db execution.Db, destination interface{}) error {
2019-05-13 12:33:11 +02:00
return Query(d, db, destination)
2019-05-03 12:51:57 +02:00
}
2019-06-20 12:22:19 +02:00
func (d *deleteStatementImpl) QueryContext(db execution.Db, context context.Context, destination interface{}) error {
return QueryContext(d, db, context, destination)
}
func (d *deleteStatementImpl) Exec(db execution.Db) (res sql.Result, err error) {
return Exec(d, db)
2019-05-03 12:51:57 +02:00
}
2019-06-20 12:22:19 +02:00
func (d *deleteStatementImpl) ExecContext(db execution.Db, context context.Context) (res sql.Result, err error) {
return ExecContext(d, db, context)
}