fork github.com/doug-martin
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user