@@ -114,7 +114,7 @@ INSERT INTO testdrive.example (
114
114
timestamp_notz,
115
115
ip,
116
116
""array"",
117
- -- ""object"",
117
+ ""object"",
118
118
geopoint,
119
119
-- geoshape,
120
120
float_vector
@@ -133,7 +133,7 @@ INSERT INTO testdrive.example (
133
133
@timestamp_notz,
134
134
@ip,
135
135
@array,
136
- -- @object,
136
+ @object,
137
137
@geopoint,
138
138
-- @egoshape,
139
139
@float_vector
@@ -157,6 +157,7 @@ INSERT INTO testdrive.example (
157
157
cmd . Parameters . AddWithValue ( "array" , new List < string > { "foo" , "bar" } ) ;
158
158
// FIXME: System.NotSupportedException: Cannot resolve 'hstore' to a fully qualified datatype name. The datatype was not found in the current database info.
159
159
// cmd.Parameters.AddWithValue("object", new Dictionary<string, string>(){{"foo", "bar"}});
160
+ cmd . Parameters . AddWithValue ( "object" , @"{""foo"": ""bar""}" ) ;
160
161
cmd . Parameters . AddWithValue ( "geopoint" , new List < double > { 85.43 , 66.23 } ) ;
161
162
// FIXME: Npgsql.PostgresException : XX000: line 38:9: no viable alternative at input 'VALUES
162
163
// cmd.Parameters.AddWithValue("geoshape", "POLYGON ((5 5, 10 5, 10 10, 5 10, 5 5))");
@@ -183,6 +184,66 @@ INSERT INTO testdrive.example (
183
184
184
185
}
185
186
187
+ public static async Task < DataTable > ContainerTypesExample ( NpgsqlConnection conn )
188
+ {
189
+ Console . WriteLine ( "Running AllTypesExample" ) ;
190
+
191
+ // Submit DDL, create database schema.
192
+ await using ( var cmd = new NpgsqlCommand ( "DROP TABLE IF EXISTS testdrive.container" , conn ) )
193
+ {
194
+ cmd . ExecuteNonQuery ( ) ;
195
+ }
196
+
197
+ await using ( var cmd = new NpgsqlCommand ( @"
198
+ CREATE TABLE testdrive.container (
199
+ -- Container types
200
+ ""array"" ARRAY(STRING),
201
+ ""object"" OBJECT(DYNAMIC)
202
+ );
203
+ " , conn ) )
204
+ {
205
+ cmd . ExecuteNonQuery ( ) ;
206
+ }
207
+
208
+ // Insert single data point.
209
+ await using ( var cmd = new NpgsqlCommand ( @"
210
+ INSERT INTO testdrive.container (
211
+ ""array"",
212
+ ""object""
213
+ ) VALUES (
214
+ @array,
215
+ @object
216
+ );
217
+ " , conn ) )
218
+ {
219
+ Console . WriteLine ( cmd ) ;
220
+ // FIXME: While doing conversations with ARRAY types works natively,
221
+ // it doesn't work for OBJECT types.
222
+ // Yet, they can be submitted as STRING in JSON format.
223
+ cmd . Parameters . AddWithValue ( "array" , new List < string > { "foo" , "bar" } ) ;
224
+ cmd . Parameters . AddWithValue ( "object" , @"{""foo"": ""bar""}" ) ;
225
+ cmd . ExecuteNonQuery ( ) ;
226
+ }
227
+
228
+ // Flush data.
229
+ await using ( var cmd = new NpgsqlCommand ( "REFRESH TABLE testdrive.container" , conn ) )
230
+ {
231
+ cmd . ExecuteNonQuery ( ) ;
232
+ }
233
+
234
+ // Query back data.
235
+ await using ( var cmd = new NpgsqlCommand ( "SELECT * FROM testdrive.container" , conn ) )
236
+ await using ( var reader = cmd . ExecuteReader ( ) )
237
+ {
238
+ var dataTable = new DataTable ( ) ;
239
+ dataTable . Load ( reader ) ;
240
+ var payload = JsonConvert . SerializeObject ( dataTable ) ;
241
+ Console . WriteLine ( payload ) ;
242
+ return ( DataTable ) dataTable ;
243
+ }
244
+
245
+ }
246
+
186
247
}
187
248
188
249
}
0 commit comments