Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
220 changes: 205 additions & 15 deletions frontend/tauri/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,33 @@ pub struct DiffRequestDto {
pub indexes: Vec<IndexDefinitionDto>,
#[serde(default)]
pub deleted_indexes: Vec<IndexDefinitionDto>,
#[serde(default)]
pub foreign_keys: Vec<ForeignKeyDefinitionDto>,
#[serde(default)]
pub deleted_foreign_keys: Vec<ForeignKeyDefinitionDto>,
#[serde(default)]
pub check_constraints: Vec<CheckConstraintDefinitionDto>,
#[serde(default)]
pub deleted_checks: Vec<CheckConstraintDefinitionDto>,
#[serde(default)]
pub views: Vec<ViewDefinitionDto>,
#[serde(default)]
pub deleted_views: Vec<ViewDefinitionDto>,
#[serde(default)]
pub triggers: Vec<TriggerDefinitionDto>,
#[serde(default)]
pub deleted_triggers: Vec<TriggerDefinitionDto>,
#[serde(default)]
pub routines: Vec<RoutineDefinitionDto>,
#[serde(default)]
pub deleted_routines: Vec<RoutineDefinitionDto>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ColumnDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
Expand All @@ -103,12 +125,16 @@ pub struct ColumnDefinitionDto {
#[serde(default)]
pub is_auto_increment: bool,
#[serde(default)]
pub is_identity: bool,
#[serde(default)]
pub comment: String,
pub length: Option<i64>,
pub precision: Option<i64>,
pub scale: Option<i64>,
#[serde(default = "default_original_index")]
pub original_index: i32,
#[serde(rename = "_original")]
pub original: Option<Box<ColumnDefinitionDto>>,
}

fn default_true() -> bool { true }
Expand All @@ -117,12 +143,99 @@ fn default_original_index() -> i32 { -1 }
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct IndexDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub columns: Vec<String>,
#[serde(default)]
pub is_unique: bool,
#[serde(rename = "_original")]
pub original: Option<Box<IndexDefinitionDto>>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ForeignKeyDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub columns: Vec<String>,
#[serde(default)]
pub referenced_table: String,
#[serde(default)]
pub referenced_columns: Vec<String>,
#[serde(default)]
pub on_delete: String,
#[serde(default)]
pub on_update: String,
#[serde(rename = "_original")]
pub original: Option<Box<ForeignKeyDefinitionDto>>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct CheckConstraintDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub expression: String,
#[serde(rename = "_original")]
pub original: Option<Box<CheckConstraintDefinitionDto>>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ViewDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub definition: String,
#[serde(rename = "_original")]
pub original: Option<Box<ViewDefinitionDto>>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct TriggerDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub timing: String,
#[serde(default)]
pub event: String,
#[serde(default)]
pub table_name: String,
#[serde(default)]
pub definition: String,
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(rename = "_original")]
pub original: Option<Box<TriggerDefinitionDto>>,
}

#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct RoutineDefinitionDto {
#[serde(default)]
pub id: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub r#type: String,
#[serde(default)]
pub definition: String,
#[serde(rename = "_original")]
pub original: Option<Box<RoutineDefinitionDto>>,
}

impl From<ColumnDefinitionDto> for ColumnDefinition {
Expand All @@ -139,10 +252,10 @@ impl From<ColumnDefinitionDto> for ColumnDefinition {
precision: dto.precision.map(|i| json_to_prost_value(serde_json::Value::Number(i.into()))),
scale: dto.scale.map(|i| json_to_prost_value(serde_json::Value::Number(i.into()))),
enum_values: vec![],
id: "".to_string(),
id: dto.id,
is_default_expression: false,
is_identity: false,
original: None,
is_identity: dto.is_identity,
original: dto.original.map(|o| Box::new(ColumnDefinition::from(*o))),
original_index: dto.original_index,
pk_constraint_name: "".to_string(),
}
Expand All @@ -155,8 +268,77 @@ impl From<IndexDefinitionDto> for IndexDefinition {
name: dto.name,
columns: dto.columns,
is_unique: dto.is_unique,
id: "".to_string(),
original: None,
id: dto.id,
original: dto.original.map(|o| Box::new(IndexDefinition::from(*o))),
}
}
}

use crate::vstable::{
CheckConstraintDefinition, ForeignKeyDefinition, RoutineDefinition, TriggerDefinition,
ViewDefinition,
};

impl From<ForeignKeyDefinitionDto> for ForeignKeyDefinition {
fn from(dto: ForeignKeyDefinitionDto) -> Self {
ForeignKeyDefinition {
id: dto.id,
name: dto.name,
columns: dto.columns,
referenced_table: dto.referenced_table,
referenced_columns: dto.referenced_columns,
on_delete: dto.on_delete,
on_update: dto.on_update,
original: dto.original.map(|o| Box::new(ForeignKeyDefinition::from(*o))),
}
}
}

impl From<CheckConstraintDefinitionDto> for CheckConstraintDefinition {
fn from(dto: CheckConstraintDefinitionDto) -> Self {
CheckConstraintDefinition {
id: dto.id,
name: dto.name,
expression: dto.expression,
original: dto.original.map(|o| Box::new(CheckConstraintDefinition::from(*o))),
}
}
}

impl From<ViewDefinitionDto> for ViewDefinition {
fn from(dto: ViewDefinitionDto) -> Self {
ViewDefinition {
id: dto.id,
name: dto.name,
definition: dto.definition,
original: dto.original.map(|o| Box::new(ViewDefinition::from(*o))),
}
}
}

impl From<TriggerDefinitionDto> for TriggerDefinition {
fn from(dto: TriggerDefinitionDto) -> Self {
TriggerDefinition {
id: dto.id,
name: dto.name,
timing: dto.timing,
event: dto.event,
table_name: dto.table_name,
definition: dto.definition,
enabled: dto.enabled,
original: dto.original.map(|o| Box::new(TriggerDefinition::from(*o))),
}
}
}

impl From<RoutineDefinitionDto> for RoutineDefinition {
fn from(dto: RoutineDefinitionDto) -> Self {
RoutineDefinition {
id: dto.id,
name: dto.name,
r#type: dto.r#type,
definition: dto.definition,
original: dto.original.map(|o| Box::new(RoutineDefinition::from(*o))),
}
}
}
Expand All @@ -172,16 +354,24 @@ impl From<DiffRequestDto> for DiffRequest {
deleted_columns: dto.deleted_columns.into_iter().map(|c| c.into()).collect(),
indexes: dto.indexes.into_iter().map(|i| i.into()).collect(),
deleted_indexes: dto.deleted_indexes.into_iter().map(|i| i.into()).collect(),
foreign_keys: vec![],
deleted_foreign_keys: vec![],
check_constraints: vec![],
deleted_checks: vec![],
views: vec![],
deleted_views: vec![],
triggers: vec![],
deleted_triggers: vec![],
routines: vec![],
deleted_routines: vec![],
foreign_keys: dto.foreign_keys.into_iter().map(|f| f.into()).collect(),
deleted_foreign_keys: dto
.deleted_foreign_keys
.into_iter()
.map(|f| f.into())
.collect(),
check_constraints: dto
.check_constraints
.into_iter()
.map(|c| c.into())
.collect(),
deleted_checks: dto.deleted_checks.into_iter().map(|c| c.into()).collect(),
views: dto.views.into_iter().map(|v| v.into()).collect(),
deleted_views: dto.deleted_views.into_iter().map(|v| v.into()).collect(),
triggers: dto.triggers.into_iter().map(|t| t.into()).collect(),
deleted_triggers: dto.deleted_triggers.into_iter().map(|t| t.into()).collect(),
routines: dto.routines.into_iter().map(|r| r.into()).collect(),
deleted_routines: dto.deleted_routines.into_iter().map(|r| r.into()).collect(),
config: None,
}
}
Expand Down
Loading