Skip to content

Commit 1d82d6f

Browse files

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

sqlx-postgres/src/connection/describe.rs

+18-10
Original file line numberDiff line numberDiff line change
@@ -451,15 +451,11 @@ WHERE rngtypid = $1
451451

452452
let mut nullables = Vec::new();
453453

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+
}
463459
}
464460

465461
Ok(nullables)
@@ -492,15 +488,27 @@ fn visit_plan(plan: &Plan, outputs: &[String], nullables: &mut Vec<Option<bool>>
492488
}
493489

494490
#[derive(serde::Deserialize)]
491+
#[serde(untagged)]
495492
enum Explain {
496493
/// {"Plan": ...} -- returned for most statements
497-
Plan(Plan),
494+
QueryPlan(QueryPlan),
498495
/// The string "Utility Statement" -- returned for
499496
/// a CALL statement
500497
#[serde(rename = "Utility Statement")]
501498
UtilityStatement,
502499
}
503500

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+
504512
#[derive(serde::Deserialize)]
505513
struct Plan {
506514
#[serde(rename = "Join Type")]

tests/docker-compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ services:
183183
volumes:
184184
- "./postgres/setup.sql:/docker-entrypoint-initdb.d/setup.sql"
185185
command: >
186-
-c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key
186+
-c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key -c shared_preload_libraries=pg_stat_statements
187187
188188
postgres_15_client_ssl:
189189
build:

0 commit comments

Comments
 (0)