package exp type ( DeleteClauses interface { HasFrom() bool clone() *deleteClauses CommonTables() []CommonTableExpression CommonTablesAppend(cte CommonTableExpression) DeleteClauses From() ColumnListExpression SetFrom(table ColumnListExpression) DeleteClauses Where() ExpressionList ClearWhere() DeleteClauses WhereAppend(expressions ...Expression) DeleteClauses Order() ColumnListExpression HasOrder() bool ClearOrder() DeleteClauses SetOrder(oes ...OrderedExpression) DeleteClauses OrderAppend(...OrderedExpression) DeleteClauses OrderPrepend(...OrderedExpression) DeleteClauses Limit() interface{} HasLimit() bool ClearLimit() DeleteClauses SetLimit(limit interface{}) DeleteClauses Returning() ColumnListExpression HasReturning() bool SetReturning(cl ColumnListExpression) DeleteClauses } deleteClauses struct { commonTables []CommonTableExpression from ColumnListExpression where ExpressionList order ColumnListExpression limit interface{} returning ColumnListExpression } ) func NewDeleteClauses() DeleteClauses { return &deleteClauses{} } func (dc *deleteClauses) HasFrom() bool { return dc.from != nil } func (dc *deleteClauses) clone() *deleteClauses { return &deleteClauses{ commonTables: dc.commonTables, from: dc.from, where: dc.where, order: dc.order, limit: dc.limit, returning: dc.returning, } } func (dc *deleteClauses) CommonTables() []CommonTableExpression { return dc.commonTables } func (dc *deleteClauses) CommonTablesAppend(cte CommonTableExpression) DeleteClauses { ret := dc.clone() ret.commonTables = append(ret.commonTables, cte) return ret } func (dc *deleteClauses) From() ColumnListExpression { return dc.from } func (dc *deleteClauses) SetFrom(table ColumnListExpression) DeleteClauses { ret := dc.clone() ret.from = table return ret } func (dc *deleteClauses) Where() ExpressionList { return dc.where } func (dc *deleteClauses) ClearWhere() DeleteClauses { ret := dc.clone() ret.where = nil return ret } func (dc *deleteClauses) WhereAppend(expressions ...Expression) DeleteClauses { if len(expressions) == 0 { return dc } ret := dc.clone() if ret.where == nil { ret.where = NewExpressionList(AndType, expressions...) } else { ret.where = ret.where.Append(expressions...) } return ret } func (dc *deleteClauses) Order() ColumnListExpression { return dc.order } func (dc *deleteClauses) HasOrder() bool { return dc.order != nil } func (dc *deleteClauses) ClearOrder() DeleteClauses { ret := dc.clone() ret.order = nil return ret } func (dc *deleteClauses) SetOrder(oes ...OrderedExpression) DeleteClauses { ret := dc.clone() ret.order = NewOrderedColumnList(oes...) return ret } func (dc *deleteClauses) OrderAppend(oes ...OrderedExpression) DeleteClauses { if dc.order == nil { return dc.SetOrder(oes...) } ret := dc.clone() ret.order = ret.order.Append(NewOrderedColumnList(oes...).Columns()...) return ret } func (dc *deleteClauses) OrderPrepend(oes ...OrderedExpression) DeleteClauses { if dc.order == nil { return dc.SetOrder(oes...) } ret := dc.clone() ret.order = NewOrderedColumnList(oes...).Append(ret.order.Columns()...) return ret } func (dc *deleteClauses) Limit() interface{} { return dc.limit } func (dc *deleteClauses) HasLimit() bool { return dc.limit != nil } func (dc *deleteClauses) ClearLimit() DeleteClauses { ret := dc.clone() ret.limit = nil return ret } func (dc *deleteClauses) SetLimit(limit interface{}) DeleteClauses { ret := dc.clone() ret.limit = limit return ret } func (dc *deleteClauses) Returning() ColumnListExpression { return dc.returning } func (dc *deleteClauses) HasReturning() bool { return dc.returning != nil && !dc.returning.IsEmpty() } func (dc *deleteClauses) SetReturning(cl ColumnListExpression) DeleteClauses { ret := dc.clone() ret.returning = cl return ret }