fork github.com/doug-martin

This commit is contained in:
2025-03-22 23:02:05 +08:00
commit f14642a736
131 changed files with 34555 additions and 0 deletions
+90
View File
@@ -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
}