use crate::identifier::QualifiedName;
use crate::ir::catalog::Catalog;
use crate::ir::constraint::{Constraint, ConstraintKind};
use crate::plan::policy::PlannerPolicy;
use crate::plan::raw_step::{RawStep, StepKind, TransactionConstraint};
use crate::plan::rewrite::sql;
pub fn should_rewrite(
qname: &QualifiedName,
c: &Constraint,
target: &Catalog,
policy: &PlannerPolicy,
) -> bool {
policy.check_not_valid_then_validate()
&& matches!(c.kind, ConstraintKind::Check { .. })
&& target.table_exists(qname)
}
pub fn rewrite_steps(
qname: &QualifiedName,
c: &Constraint,
destructive: bool,
destructive_reason: Option<String>,
) -> [RawStep; 2] {
[
RawStep {
step_no: 0,
kind: StepKind::AddConstraintNotValid,
destructive,
destructive_reason: destructive_reason.clone(),
intent_id: None,
targets: vec![qname.clone()],
sql: sql::alter_table_add_constraint_not_valid(qname, c),
transactional: TransactionConstraint::InTransaction,
},
RawStep {
step_no: 0,
kind: StepKind::ValidateConstraint,
destructive,
destructive_reason,
intent_id: None,
targets: vec![qname.clone()],
sql: sql::alter_table_validate_constraint(qname, &c.qname.name),
transactional: TransactionConstraint::InTransaction,
},
]
}