package orm
import (
)
type DeleteQuery struct {
q *Query
placeholder bool
}
var (
_ QueryAppender = (*DeleteQuery)(nil)
_ QueryCommand = (*DeleteQuery)(nil)
)
func ( *Query) *DeleteQuery {
return &DeleteQuery{
q: ,
}
}
func ( *DeleteQuery) () string {
, := .AppendQuery(defaultFmter, nil)
if != nil {
panic()
}
return string()
}
func ( *DeleteQuery) () QueryOp {
return DeleteOp
}
func ( *DeleteQuery) () QueryCommand {
return &DeleteQuery{
q: .q.Clone(),
placeholder: .placeholder,
}
}
func ( *DeleteQuery) () *Query {
return .q
}
func ( *DeleteQuery) ( []byte) ([]byte, error) {
:= .Clone().(*DeleteQuery)
.placeholder = true
return .AppendQuery(dummyFormatter{}, )
}
func ( *DeleteQuery) ( QueryFormatter, []byte) ( []byte, error) {
if .q.stickyErr != nil {
return nil, .q.stickyErr
}
if len(.q.with) > 0 {
, = .q.appendWith(, )
if != nil {
return nil,
}
}
= append(, "DELETE FROM "...)
, = .q.appendFirstTableWithAlias(, )
if != nil {
return nil,
}
if .q.hasMultiTables() {
= append(, " USING "...)
, = .q.appendOtherTables(, )
if != nil {
return nil,
}
}
= append(, " WHERE "...)
:= .q.tableModel.Value()
if .q.isSliceModelWithData() {
if len(.q.where) > 0 {
, = .q.appendWhere(, )
if != nil {
return nil,
}
} else {
:= .q.tableModel.Table()
= .checkPKs()
if != nil {
return nil,
}
= appendColumnAndSliceValue(, , , .Alias, .PKs)
}
} else {
, = .q.mustAppendWhere(, )
if != nil {
return nil,
}
}
if len(.q.returning) > 0 {
, = .q.appendReturning(, )
if != nil {
return nil,
}
}
return , .q.stickyErr
}
func (
QueryFormatter, []byte, reflect.Value, types.Safe, []*Field,
) []byte {
if len() > 1 {
= append(, '(')
}
= appendColumns(, , )
if len() > 1 {
= append(, ')')
}
= append(, " IN ("...)
:= isTemplateFormatter()
:= .Len()
for := 0; < ; ++ {
if > 0 {
= append(, ", "...)
}
:= indirect(.Index())
if len() > 1 {
= append(, '(')
}
for , := range {
if > 0 {
= append(, ", "...)
}
if {
= append(, '?')
} else {
= .AppendValue(, , 1)
}
}
if len() > 1 {
= append(, ')')
}
}
= append(, ')')
return
}