diff --git a/LINQ/LINQ/Interpreter/Query/DataSoruce/URIIteratorDriver.vb b/LINQ/LINQ/Interpreter/Query/DataSoruce/URIIteratorDriver.vb index 42436e5..ee12e12 100644 --- a/LINQ/LINQ/Interpreter/Query/DataSoruce/URIIteratorDriver.vb +++ b/LINQ/LINQ/Interpreter/Query/DataSoruce/URIIteratorDriver.vb @@ -57,7 +57,10 @@ Namespace Interpreter.Query End Sub Public Overrides Iterator Function PopulatesData() As IEnumerable(Of Object) - Dim driver As DataSourceDriver = env.GlobalEnvir.GetDriverByCode(symbolDeclare.type) + Dim driver As DataSourceDriver = env.GlobalEnvir.GetDriverByCode( + code:=symbolDeclare.type, + arguments:=symbolDeclare.arguments + ) For Each item As Object In driver.ReadFromUri(uri) Yield item diff --git a/LINQ/LINQ/Interpreter/Query/ProjectionExpression.vb b/LINQ/LINQ/Interpreter/Query/ProjectionExpression.vb index f0fb40f..e160fb2 100644 --- a/LINQ/LINQ/Interpreter/Query/ProjectionExpression.vb +++ b/LINQ/LINQ/Interpreter/Query/ProjectionExpression.vb @@ -76,6 +76,9 @@ Namespace Interpreter.Query .env = New Environment(parent:=env), .throwError = context.throwError } + + Call LoadDrivers(context) + Dim skipVal As Boolean Dim dataset As DataSet = GetDataSet(context) diff --git a/LINQ/LINQ/Interpreter/Query/QueryExpression.vb b/LINQ/LINQ/Interpreter/Query/QueryExpression.vb index 81cf7f7..0a27bf1 100644 --- a/LINQ/LINQ/Interpreter/Query/QueryExpression.vb +++ b/LINQ/LINQ/Interpreter/Query/QueryExpression.vb @@ -1,49 +1,50 @@ #Region "Microsoft.VisualBasic::c17b9f4ba6163467b2124e29397af322, LINQ\LINQ\Interpreter\Query\QueryExpression.vb" - ' Author: - ' - ' asuka (amethyst.asuka@gcmodeller.org) - ' xie (genetics@smrucc.org) - ' xieguigang (xie.guigang@live.com) - ' - ' Copyright (c) 2018 GPL3 Licensed - ' - ' - ' GNU GENERAL PUBLIC LICENSE (GPL3) - ' - ' - ' This program is free software: you can redistribute it and/or modify - ' it under the terms of the GNU General Public License as published by - ' the Free Software Foundation, either version 3 of the License, or - ' (at your option) any later version. - ' - ' This program is distributed in the hope that it will be useful, - ' but WITHOUT ANY WARRANTY; without even the implied warranty of - ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ' GNU General Public License for more details. - ' - ' You should have received a copy of the GNU General Public License - ' along with this program. If not, see . - - - - ' /********************************************************************************/ - - ' Summaries: - - ' Class QueryExpression - ' - ' Properties: IsURISource - ' - ' Constructor: (+1 Overloads) Sub New - ' Function: GetDataSet, GetSeqValue - ' - ' - ' /********************************************************************************/ +' Author: +' +' asuka (amethyst.asuka@gcmodeller.org) +' xie (genetics@smrucc.org) +' xieguigang (xie.guigang@live.com) +' +' Copyright (c) 2018 GPL3 Licensed +' +' +' GNU GENERAL PUBLIC LICENSE (GPL3) +' +' +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program. If not, see . + + + +' /********************************************************************************/ + +' Summaries: + +' Class QueryExpression +' +' Properties: IsURISource +' +' Constructor: (+1 Overloads) Sub New +' Function: GetDataSet, GetSeqValue +' +' +' /********************************************************************************/ #End Region Imports LINQ.Interpreter.Expressions +Imports LINQ.Runtime Namespace Interpreter.Query @@ -67,6 +68,12 @@ Namespace Interpreter.Query Me.executeQueue = execQueue.ToArray End Sub + Protected Sub LoadDrivers(context As ExecutableContext) + Dim globalEnv As GlobalEnvironment = context.env.GlobalEnvir + Dim registry As Registry = globalEnv.registry + + End Sub + Public Function AddAttachDrivers(drivers As IEnumerable(Of ImportDataDriver)) As QueryExpression attaches.AddRange(drivers) Return Me diff --git a/LINQ/LINQ/Program.vb b/LINQ/LINQ/Program.vb index 9d2e52c..c8c05de 100644 --- a/LINQ/LINQ/Program.vb +++ b/LINQ/LINQ/Program.vb @@ -66,7 +66,8 @@ Module Program Dim tokens As Token() = LINQ.Language.GetTokens(file.ReadAllText).ToArray Dim query As ProjectionExpression = tokens.PopulateQueryExpression Dim env As New GlobalEnvironment(New Registry) - Dim result As JavaScriptObject() = query.Exec(New ExecutableContext With {.env = env, .throwError = True}) + Dim context As New ExecutableContext With {.env = env, .throwError = True} + Dim result As JavaScriptObject() = query.Exec(context) Dim table As DataFrame = result.CreateTableDataSet Dim output As String = args <= "/output" diff --git a/LINQ/LINQ/Runtime/GlobalEnvironment.vb b/LINQ/LINQ/Runtime/GlobalEnvironment.vb index 9db269f..b84340f 100644 --- a/LINQ/LINQ/Runtime/GlobalEnvironment.vb +++ b/LINQ/LINQ/Runtime/GlobalEnvironment.vb @@ -48,7 +48,7 @@ Namespace Runtime Public Class GlobalEnvironment : Inherits Environment - Protected ReadOnly registry As Registry + Protected Friend ReadOnly registry As Registry Sub New(registry As Registry, ParamArray values As NamedValue(Of Object)()) Call MyBase.New(Nothing) @@ -65,8 +65,8 @@ Namespace Runtime Me.registry = registry End Sub - Public Function GetDriverByCode(code As String) As DataSourceDriver - Return registry.GetReader(code) + Public Function GetDriverByCode(code As String, arguments As String()) As DataSourceDriver + Return registry.GetReader(code, arguments) End Function End Class End Namespace diff --git a/LINQ/LINQ/Runtime/Registry.vb b/LINQ/LINQ/Runtime/Registry.vb index 2c7f7ca..e2eca2a 100644 --- a/LINQ/LINQ/Runtime/Registry.vb +++ b/LINQ/LINQ/Runtime/Registry.vb @@ -1,42 +1,42 @@ #Region "Microsoft.VisualBasic::0124b5f27111e2adaadc328227661fb0, LINQ\LINQ\Runtime\Registry.vb" - ' Author: - ' - ' asuka (amethyst.asuka@gcmodeller.org) - ' xie (genetics@smrucc.org) - ' xieguigang (xie.guigang@live.com) - ' - ' Copyright (c) 2018 GPL3 Licensed - ' - ' - ' GNU GENERAL PUBLIC LICENSE (GPL3) - ' - ' - ' This program is free software: you can redistribute it and/or modify - ' it under the terms of the GNU General Public License as published by - ' the Free Software Foundation, either version 3 of the License, or - ' (at your option) any later version. - ' - ' This program is distributed in the hope that it will be useful, - ' but WITHOUT ANY WARRANTY; without even the implied warranty of - ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ' GNU General Public License for more details. - ' - ' You should have received a copy of the GNU General Public License - ' along with this program. If not, see . +' Author: +' +' asuka (amethyst.asuka@gcmodeller.org) +' xie (genetics@smrucc.org) +' xieguigang (xie.guigang@live.com) +' +' Copyright (c) 2018 GPL3 Licensed +' +' +' GNU GENERAL PUBLIC LICENSE (GPL3) +' +' +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program. If not, see . - ' /********************************************************************************/ +' /********************************************************************************/ - ' Summaries: +' Summaries: - ' Class Registry - ' - ' Function: GetReader, GetTypeCodeName - ' - ' - ' /********************************************************************************/ +' Class Registry +' +' Function: GetReader, GetTypeCodeName +' +' +' /********************************************************************************/ #End Region @@ -46,6 +46,8 @@ Namespace Runtime Public Class Registry + ReadOnly drivers As New Dictionary(Of String, IDriverLoader) + Public Function GetTypeCodeName(type As Type) As String Select Case type Case GetType(Integer) : Return "i32" @@ -55,12 +57,17 @@ Namespace Runtime End Select End Function - Public Function GetReader(type As String) As DataSourceDriver + Public Function GetReader(type As String, arguments As String()) As DataSourceDriver If type = "row" Then Return New DataFrameDriver + ElseIf drivers.ContainsKey(type) Then + Return drivers(type)(arguments) Else - Throw New MissingPrimaryKeyException + Throw New MissingPrimaryKeyException(type) End If End Function End Class + + Public Delegate Function IDriverLoader(arguments As String()) As DataSourceDriver + End Namespace