@@ -12,38 +12,31 @@ namespace JsonApiDotNetCoreExampleTests.Helpers.Extensions
12
12
{
13
13
public static class IQueryableExtensions
14
14
{
15
- private static readonly TypeInfo QueryCompilerTypeInfo = typeof ( QueryCompiler ) . GetTypeInfo ( ) ;
16
-
17
- private static readonly FieldInfo QueryCompilerField = typeof ( EntityQueryProvider ) . GetTypeInfo ( ) . DeclaredFields . First ( x => x . Name == "_queryCompiler" ) ;
15
+ private static readonly FieldInfo QueryCompilerField = typeof ( EntityQueryProvider ) . GetTypeInfo ( ) . DeclaredFields . Single ( x => x . Name == "_queryCompiler" ) ;
18
16
19
- private static readonly PropertyInfo NodeTypeProviderField = QueryCompilerTypeInfo . DeclaredProperties . Single ( x => x . Name == "NodeTypeProvider" ) ;
17
+ private static readonly TypeInfo QueryCompilerTypeInfo = typeof ( QueryCompiler ) . GetTypeInfo ( ) ;
20
18
21
- private static readonly MethodInfo CreateQueryParserMethod = QueryCompilerTypeInfo . DeclaredMethods . First ( x => x . Name == "CreateQueryParser " ) ;
19
+ private static readonly FieldInfo QueryModelGeneratorField = QueryCompilerTypeInfo . DeclaredFields . Single ( x => x . Name == "_queryModelGenerator " ) ;
22
20
23
- private static readonly FieldInfo DataBaseField = QueryCompilerTypeInfo . DeclaredFields . Single ( x => x . Name == "_database" ) ;
21
+ private static readonly FieldInfo DatabaseField = QueryCompilerTypeInfo . DeclaredFields . Single ( x => x . Name == "_database" ) ;
24
22
25
- private static readonly PropertyInfo DatabaseDependenciesField
26
- = typeof ( Database ) . GetTypeInfo ( ) . DeclaredProperties . Single ( x => x . Name == "Dependencies" ) ;
23
+ private static readonly PropertyInfo DependenciesProperty = typeof ( Database ) . GetTypeInfo ( ) . DeclaredProperties . Single ( x => x . Name == "Dependencies" ) ;
27
24
28
- public static string ToSql < TEntity > ( this IQueryable < TEntity > query ) where TEntity : class
25
+ public static string ToSql < TEntity > ( this IQueryable < TEntity > queryable )
26
+ where TEntity : class
29
27
{
30
- if ( ! ( query is EntityQueryable < TEntity > ) && ! ( query is InternalDbSet < TEntity > ) )
31
- {
32
- throw new ArgumentException ( "Invalid query" ) ;
33
- }
34
-
35
- var queryCompiler = ( IQueryCompiler ) QueryCompilerField . GetValue ( query . Provider ) ;
36
- var nodeTypeProvider = ( INodeTypeProvider ) NodeTypeProviderField . GetValue ( queryCompiler ) ;
37
- var parser = ( IQueryParser ) CreateQueryParserMethod . Invoke ( queryCompiler , new object [ ] { nodeTypeProvider } ) ;
38
- var queryModel = parser . GetParsedQuery ( query . Expression ) ;
39
- var database = DataBaseField . GetValue ( queryCompiler ) ;
40
- var queryCompilationContextFactory = ( ( DatabaseDependencies ) DatabaseDependenciesField . GetValue ( database ) ) . QueryCompilationContextFactory ;
28
+ if ( ! ( queryable is EntityQueryable < TEntity > ) && ! ( queryable is InternalDbSet < TEntity > ) )
29
+ throw new ArgumentException ( ) ;
30
+
31
+ var queryCompiler = ( IQueryCompiler ) QueryCompilerField . GetValue ( queryable . Provider ) ;
32
+ var queryModelGenerator = ( IQueryModelGenerator ) QueryModelGeneratorField . GetValue ( queryCompiler ) ;
33
+ var queryModel = queryModelGenerator . ParseQuery ( queryable . Expression ) ;
34
+ var database = DatabaseField . GetValue ( queryCompiler ) ;
35
+ var queryCompilationContextFactory = ( ( DatabaseDependencies ) DependenciesProperty . GetValue ( database ) ) . QueryCompilationContextFactory ;
41
36
var queryCompilationContext = queryCompilationContextFactory . Create ( false ) ;
42
37
var modelVisitor = ( RelationalQueryModelVisitor ) queryCompilationContext . CreateQueryModelVisitor ( ) ;
43
38
modelVisitor . CreateQueryExecutor < TEntity > ( queryModel ) ;
44
- var sql = modelVisitor . Queries . First ( ) . ToString ( ) ;
45
-
46
- return sql ;
39
+ return modelVisitor . Queries . Join ( Environment . NewLine + Environment . NewLine ) ;
47
40
}
48
41
}
49
- }
42
+ }
0 commit comments