toolu-orm-core 0.1.2

Schema definitions, migrations and driver traits for toolu-orm
Documentation
use toolu_orm_core::column::ForeignKeyAction;
use toolu_orm_core::dialect::Dialect;
use toolu_orm_core::diff::Operation;
use toolu_orm_core::snapshot::ForeignKeyDef;
use toolu_orm_core::sql::generate_sql_for;

#[test]
fn add_foreign_key_postgres() {
  let ops = vec![Operation::AddForeignKey {
    table: "posts".to_owned(),
    fk: ForeignKeyDef {
      name: "fk_posts_author".to_owned(),
      columns: vec!["author_id".to_owned()],
      references_table: "users".to_owned(),
      references_columns: vec!["id".to_owned()],
      on_delete: Some(ForeignKeyAction::Cascade),
      on_update: None,
    },
  }];
  let sql = generate_sql_for(&ops, Dialect::Postgres);
  assert!(
    sql.contains("ALTER TABLE \"posts\" ADD CONSTRAINT \"fk_posts_author\""),
    "sql: {sql}"
  );
  assert!(
    sql.contains("FOREIGN KEY (\"author_id\") REFERENCES \"users\" (\"id\")"),
    "sql: {sql}"
  );
  assert!(sql.contains("ON DELETE CASCADE"), "sql: {sql}");
}

#[test]
fn drop_foreign_key_postgres() {
  let ops = vec![Operation::DropForeignKey {
    table: "posts".to_owned(),
    name: "fk_posts_author".to_owned(),
  }];
  let sql = generate_sql_for(&ops, Dialect::Postgres);
  assert!(
    sql.contains("ALTER TABLE \"posts\" DROP CONSTRAINT IF EXISTS \"fk_posts_author\""),
    "sql: {sql}"
  );
}