44// Created by: Denis Krjuchkov
55// Created: 2012.01.27
66
7- using System ;
8- using System . Collections . Generic ;
9- using System . Linq ;
107using System . Linq . Expressions ;
118using System . Reflection ;
12- using System . Threading ;
13- using System . Threading . Tasks ;
14- using Xtensive . Caching ;
159using Xtensive . Core ;
1610using Xtensive . Orm . Linq ;
1711using Xtensive . Orm . Linq . Expressions . Visitors ;
18- using Xtensive . Orm . Providers ;
19- using Xtensive . Orm . Rse . Providers ;
2012using Xtensive . Reflection ;
2113
2214namespace Xtensive . Orm . Internals
2315{
16+ internal record struct QueryKey ( object Key , int MetadataToken , ModuleHandle ModuleHandle , string StorageNodeId ) ;
17+
2418 internal class CompiledQueryRunner
2519 {
2620 private readonly Domain domain ;
2721 private readonly Session session ;
2822 private readonly QueryEndpoint endpoint ;
29- private readonly object queryKey ;
23+ private readonly QueryKey queryKey ;
3024 private readonly object queryTarget ;
3125 private readonly ParameterContext outerContext ;
3226
@@ -217,7 +211,7 @@ private ParameterContext CreateParameterContext(ParameterizedQuery query)
217211 return parameterContext ;
218212 }
219213
220- public CompiledQueryRunner ( QueryEndpoint endpoint , object queryKey , object queryTarget , ParameterContext outerContext = null )
214+ private CompiledQueryRunner ( QueryEndpoint endpoint , ( object Key , int MetadataToken , ModuleHandle ModuleHandle ) keyParts , object queryTarget , ParameterContext outerContext )
221215 {
222216 session = endpoint . Provider . Session ;
223217 domain = session . Domain ;
@@ -227,9 +221,21 @@ public CompiledQueryRunner(QueryEndpoint endpoint, object queryKey, object query
227221 this . outerContext = outerContext ;
228222
229223 var domainConfig = domain . Configuration ;
230- this . queryKey = domainConfig . ShareStorageSchemaOverNodes && domainConfig . PreferTypeIdsAsQueryParameters
231- ? queryKey
232- : ( queryKey , session . StorageNodeId ) ;
224+ queryKey = new ( keyParts . Key , keyParts . MetadataToken , keyParts . ModuleHandle ,
225+ domainConfig . ShareStorageSchemaOverNodes && domainConfig . PreferTypeIdsAsQueryParameters ? null : session . StorageNodeId
226+ ) ;
227+ }
228+
229+ public CompiledQueryRunner ( QueryEndpoint endpoint , MethodInfo methodInfo , object queryTarget , ParameterContext outerContext = null )
230+ : this ( endpoint , ( methodInfo , methodInfo . MetadataToken , methodInfo . Module . ModuleHandle ) , queryTarget , outerContext )
231+ {
232+ }
233+
234+ public CompiledQueryRunner ( QueryEndpoint endpoint , object key , object queryTarget , ParameterContext outerContext = null )
235+ : this ( endpoint ,
236+ key is MethodInfo methodInfo ? ( methodInfo , methodInfo . MetadataToken , methodInfo . Module . ModuleHandle ) : ( key , 0 , default ) ,
237+ queryTarget , outerContext )
238+ {
233239 }
234240 }
235241}
0 commit comments