91 lines
2.2 KiB
Go
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
|
|
}
|