toolu-orm-core 0.1.2

Schema definitions, migrations and driver traits for toolu-orm
Documentation
use toolu_orm_core::column::ColumnType;
use toolu_orm_core::dialect::Dialect;
use toolu_orm_core::diff::{ColumnChange, Operation};
use toolu_orm_core::sql::generate_sql_for;
use toolu_orm_core::table::TableDef;

use super::column_helpers::col;

#[test]
fn alter_column_postgres_uses_alter_table() {
  let table_def = TableDef {
    name: "users".to_owned(),
    columns: vec![],
    indexes: vec![],
    strict: false,
  };
  let ops = vec![Operation::AlterColumn {
    table: "users".to_owned(),
    changes: vec![
      ColumnChange::Type {
        column: "age".to_owned(),
        old: ColumnType::Integer,
        new: ColumnType::BigInt,
      },
      ColumnChange::Nullable {
        column: "age".to_owned(),
        old: true,
        new: false,
      },
    ],
    table_def,
  }];
  let sql = generate_sql_for(&ops, Dialect::Postgres);
  assert!(
    sql.contains(r#"ALTER TABLE "users" ALTER COLUMN "age" TYPE BIGINT"#),
    "sql: {sql}"
  );
  assert!(
    sql.contains(r#"ALTER TABLE "users" ALTER COLUMN "age" SET NOT NULL"#),
    "sql: {sql}"
  );
  assert!(!sql.contains("PRAGMA"), "sql: {sql}");
}

#[test]
fn alter_column_sqlite_uses_table_recreation_path() {
  let table_def = TableDef {
    name: "users".to_owned(),
    columns: vec![
      col("id", ColumnType::Text, true, false),
      col("age", ColumnType::BigInt, false, false),
    ],
    indexes: vec![],
    strict: false,
  };
  let ops = vec![Operation::AlterColumn {
    table: "users".to_owned(),
    changes: vec![ColumnChange::Type {
      column: "age".to_owned(),
      old: ColumnType::Integer,
      new: ColumnType::BigInt,
    }],
    table_def,
  }];
  let sql = generate_sql_for(&ops, Dialect::Sqlite);
  assert!(sql.contains("PRAGMA foreign_keys = OFF"), "sql: {sql}");
  assert!(sql.contains("RENAME TO"), "sql: {sql}");
}