Files
db/exp/window.go
T
2025-03-22 23:02:05 +08:00

91 lines
2.2 KiB
Go

package exp
type sqlWindowExpression struct {
name IdentifierExpression
parent IdentifierExpression
partitionCols ColumnListExpression
orderCols ColumnListExpression
}
func NewWindowExpression(window, parent IdentifierExpression, partitionCols, orderCols ColumnListExpression) WindowExpression {
if partitionCols == nil {
partitionCols = NewColumnListExpression()
}
if orderCols == nil {
orderCols = NewColumnListExpression()
}
return sqlWindowExpression{
name: window,
parent: parent,
partitionCols: partitionCols,
orderCols: orderCols,
}
}
func (we sqlWindowExpression) clone() sqlWindowExpression {
return sqlWindowExpression{
name: we.name,
parent: we.parent,
partitionCols: we.partitionCols.Clone().(ColumnListExpression),
orderCols: we.orderCols.Clone().(ColumnListExpression),
}
}
func (we sqlWindowExpression) Clone() Expression {
return we.clone()
}
func (we sqlWindowExpression) Expression() Expression {
return we
}
func (we sqlWindowExpression) Name() IdentifierExpression {
return we.name
}
func (we sqlWindowExpression) HasName() bool {
return we.name != nil
}
func (we sqlWindowExpression) Parent() IdentifierExpression {
return we.parent
}
func (we sqlWindowExpression) HasParent() bool {
return we.parent != nil
}
func (we sqlWindowExpression) PartitionCols() ColumnListExpression {
return we.partitionCols
}
func (we sqlWindowExpression) HasPartitionBy() bool {
return we.partitionCols != nil && !we.partitionCols.IsEmpty()
}
func (we sqlWindowExpression) OrderCols() ColumnListExpression {
return we.orderCols
}
func (we sqlWindowExpression) HasOrder() bool {
return we.orderCols != nil && !we.orderCols.IsEmpty()
}
func (we sqlWindowExpression) PartitionBy(cols ...interface{}) WindowExpression {
ret := we.clone()
ret.partitionCols = NewColumnListExpression(cols...)
return ret
}
func (we sqlWindowExpression) OrderBy(cols ...interface{}) WindowExpression {
ret := we.clone()
ret.orderCols = NewColumnListExpression(cols...)
return ret
}
func (we sqlWindowExpression) Inherit(parent string) WindowExpression {
ret := we.clone()
ret.parent = ParseIdentifier(parent)
return ret
}