@@ -5,6 +5,8 @@ pub(crate) use self::column_list::ColumnList;
5
5
pub ( crate ) use self :: insert_from_select:: InsertFromSelect ;
6
6
7
7
use std:: any:: * ;
8
+ #[ cfg( feature = "sqlite" ) ]
9
+ use std:: fmt:: { self , Debug , Display } ;
8
10
use std:: marker:: PhantomData ;
9
11
10
12
use super :: returning_clause:: * ;
@@ -227,6 +229,62 @@ where
227
229
}
228
230
}
229
231
232
+ #[ cfg( feature = "sqlite" ) ]
233
+ impl < ' a , T , U , Op > Display for DebugQuery < ' a , InsertStatement < T , BatchInsert < ' a , U , T > , Op > , Sqlite >
234
+ where
235
+ & ' a U : Insertable < T > ,
236
+ for < ' b > DebugQuery < ' b , InsertStatement < T , <& ' a U as Insertable < T > >:: Values , Op > , Sqlite > :
237
+ Display ,
238
+ T : Copy ,
239
+ Op : Copy ,
240
+ {
241
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
242
+ writeln ! ( f, "BEGIN;" ) ?;
243
+ for record in self . query . records . records {
244
+ let stmt = InsertStatement :: new (
245
+ self . query . target ,
246
+ record. values ( ) ,
247
+ self . query . operator ,
248
+ self . query . returning ,
249
+ ) ;
250
+
251
+ writeln ! ( f, "{}" , crate :: debug_query:: <Sqlite , _>( & stmt) ) ?;
252
+ }
253
+ writeln ! ( f, "COMMIT;" ) ?;
254
+ Ok ( ( ) )
255
+ }
256
+ }
257
+
258
+ #[ cfg( feature = "sqlite" ) ]
259
+ impl < ' a , T , U , Op > Debug for DebugQuery < ' a , InsertStatement < T , BatchInsert < ' a , U , T > , Op > , Sqlite >
260
+ where
261
+ & ' a U : Insertable < T > ,
262
+ for < ' b > DebugQuery < ' b , InsertStatement < T , <& ' a U as Insertable < T > >:: Values , Op > , Sqlite > :
263
+ Display ,
264
+ T : Copy ,
265
+ Op : Copy ,
266
+ {
267
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
268
+ let mut statements = Vec :: with_capacity ( self . query . records . records . len ( ) + 2 ) ;
269
+ statements. push ( "BEGIN" . into ( ) ) ;
270
+ for record in self . query . records . records {
271
+ let stmt = InsertStatement :: new (
272
+ self . query . target ,
273
+ record. values ( ) ,
274
+ self . query . operator ,
275
+ self . query . returning ,
276
+ ) ;
277
+ statements. push ( format ! ( "{}" , crate :: debug_query:: <Sqlite , _>( & stmt) ) ) ;
278
+ }
279
+ statements. push ( "COMMIT" . into ( ) ) ;
280
+
281
+ f. debug_struct ( "Query" )
282
+ . field ( "sql" , & statements)
283
+ . field ( "binds" , & [ ] as & [ i32 ; 0 ] )
284
+ . finish ( )
285
+ }
286
+ }
287
+
230
288
#[ cfg( feature = "sqlite" ) ]
231
289
impl < T , U , Op > ExecuteDsl < SqliteConnection >
232
290
for InsertStatement < T , OwnedBatchInsert < ValuesClause < U , T > , T > , Op >
@@ -249,6 +307,61 @@ where
249
307
}
250
308
}
251
309
310
+ #[ cfg( feature = "sqlite" ) ]
311
+ impl < ' a , T , U , Op > Display
312
+ for DebugQuery < ' a , InsertStatement < T , OwnedBatchInsert < ValuesClause < U , T > , T > , Op > , Sqlite >
313
+ where
314
+ for < ' b > DebugQuery < ' b , InsertStatement < T , & ' b ValuesClause < U , T > , Op > , Sqlite > : Display ,
315
+ T : Copy ,
316
+ Op : Copy ,
317
+ {
318
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
319
+ writeln ! ( f, "BEGIN;" ) ?;
320
+ for value in & self . query . records . values {
321
+ let stmt = InsertStatement :: new (
322
+ self . query . target ,
323
+ value,
324
+ self . query . operator ,
325
+ self . query . returning ,
326
+ ) ;
327
+
328
+ writeln ! ( f, "{}" , crate :: debug_query:: <Sqlite , _>( & stmt) ) ?;
329
+ }
330
+ writeln ! ( f, "COMMIT;" ) ?;
331
+ Ok ( ( ) )
332
+ }
333
+ }
334
+
335
+ #[ cfg( feature = "sqlite" ) ]
336
+ impl < ' a , T , U , Op > Debug
337
+ for DebugQuery < ' a , InsertStatement < T , OwnedBatchInsert < ValuesClause < U , T > , T > , Op > , Sqlite >
338
+ where
339
+ for < ' b > DebugQuery < ' b , InsertStatement < T , & ' b ValuesClause < U , T > , Op > , Sqlite > : Display ,
340
+ T : Copy ,
341
+ Op : Copy ,
342
+ {
343
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
344
+ let mut statements = Vec :: with_capacity ( self . query . records . values . len ( ) + 2 ) ;
345
+ statements. push ( "BEGIN" . into ( ) ) ;
346
+
347
+ for value in & self . query . records . values {
348
+ let stmt = InsertStatement :: new (
349
+ self . query . target ,
350
+ value,
351
+ self . query . operator ,
352
+ self . query . returning ,
353
+ ) ;
354
+ statements. push ( format ! ( "{}" , crate :: debug_query:: <Sqlite , _>( & stmt) ) ) ;
355
+ }
356
+ statements. push ( "COMMIT" . into ( ) ) ;
357
+
358
+ f. debug_struct ( "Query" )
359
+ . field ( "sql" , & statements)
360
+ . field ( "binds" , & [ ] as & [ i32 ; 0 ] )
361
+ . finish ( )
362
+ }
363
+ }
364
+
252
365
impl < T , U , Op , Ret > QueryId for InsertStatement < T , U , Op , Ret > {
253
366
type QueryId = ( ) ;
254
367
0 commit comments