@@ -6,6 +6,37 @@ public class Program
66{
77 private static readonly HashSet < string > _databases = [ "mysql" , "postgresql" , "sqlite" ] ;
88 private static readonly HashSet < string > _types = [ "reads" , "writes" ] ;
9+ private static readonly ILoggerFactory _loggerFactory = LoggerFactory . Create ( builder =>
10+ builder
11+ . AddConsole ( )
12+ . SetMinimumLevel ( LogLevel . Information ) ) ;
13+ private static readonly MysqlRunner _mysqlRunner = new (
14+ Config . GetMysqlConnectionString ( ) ,
15+ _loggerFactory . CreateLogger < MysqlRunner > ( ) ) ;
16+ private static readonly PostgresqlRunner _postgresqlRunner = new (
17+ Config . GetPostgresConnectionString ( ) ,
18+ _loggerFactory . CreateLogger < PostgresqlRunner > ( ) ) ;
19+ private static readonly SqliteRunner _sqliteRunner = new (
20+ Config . GetSqliteConnectionString ( ) ,
21+ _loggerFactory . CreateLogger < SqliteRunner > ( ) ) ;
22+ private static readonly Dictionary < string , Dictionary < string , Func < Task > > > _benchmarkConfigs = new ( )
23+ {
24+ { "mysql" , new ( )
25+ {
26+ { "reads" , _mysqlRunner . RunReadsAsync } ,
27+ { "writes" , _mysqlRunner . RunWritesAsync }
28+ } } ,
29+ { "postgresql" , new ( )
30+ {
31+ { "reads" , _postgresqlRunner . RunReadsAsync } ,
32+ { "writes" , _postgresqlRunner . RunWritesAsync }
33+ } } ,
34+ { "sqlite" , new ( )
35+ {
36+ { "reads" , _sqliteRunner . RunReadsAsync } ,
37+ { "writes" , _sqliteRunner . RunWritesAsync }
38+ } }
39+ } ;
940
1041 public static async Task Main ( string [ ] args )
1142 {
@@ -17,7 +48,9 @@ public static async Task Main(string[] args)
1748 var typeOption = GetTypeOption ( ) ;
1849 rootCommand . AddOption ( typeOption ) ;
1950
20- rootCommand . SetHandler ( CommandHandler , databaseOption , typeOption ) ;
51+ rootCommand . SetHandler (
52+ async ( database , type ) => await _benchmarkConfigs [ database ] [ type ] ( ) ,
53+ databaseOption , typeOption ) ;
2154 await rootCommand . InvokeAsync ( args ) ;
2255 }
2356
@@ -54,45 +87,4 @@ private static Option<string> GetTypeOption()
5487 } ) ;
5588 return option ;
5689 }
57- private static async Task CommandHandler ( string database , string type )
58- {
59- using var loggerFactory = LoggerFactory . Create ( builder =>
60- builder
61- . AddConsole ( )
62- . SetMinimumLevel ( LogLevel . Information ) ) ;
63-
64- var mysqlRunner = new MysqlRunner (
65- Config . GetMysqlConnectionString ( ) ,
66- loggerFactory . CreateLogger < MysqlRunner > ( ) ) ;
67- var postgresqlRunner = new PostgresqlRunner (
68- Config . GetPostgresConnectionString ( ) ,
69- loggerFactory . CreateLogger < PostgresqlRunner > ( ) ) ;
70- var sqliteRunner = new SqliteRunner (
71- Config . GetSqliteConnectionString ( ) ,
72- loggerFactory . CreateLogger < SqliteRunner > ( ) ) ;
73-
74- switch ( database , type )
75- {
76- case ( "mysql" , "read" ) :
77- await mysqlRunner . RunReadsAsync ( ) ;
78- break ;
79- case ( "mysql" , "write" ) :
80- await mysqlRunner . RunWritesAsync ( ) ;
81- break ;
82- case ( "postgresql" , "read" ) :
83- await postgresqlRunner . RunReadsAsync ( ) ;
84- break ;
85- case ( "postgresql" , "write" ) :
86- await postgresqlRunner . RunWritesAsync ( ) ;
87- break ;
88- case ( "sqlite" , "read" ) :
89- await sqliteRunner . RunReadsAsync ( ) ;
90- break ;
91- case ( "sqlite" , "write" ) :
92- await sqliteRunner . RunWritesAsync ( ) ;
93- break ;
94- default :
95- throw new ArgumentException ( $ "Invalid database - { database } , type - { type } ") ;
96- }
97- }
9890}
0 commit comments