1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//! Catalog module for the Alopex SQL dialect.
//!
//! This module provides metadata management for tables and indexes.
//!
//! # Components
//!
//! - [`TableMetadata`]: Table schema information
//! - [`ColumnMetadata`]: Column schema information
//! - [`IndexMetadata`]: Index schema information
//! - [`Catalog`]: Trait for catalog implementations
//! - [`MemoryCatalog`]: In-memory catalog implementation
//!
//! # Example
//!
//! ```
//! use alopex_sql::catalog::{Catalog, MemoryCatalog, TableMetadata, ColumnMetadata, IndexMetadata};
//! use alopex_sql::planner::types::ResolvedType;
//! use alopex_sql::ast::ddl::IndexMethod;
//!
//! // Create an in-memory catalog
//! let mut catalog = MemoryCatalog::new();
//!
//! // Create a table
//! let columns = vec![
//! ColumnMetadata::new("id", ResolvedType::Integer).with_primary_key(true),
//! ColumnMetadata::new("name", ResolvedType::Text).with_not_null(true),
//! ];
//! let table = TableMetadata::new("users", columns);
//! catalog.create_table(table).unwrap();
//!
//! // Check table existence
//! assert!(catalog.table_exists("users"));
//! assert!(catalog.get_table("users").is_some());
//!
//! // Create an index (index_id is assigned by catalog in production)
//! let index = IndexMetadata::new(1, "idx_users_name", "users", vec!["name".into()])
//! .with_method(IndexMethod::BTree);
//! catalog.create_index(index).unwrap();
//!
//! // Query indexes
//! assert!(catalog.index_exists("idx_users_name"));
//! assert_eq!(catalog.get_indexes_for_table("users").len(), 1);
//! ```
pub use IndexMetadata;
pub use MemoryCatalog;
pub use TxnCatalogView;
pub use ;
pub use ;
use cratePlannerError;
/// Trait for catalog implementations.
///
/// A catalog manages metadata for tables and indexes. This trait abstracts
/// the storage mechanism, allowing both in-memory and persistent implementations.
///
/// # Design Notes
///
/// - Read methods take `&self` and return references or copies
/// - Write methods take `&mut self` and return `Result<(), PlannerError>`
/// - The `Planner` only uses read methods; `Executor` performs writes
/// - ID generation is done via `next_table_id()` / `next_index_id()` at execute time
///
/// # Error Handling
///
/// - `create_table`: Returns `TableAlreadyExists` if table exists
/// - `drop_table`: Returns `TableNotFound` if table doesn't exist
/// - `create_index`: Returns `IndexAlreadyExists` if index exists
/// - `drop_index`: Returns `IndexNotFound` if index doesn't exist