Skip to main content

safe_migrate/
model.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4// ... (TableIdentity, IndexIdentity, AlterAction, MigrationOp, SpannedOp remain exactly the same) ...
5
6#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub struct TableIdentity {
8    pub schema: Option<String>,
9    pub name: String,
10}
11
12impl TableIdentity {
13    pub fn canonical_key(&self, default_schema: &str) -> String {
14        let schema_name = self.schema.as_deref().unwrap_or(default_schema);
15        format!("{}.{}", schema_name, self.name)
16    }
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
20pub struct IndexIdentity {
21    pub schema: Option<String>,
22    pub name: String,
23}
24
25impl IndexIdentity {
26    pub fn canonical_key(&self, default_schema: &str) -> String {
27        let schema_name = self.schema.as_deref().unwrap_or(default_schema);
28        format!("{}.{}", schema_name, self.name)
29    }
30}
31
32#[non_exhaustive]
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34pub enum AlterAction {
35    AddColumn,
36    DropColumn,
37    AlterColumnUnspecified,
38    Other,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
42pub enum MigrationOp {
43    CreateTable(TableIdentity),
44    DropTable(TableIdentity),
45    CreateIndex {
46        index_name: Option<String>,
47        table: TableIdentity,
48        concurrently: bool,
49    },
50    DropIndex {
51        indexes: Vec<IndexIdentity>,
52        concurrently: bool,
53    },
54    AlterTable {
55        table: TableIdentity,
56        actions: Vec<AlterAction>,
57    },
58    Ignored(String),
59    Unknown {
60        raw: String,
61        reason: String,
62    },
63}
64
65#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
66pub struct SpannedOp {
67    pub op: MigrationOp,
68    pub start: u32,
69    pub end: u32,
70}
71
72#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
73pub enum LockTier {
74    Tier1,
75    Tier2,
76    Tier3,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
80pub struct CacheEntry {
81    pub estimated_rows: u64,
82    pub relpages: Option<u64>,
83}
84
85#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86pub struct CacheData {
87    pub last_updated: u64,
88    pub tables: HashMap<String, CacheEntry>,
89    pub indexes: HashMap<String, String>,
90}
91
92// FIX: Added rule_name and recipe to the output
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94pub struct LintRecord {
95    pub file: String,
96    pub start: u32,
97    pub end: u32,
98    pub tier: LockTier,
99    pub op: MigrationOp,
100    pub message: String,
101    pub rule_name: String,
102    pub recipe: String,
103}