1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
4+ using SqlKata . Compilers ;
5+
6+ namespace SqlKata . Tests . Infrastructure
7+ {
8+ public class TestCompilersContainer
9+ {
10+ protected readonly IDictionary < string , Compiler > Compilers = new Dictionary < string , Compiler >
11+ {
12+ [ EngineCodes . Firebird ] = new FirebirdCompiler ( ) ,
13+ [ EngineCodes . MySql ] = new MySqlCompiler ( ) ,
14+ [ EngineCodes . Oracle ] = new OracleCompiler ( ) ,
15+ [ EngineCodes . PostgreSql ] = new PostgresCompiler ( ) ,
16+ [ EngineCodes . Sqlite ] = new SqliteCompiler ( ) ,
17+ [ EngineCodes . SqlServer ] = new SqlServerCompiler ( )
18+ } ;
19+
20+ /// <summary>
21+ /// Returns the compiler instance for the given <param name="engineCode"></param>
22+ /// </summary>
23+ /// <param name="engineCode"></param>
24+ /// <returns></returns>
25+ public Compiler Get ( string engineCode )
26+ {
27+ if ( ! Compilers . ContainsKey ( engineCode ) )
28+ {
29+ throw new InvalidOperationException ( $ "Engine code '{ engineCode } ' is not valid") ;
30+ }
31+
32+ return Compilers [ engineCode ] ;
33+ }
34+
35+ /// <summary>
36+ /// Convenience method <seealso cref="Get"/>
37+ /// </summary>
38+ /// <remarks>Does not validate generic type against engine code before cast</remarks>
39+ /// <typeparam name="TCompiler"></typeparam>
40+ /// <param name="engineCode"></param>
41+ /// <returns></returns>
42+ public TCompiler Get < TCompiler > ( string engineCode ) where TCompiler : Compiler
43+ {
44+ return ( TCompiler ) Get ( engineCode ) ;
45+ }
46+
47+ /// <summary>
48+ /// Compiles the query for the given <param name="engineCode"></param>
49+ /// </summary>
50+ /// <param name="engineCode"></param>
51+ /// <param name="query"></param>
52+ /// <returns></returns>
53+ public SqlResult CompileFor ( string engineCode , Query query )
54+ {
55+ var compiler = Get ( engineCode ) ;
56+ return compiler . Compile ( query ) ;
57+ }
58+
59+ /// <summary>
60+ /// Compiles the query with all enabled compilers.
61+ /// </summary>
62+ /// <param name="query"></param>
63+ /// <returns></returns>
64+ public TestSqlResultContainer Compile ( Query query )
65+ {
66+ var resultKeyValues = Compilers
67+ . ToDictionary ( k => k . Key , v => v . Value . Compile ( query . Clone ( ) ) ) ;
68+ return new TestSqlResultContainer ( resultKeyValues ) ;
69+ }
70+ }
71+ }
0 commit comments