Imports Microsoft.VisualBasic.CommandLine.Reflection
Imports Microsoft.VisualBasic.ComputingServices.TaskHost
Imports Microsoft.VisualBasic.Net
Imports Microsoft.VisualBasic.SecurityString.MD5Hash
Imports Microsoft.VisualBasic.Serialization
Imports Microsoft.VisualBasic.Serialization.JSON
Imports SMRUCC.WebCloud.HTTPInternal.AppEngine
Imports SMRUCC.WebCloud.HTTPInternal.AppEngine.APIMethods
Imports SMRUCC.WebCloud.HTTPInternal.Platform
Namespace Linq
'''
''' 对外部提供Linq查询服务的WebApp
'''
Public Class LinqAPI : Inherits LinqPool
Public ReadOnly Property Repository As Repository
'''
''' {hashCode.tolower, linq_uid}
'''
ReadOnly __uidMaps As New Dictionary(Of String, String)
Sub New(repo As Repository)
Me.Repository = repo
End Sub
'''
'''
'''
''' 数据源的引用位置
''' 查询参数
'''
Public Overloads Function OpenQuery(url As String, args As String) As LinqEntry
Dim source As IEnumerable = Repository.GetRepository(url, args) ' expr为空的话,则没有where测试,则返回所有数据
Dim type As Type = Repository.GetType(url) ' 得到元素的类型信息
Dim linq As IPEndPoint = OpenQuery(source, type)
Dim result As New LinqEntry(type) With {
.Linq = linq,
.uid = (linq.ToString & Now.ToString).GetMd5Hash.ToLower
}
Call __uidMaps.Add(result.uid, result.Linq.ToString)
Return result
End Function
'''
''' Linq数据源的MD5哈希值
'''
Const uid As String = "uid"
Const n As String = "n"
'''
'''
'''
''' uid,n
'''
Public Function MoveNext(args As Dictionary(Of String, String)) As String
Dim uid As String = args(LinqAPI.uid)
Dim n As Integer = Scripting.CastInteger(args(LinqAPI.n))
Dim linq As LinqProvider = GetLinq(__uidMaps(uid))
Dim source As Object = linq.Moves(n)
Dim json As String = JsonContract.GetObjectJson(source, linq.BaseType)
Return json
End Function
'''
''' 释放掉一个Linq查询的资源
'''
'''
'''
Public Overloads Function Free(args As Dictionary(Of String, String)) As String
Dim uid As String = args(LinqAPI.uid)
Call MyBase.Free(__uidMaps(uid))
Call __uidMaps.Remove(uid)
Return True
End Function
End Class
End Namespace