217 lines
4.7 KiB
Go
217 lines
4.7 KiB
Go
package exp
|
|
|
|
type (
|
|
UpdateClauses interface {
|
|
HasTable() bool
|
|
clone() *updateClauses
|
|
|
|
CommonTables() []CommonTableExpression
|
|
CommonTablesAppend(cte CommonTableExpression) UpdateClauses
|
|
|
|
Table() Expression
|
|
SetTable(table Expression) UpdateClauses
|
|
|
|
SetValues() interface{}
|
|
HasSetValues() bool
|
|
SetSetValues(values interface{}) UpdateClauses
|
|
|
|
From() ColumnListExpression
|
|
HasFrom() bool
|
|
SetFrom(tables ColumnListExpression) UpdateClauses
|
|
|
|
Where() ExpressionList
|
|
ClearWhere() UpdateClauses
|
|
WhereAppend(expressions ...Expression) UpdateClauses
|
|
|
|
Order() ColumnListExpression
|
|
HasOrder() bool
|
|
ClearOrder() UpdateClauses
|
|
SetOrder(oes ...OrderedExpression) UpdateClauses
|
|
OrderAppend(...OrderedExpression) UpdateClauses
|
|
OrderPrepend(...OrderedExpression) UpdateClauses
|
|
|
|
Limit() interface{}
|
|
HasLimit() bool
|
|
ClearLimit() UpdateClauses
|
|
SetLimit(limit interface{}) UpdateClauses
|
|
|
|
Returning() ColumnListExpression
|
|
HasReturning() bool
|
|
SetReturning(cl ColumnListExpression) UpdateClauses
|
|
}
|
|
updateClauses struct {
|
|
commonTables []CommonTableExpression
|
|
table Expression
|
|
setValues interface{}
|
|
from ColumnListExpression
|
|
where ExpressionList
|
|
order ColumnListExpression
|
|
limit interface{}
|
|
returning ColumnListExpression
|
|
}
|
|
)
|
|
|
|
func NewUpdateClauses() UpdateClauses {
|
|
return &updateClauses{}
|
|
}
|
|
|
|
func (uc *updateClauses) HasTable() bool {
|
|
return uc.table != nil
|
|
}
|
|
|
|
func (uc *updateClauses) clone() *updateClauses {
|
|
return &updateClauses{
|
|
commonTables: uc.commonTables,
|
|
table: uc.table,
|
|
setValues: uc.setValues,
|
|
from: uc.from,
|
|
where: uc.where,
|
|
order: uc.order,
|
|
limit: uc.limit,
|
|
returning: uc.returning,
|
|
}
|
|
}
|
|
|
|
func (uc *updateClauses) CommonTables() []CommonTableExpression {
|
|
return uc.commonTables
|
|
}
|
|
|
|
func (uc *updateClauses) CommonTablesAppend(cte CommonTableExpression) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.commonTables = append(ret.commonTables, cte)
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) Table() Expression {
|
|
return uc.table
|
|
}
|
|
|
|
func (uc *updateClauses) SetTable(table Expression) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.table = table
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) SetValues() interface{} {
|
|
return uc.setValues
|
|
}
|
|
|
|
func (uc *updateClauses) HasSetValues() bool {
|
|
return uc.setValues != nil
|
|
}
|
|
|
|
func (uc *updateClauses) SetSetValues(values interface{}) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.setValues = values
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) From() ColumnListExpression {
|
|
return uc.from
|
|
}
|
|
|
|
func (uc *updateClauses) HasFrom() bool {
|
|
return uc.from != nil && !uc.from.IsEmpty()
|
|
}
|
|
|
|
func (uc *updateClauses) SetFrom(from ColumnListExpression) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.from = from
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) Where() ExpressionList {
|
|
return uc.where
|
|
}
|
|
|
|
func (uc *updateClauses) ClearWhere() UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.where = nil
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) WhereAppend(expressions ...Expression) UpdateClauses {
|
|
if len(expressions) == 0 {
|
|
return uc
|
|
}
|
|
ret := uc.clone()
|
|
if ret.where == nil {
|
|
ret.where = NewExpressionList(AndType, expressions...)
|
|
} else {
|
|
ret.where = ret.where.Append(expressions...)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) Order() ColumnListExpression {
|
|
return uc.order
|
|
}
|
|
|
|
func (uc *updateClauses) HasOrder() bool {
|
|
return uc.order != nil
|
|
}
|
|
|
|
func (uc *updateClauses) ClearOrder() UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.order = nil
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) SetOrder(oes ...OrderedExpression) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.order = NewOrderedColumnList(oes...)
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) OrderAppend(oes ...OrderedExpression) UpdateClauses {
|
|
if uc.order == nil {
|
|
return uc.SetOrder(oes...)
|
|
}
|
|
ret := uc.clone()
|
|
ret.order = ret.order.Append(NewOrderedColumnList(oes...).Columns()...)
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) OrderPrepend(oes ...OrderedExpression) UpdateClauses {
|
|
if uc.order == nil {
|
|
return uc.SetOrder(oes...)
|
|
}
|
|
ret := uc.clone()
|
|
ret.order = NewOrderedColumnList(oes...).Append(ret.order.Columns()...)
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) Limit() interface{} {
|
|
return uc.limit
|
|
}
|
|
|
|
func (uc *updateClauses) HasLimit() bool {
|
|
return uc.limit != nil
|
|
}
|
|
|
|
func (uc *updateClauses) ClearLimit() UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.limit = nil
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) SetLimit(limit interface{}) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.limit = limit
|
|
return ret
|
|
}
|
|
|
|
func (uc *updateClauses) Returning() ColumnListExpression {
|
|
return uc.returning
|
|
}
|
|
|
|
func (uc *updateClauses) HasReturning() bool {
|
|
return uc.returning != nil && !uc.returning.IsEmpty()
|
|
}
|
|
|
|
func (uc *updateClauses) SetReturning(cl ColumnListExpression) UpdateClauses {
|
|
ret := uc.clone()
|
|
ret.returning = cl
|
|
return ret
|
|
}
|