order by option

master
xieguigang 5 years ago
parent cdf501e1a8
commit 427e18b3bd

@ -4,6 +4,12 @@ Imports Microsoft.VisualBasic.Emit.Delegates
Namespace Interpreter.Query
Public Class Options
Public Property OrderBy As OrderBy
Public Property Distinct As Boolean
End Class
''' <summary>
''' from ... select ...
''' </summary>
@ -12,10 +18,12 @@ Namespace Interpreter.Query
Dim sequence As Expression
Dim symbol As SymbolDeclare
Dim executeQueue As Expression()
Dim opt As Options
Sub New(symbol As SymbolDeclare, sequence As Expression, exec As IEnumerable(Of Expression))
Sub New(symbol As SymbolDeclare, sequence As Expression, exec As IEnumerable(Of Expression), opt As Options)
Me.executeQueue = exec.ToArray
Me.symbol = symbol
Me.opt = opt
Me.sequence = sequence
End Sub

@ -27,7 +27,15 @@ Namespace Script
Dim i As Integer = 0
Dim seq As Expression = blocks.GetSequence(offset:=i)
Dim exec As Expression() = blocks.Skip(i).PopulateExpressions.ToArray
Dim proj As New ProjectionExpression(symbolExpr, seq, exec)
Dim opt As New Options With {
.OrderBy = exec _
.Where(Function(t) TypeOf t Is OrderBy) _
.FirstOrDefault
}
Dim execProgram As Expression() = exec _
.Where(Function(t) Not TypeOf t Is OrderBy) _
.ToArray
Dim proj As New ProjectionExpression(symbolExpr, seq, execProgram, opt)
Return proj
End Function

Loading…
Cancel
Save