@@ -451,15 +451,11 @@ WHERE rngtypid = $1
451
451
452
452
let mut nullables = Vec :: new ( ) ;
453
453
454
- if let Explain :: Plan (
455
- plan @ Plan {
456
- output : Some ( outputs) ,
457
- ..
458
- } ,
459
- ) = & explain
460
- {
461
- nullables. resize ( outputs. len ( ) , None ) ;
462
- visit_plan ( & plan, outputs, & mut nullables) ;
454
+ if let Explain :: QueryPlan ( query_plan @ QueryPlan { plan, .. } ) = & explain {
455
+ if let Some ( outputs) = & query_plan. plan . output {
456
+ nullables. resize ( outputs. len ( ) , None ) ;
457
+ visit_plan ( & plan, outputs, & mut nullables) ;
458
+ }
463
459
}
464
460
465
461
Ok ( nullables)
@@ -492,15 +488,27 @@ fn visit_plan(plan: &Plan, outputs: &[String], nullables: &mut Vec<Option<bool>>
492
488
}
493
489
494
490
#[ derive( serde:: Deserialize ) ]
491
+ #[ serde( untagged) ]
495
492
enum Explain {
496
493
/// {"Plan": ...} -- returned for most statements
497
- Plan ( Plan ) ,
494
+ QueryPlan ( QueryPlan ) ,
498
495
/// The string "Utility Statement" -- returned for
499
496
/// a CALL statement
500
497
#[ serde( rename = "Utility Statement" ) ]
501
498
UtilityStatement ,
502
499
}
503
500
501
+ #[ derive( serde:: Deserialize ) ]
502
+ struct QueryPlan {
503
+ #[ serde( rename = "Plan" ) ]
504
+ plan : Plan ,
505
+ /// present when either pg_stat_statements is loaded and/or compute_query_id is enabled
506
+ /// https://www.postgresql.org/docs/current/pgstatstatements.html
507
+ /// https://www.postgresql.org/docs/current/runtime-config-statistics.html#GUC-COMPUTE-QUERY-ID
508
+ #[ serde( rename = "Query Identifier" , skip) ]
509
+ _query_identifier : Option < u64 > ,
510
+ }
511
+
504
512
#[ derive( serde:: Deserialize ) ]
505
513
struct Plan {
506
514
#[ serde( rename = "Join Type" ) ]
0 commit comments