@@ -18,51 +18,47 @@ await Parser.Default.ParseArguments<Options>(args)
18
18
var connString = $ "Host={ options . Host } ;Port={ options . Port } ;SSL Mode={ options . SslMode } ;" +
19
19
$ "Username={ options . Username } ;Password={ options . Password } ;Database={ options . Database } ";
20
20
Console . WriteLine ( $ "Connecting to { connString } \n ") ;
21
- using ( var conn = new NpgsqlConnection ( connString ) )
22
- {
23
- conn . Open ( ) ;
24
- var program = new DatabaseWorkloads ( ) ;
25
- await program . SystemQueryExample ( conn ) ;
26
- await program . BasicConversationExample ( conn ) ;
27
- await program . AsyncUnnestExample ( conn ) ;
28
- conn . Close ( ) ;
29
- }
30
-
21
+ await using var conn = new NpgsqlConnection ( connString ) ;
22
+ conn . Open ( ) ;
23
+ await DatabaseWorkloads . SystemQueryExample ( conn ) ;
24
+ await DatabaseWorkloads . BasicConversationExample ( conn ) ;
25
+ await DatabaseWorkloads . UnnestExample ( conn ) ;
26
+ conn . Close ( ) ;
31
27
} ) ;
32
28
33
29
}
34
30
35
31
public class Options
36
32
{
37
33
[ Option ( 'h' , "host" , Required = false , HelpText = "Host name to connect to" , Default = "localhost" ) ]
38
- public string Host { get ; set ; }
34
+ public string ? Host { get ; set ; }
39
35
40
36
[ Option ( 'p' , "port" , Required = false , HelpText = "Port number to connect to" , Default = 5432 ) ]
41
37
public int Port { get ; set ; }
42
38
43
39
// Controls whether SSL is used, depending on server support. Can be Require, Disable, or Prefer.
44
40
// https://www.npgsql.org/doc/connection-string-parameters.html#security-and-encryption
45
41
[ Option ( 's' , "ssl-mode" , Required = false , HelpText = "Which SSL mode to use" , Default = "Disable" ) ]
46
- public string SslMode { get ; set ; }
42
+ public string ? SslMode { get ; set ; }
47
43
48
44
[ Option ( 'u' , "username" , Required = false , HelpText = "Username to authenticate with" , Default = "crate" ) ]
49
- public string Username { get ; set ; }
45
+ public string ? Username { get ; set ; }
50
46
[ Option ( 'w' , "password" , Required = false , HelpText = "Password to authenticate with" , Default = "" ) ]
51
- public string Password { get ; set ; }
47
+ public string ? Password { get ; set ; }
52
48
[ Option ( 'd' , "database" , Required = false , HelpText = "Database to use" , Default = "testdrive" ) ]
53
- public string Database { get ; set ; }
49
+ public string ? Database { get ; set ; }
54
50
}
55
51
56
52
}
57
53
58
54
public class DatabaseWorkloads
59
55
{
60
- public async Task < List < string > > SystemQueryExample ( NpgsqlConnection conn )
56
+ public static async Task < List < string > > SystemQueryExample ( NpgsqlConnection conn )
61
57
{
62
58
Console . WriteLine ( "Running SystemQueryExample" ) ;
63
59
var mountains = new List < string > ( ) ;
64
- using ( var cmd = new NpgsqlCommand ( "SELECT mountain FROM sys.summits ORDER BY 1 LIMIT 25" , conn ) )
65
- using ( var reader = cmd . ExecuteReader ( ) )
60
+ await using ( var cmd = new NpgsqlCommand ( "SELECT mountain FROM sys.summits ORDER BY 1 LIMIT 25" , conn ) )
61
+ await using ( var reader = cmd . ExecuteReader ( ) )
66
62
{
67
63
while ( await reader . ReadAsync ( ) )
68
64
{
@@ -76,31 +72,32 @@ public async Task<List<string>> SystemQueryExample(NpgsqlConnection conn)
76
72
return mountains ;
77
73
}
78
74
79
- public async Task < List < int > > BasicConversationExample ( NpgsqlConnection conn )
75
+ public static async Task < List < int > > BasicConversationExample ( NpgsqlConnection conn )
80
76
{
81
77
Console . WriteLine ( "Running BasicConversationExample" ) ;
82
78
83
79
// Submit DDL, create database schema.
84
- using ( var cmd = new NpgsqlCommand ( "DROP TABLE IF EXISTS testdrive.basic" , conn ) )
80
+ await using ( var cmd = new NpgsqlCommand ( "DROP TABLE IF EXISTS testdrive.basic" , conn ) )
85
81
{
86
82
cmd . ExecuteNonQuery ( ) ;
87
83
}
88
- using ( var cmd = new NpgsqlCommand ( "CREATE TABLE testdrive.basic (x int)" , conn ) )
84
+
85
+ await using ( var cmd = new NpgsqlCommand ( "CREATE TABLE testdrive.basic (x int)" , conn ) )
89
86
{
90
87
cmd . ExecuteNonQuery ( ) ;
91
88
}
92
89
93
90
// Insert single data point.
94
- using ( var cmd = new NpgsqlCommand ( "INSERT INTO testdrive.basic (x) VALUES (@x)" , conn ) )
91
+ await using ( var cmd = new NpgsqlCommand ( "INSERT INTO testdrive.basic (x) VALUES (@x)" , conn ) )
95
92
{
96
93
cmd . Parameters . AddWithValue ( "x" , - 999 ) ;
97
94
cmd . ExecuteNonQuery ( ) ;
98
95
}
99
96
100
97
// Insert multiple data points.
101
- using ( var cmd = new NpgsqlCommand ( "INSERT INTO testdrive.basic (x) VALUES (@x)" , conn ) )
98
+ await using ( var cmd = new NpgsqlCommand ( "INSERT INTO testdrive.basic (x) VALUES (@x)" , conn ) )
102
99
{
103
- using ( var transaction = conn . BeginTransaction ( ) )
100
+ await using ( var transaction = conn . BeginTransaction ( ) )
104
101
{
105
102
cmd . Transaction = transaction ;
106
103
cmd . Parameters . Add ( "@x" , NpgsqlDbType . Integer ) ;
@@ -116,15 +113,15 @@ public async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
116
113
}
117
114
118
115
// Flush data.
119
- using ( var cmd = new NpgsqlCommand ( "REFRESH TABLE testdrive.basic" , conn ) )
116
+ await using ( var cmd = new NpgsqlCommand ( "REFRESH TABLE testdrive.basic" , conn ) )
120
117
{
121
118
cmd . ExecuteNonQuery ( ) ;
122
119
}
123
120
124
121
// Query back data.
125
122
var data = new List < int > ( ) ;
126
- using ( var cmd = new NpgsqlCommand ( "SELECT x FROM testdrive.basic ORDER BY 1 ASC LIMIT 10" , conn ) )
127
- using ( var reader = cmd . ExecuteReader ( ) )
123
+ await using ( var cmd = new NpgsqlCommand ( "SELECT x FROM testdrive.basic ORDER BY 1 ASC LIMIT 10" , conn ) )
124
+ await using ( var reader = cmd . ExecuteReader ( ) )
128
125
{
129
126
while ( await reader . ReadAsync ( ) )
130
127
{
@@ -139,20 +136,20 @@ public async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
139
136
return data ;
140
137
}
141
138
142
- public async Task < int > AsyncUnnestExample ( NpgsqlConnection conn )
139
+ public static async Task < int > UnnestExample ( NpgsqlConnection conn )
143
140
{
144
141
Console . WriteLine ( "Running AsyncUnnestExample" ) ;
145
142
146
143
// Submit DDL, create database schema.
147
- using ( var cmd = new NpgsqlCommand ( "DROP TABLE IF EXISTS testdrive.unnest" , conn ) )
144
+ await using ( var cmd = new NpgsqlCommand ( "DROP TABLE IF EXISTS testdrive.unnest" , conn ) )
148
145
{
149
146
await cmd . ExecuteNonQueryAsync ( ) ;
150
147
}
151
148
152
- using ( var cmd2 = new NpgsqlCommand (
153
- connection : conn ,
154
- cmdText : "CREATE TABLE IF NOT EXISTS testdrive.unnest (id int, name text)"
155
- ) )
149
+ await using ( var cmd2 = new NpgsqlCommand (
150
+ connection : conn ,
151
+ cmdText : "CREATE TABLE IF NOT EXISTS testdrive.unnest (id int, name text)"
152
+ ) )
156
153
{
157
154
await cmd2 . ExecuteNonQueryAsync ( ) ;
158
155
}
@@ -170,16 +167,16 @@ public async Task<int> AsyncUnnestExample(NpgsqlConnection conn)
170
167
await cmd3 . ExecuteNonQueryAsync ( ) ;
171
168
172
169
// Flush data.
173
- using ( var cmd = new NpgsqlCommand ( "REFRESH TABLE testdrive.unnest" , conn ) )
170
+ await using ( var cmd = new NpgsqlCommand ( "REFRESH TABLE testdrive.unnest" , conn ) )
174
171
{
175
172
cmd . ExecuteNonQuery ( ) ;
176
173
}
177
174
178
175
// Query back data.
179
176
var resultCount = - 1 ;
180
- using ( var cmd = new NpgsqlCommand ( "SELECT COUNT(*) FROM testdrive.unnest" , conn ) )
177
+ await using ( var cmd = new NpgsqlCommand ( "SELECT COUNT(*) FROM testdrive.unnest" , conn ) )
181
178
{
182
- using ( var reader = cmd . ExecuteReader ( ) )
179
+ await using ( var reader = cmd . ExecuteReader ( ) )
183
180
{
184
181
await reader . ReadAsync ( ) ;
185
182
resultCount = reader . GetInt32 ( 0 ) ;
0 commit comments