package squirrel

import (
	
	
	
	

	
)

type deleteData struct {
	PlaceholderFormat PlaceholderFormat
	RunWith           BaseRunner
	Prefixes          []Sqlizer
	From              string
	WhereParts        []Sqlizer
	OrderBys          []string
	Limit             string
	Offset            string
	Suffixes          []Sqlizer
}

func ( *deleteData) () (sql.Result, error) {
	if .RunWith == nil {
		return nil, RunnerNotSet
	}
	return ExecWith(.RunWith, )
}

func ( *deleteData) () ( string,  []interface{},  error) {
	if len(.From) == 0 {
		 = fmt.Errorf("delete statements must specify a From table")
		return
	}

	 := &bytes.Buffer{}

	if len(.Prefixes) > 0 {
		,  = appendToSql(.Prefixes, , " ", )
		if  != nil {
			return
		}

		.WriteString(" ")
	}

	.WriteString("DELETE FROM ")
	.WriteString(.From)

	if len(.WhereParts) > 0 {
		.WriteString(" WHERE ")
		,  = appendToSql(.WhereParts, , " AND ", )
		if  != nil {
			return
		}
	}

	if len(.OrderBys) > 0 {
		.WriteString(" ORDER BY ")
		.WriteString(strings.Join(.OrderBys, ", "))
	}

	if len(.Limit) > 0 {
		.WriteString(" LIMIT ")
		.WriteString(.Limit)
	}

	if len(.Offset) > 0 {
		.WriteString(" OFFSET ")
		.WriteString(.Offset)
	}

	if len(.Suffixes) > 0 {
		.WriteString(" ")
		,  = appendToSql(.Suffixes, , " ", )
		if  != nil {
			return
		}
	}

	,  = .PlaceholderFormat.ReplacePlaceholders(.String())
	return
}
Builder
DeleteBuilder builds SQL DELETE statements.
Format methods
PlaceholderFormat sets PlaceholderFormat (e.g. Question or Dollar) for the query.
func ( DeleteBuilder) ( PlaceholderFormat) DeleteBuilder {
	return builder.Set(, "PlaceholderFormat", ).(DeleteBuilder)
}
Runner methods
RunWith sets a Runner (like database/sql.DB) to be used with e.g. Exec.
func ( DeleteBuilder) ( BaseRunner) DeleteBuilder {
	return setRunWith(, ).(DeleteBuilder)
}
Exec builds and Execs the query with the Runner set by RunWith.
func ( DeleteBuilder) () (sql.Result, error) {
	 := builder.GetStruct().(deleteData)
	return .Exec()
}
SQL methods
ToSql builds the query into a SQL string and bound args.
func ( DeleteBuilder) () (string, []interface{}, error) {
	 := builder.GetStruct().(deleteData)
	return .ToSql()
}
Prefix adds an expression to the beginning of the query
func ( DeleteBuilder) ( string,  ...interface{}) DeleteBuilder {
	return .PrefixExpr(Expr(, ...))
}
PrefixExpr adds an expression to the very beginning of the query
func ( DeleteBuilder) ( Sqlizer) DeleteBuilder {
	return builder.Append(, "Prefixes", ).(DeleteBuilder)
}
From sets the table to be deleted from.
func ( DeleteBuilder) ( string) DeleteBuilder {
	return builder.Set(, "From", ).(DeleteBuilder)
}
Where adds WHERE expressions to the query. See SelectBuilder.Where for more information.
func ( DeleteBuilder) ( interface{},  ...interface{}) DeleteBuilder {
	return builder.Append(, "WhereParts", newWherePart(, ...)).(DeleteBuilder)
}
OrderBy adds ORDER BY expressions to the query.
func ( DeleteBuilder) ( ...string) DeleteBuilder {
	return builder.Extend(, "OrderBys", ).(DeleteBuilder)
}
Limit sets a LIMIT clause on the query.
func ( DeleteBuilder) ( uint64) DeleteBuilder {
	return builder.Set(, "Limit", fmt.Sprintf("%d", )).(DeleteBuilder)
}
Offset sets a OFFSET clause on the query.
func ( DeleteBuilder) ( uint64) DeleteBuilder {
	return builder.Set(, "Offset", fmt.Sprintf("%d", )).(DeleteBuilder)
}
Suffix adds an expression to the end of the query
func ( DeleteBuilder) ( string,  ...interface{}) DeleteBuilder {
	return .SuffixExpr(Expr(, ...))
}
SuffixExpr adds an expression to the end of the query
func ( DeleteBuilder) ( Sqlizer) DeleteBuilder {
	return builder.Append(, "Suffixes", ).(DeleteBuilder)
}

func ( DeleteBuilder) () (*sql.Rows, error) {
	 := builder.GetStruct().(deleteData)
	return .Query()
}

func ( *deleteData) () (*sql.Rows, error) {
	if .RunWith == nil {
		return nil, RunnerNotSet
	}
	return QueryWith(.RunWith, )