Create comprehensive documentation for future Claude Code instances working in this repository, including: - Development commands for testing, building, and code quality - Core architecture overview of the SQL query builder system - Directory structure and component explanations - Testing patterns and conventions - Key dependencies and their purposes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
178 lines
3.9 KiB
Go
178 lines
3.9 KiB
Go
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
|
|
}
|