uqa_sql/prepared/
entry.rs1use std::sync::Arc;
10
11#[derive(Clone)]
12pub struct PreparedStatementPlan {
13 pub logical_plan: Arc<crate::plan::UnifiedPlan>,
14 pub plan: Option<crate::plan::UnifiedPlan>,
15 pub parameter_types: Vec<Option<crate::ast::ColumnType>>,
16 pub result_schema: Option<crate::RowSchema>,
17 pub source_sql: Option<Arc<str>>,
18 pub prepared_at_micros: i64,
19 pub from_sql: bool,
20 pub generic_plans: i64,
21 pub custom_plans: i64,
22 pub generic_cost: Option<f64>,
23 pub total_custom_cost: f64,
24}
25
26use crate::catalog::session::PreparedStatementMetadata;
27
28impl PreparedStatementPlan {
29 pub fn metadata(&self, name: &str) -> PreparedStatementMetadata {
30 PreparedStatementMetadata {
31 name: name.to_string(),
32 parameter_types: self.parameter_types.clone(),
33 result_types: self
34 .result_schema
35 .as_ref()
36 .map(|schema| schema.column_types().to_vec()),
37 source_sql: self.source_sql.clone(),
38 prepared_at_micros: self.prepared_at_micros,
39 from_sql: self.from_sql,
40 generic_plans: self.generic_plans,
41 custom_plans: self.custom_plans,
42 }
43 }
44}
45
46impl PreparedStatementPlan {
47 pub fn record_execution(&mut self, update: super::planning::PreparedPlanUpdate) {
48 self.plan = update.generic_plan;
49 self.generic_cost = update.generic_cost;
50 if let Some(cost) = update.custom_cost {
51 self.total_custom_cost += cost;
52 self.custom_plans = self.custom_plans.saturating_add(1);
53 } else {
54 self.generic_plans = self.generic_plans.saturating_add(1);
55 }
56 }
57}