fork github.com/doug-martin
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
package exp
|
||||
|
||||
type (
|
||||
DeleteClauses interface {
|
||||
HasFrom() bool
|
||||
clone() *deleteClauses
|
||||
|
||||
CommonTables() []CommonTableExpression
|
||||
CommonTablesAppend(cte CommonTableExpression) DeleteClauses
|
||||
|
||||
From() IdentifierExpression
|
||||
SetFrom(table IdentifierExpression) 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 IdentifierExpression
|
||||
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() IdentifierExpression {
|
||||
return dc.from
|
||||
}
|
||||
|
||||
func (dc *deleteClauses) SetFrom(table IdentifierExpression) 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
|
||||
}
|
||||
Reference in New Issue
Block a user