use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryRequest {
pub sql: String,
pub page: Option<usize>,
pub per_page: Option<usize>,
pub ordering: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryResponse {
pub columns: Vec<String>,
pub rows: Vec<Vec<Option<String>>>,
pub total_rows: Option<i64>,
pub page: usize,
pub per_page: usize,
pub total_pages: usize,
pub error: Option<String>,
pub rows_affected: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TableStructure {
pub name: String,
pub columns: Vec<ColumnDetail>,
pub indexes: Vec<IndexDetail>,
pub foreign_keys: Vec<ForeignKeyDetail>,
pub triggers: Vec<TriggerDetail>,
pub create_sql: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ColumnDetail {
pub name: String,
pub data_type: String,
pub nullable: bool,
pub default_value: Option<String>,
pub is_primary_key: bool,
pub is_auto_increment: bool,
pub max_length: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexDetail {
pub name: String,
pub columns: Vec<String>,
pub unique: bool,
pub index_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForeignKeyDetail {
pub name: String,
pub column: String,
pub referenced_table: String,
pub referenced_column: String,
pub on_delete: String,
pub on_update: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TriggerDetail {
pub name: String,
pub event: String,
pub timing: String,
pub table_name: String,
pub definition: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateColumnRequest {
pub name: String,
pub data_type: String,
pub nullable: bool,
pub default_value: Option<String>,
pub primary_key: bool,
pub auto_increment: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatabaseStats {
pub database_name: String,
pub database_type: String,
pub file_size: Option<u64>,
pub table_count: usize,
pub index_count: usize,
pub trigger_count: usize,
pub view_count: usize,
pub created: Option<chrono::DateTime<chrono::Utc>>,
pub modified: Option<chrono::DateTime<chrono::Utc>>,
pub readonly: bool,
}