Skip to content

Commit

Permalink
Merge pull request #394 from ikrivosheev/feature/issues-393_drop_not_…
Browse files Browse the repository at this point in the history
…null

issues-393 Fix DROP NOT NULL
  • Loading branch information
tyt2y3 committed Aug 17, 2022
1 parent b84cefb commit 90245f1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
30 changes: 21 additions & 9 deletions src/backend/postgres/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ impl TableBuilder for PostgresQueryBuilder {
match column_spec {
ColumnSpec::Null => write!(sql, "NULL"),
ColumnSpec::NotNull => write!(sql, "NOT NULL"),
ColumnSpec::Default(value) => write!(sql, "DEFAULT {}", self.value_to_string(value)),
ColumnSpec::Default(value) => {
write!(sql, "DEFAULT {}", self.value_to_string(value))
}
ColumnSpec::AutoIncrement => write!(sql, ""),
ColumnSpec::UniqueKey => write!(sql, "UNIQUE"),
ColumnSpec::PrimaryKey => write!(sql, "PRIMARY KEY"),
Expand Down Expand Up @@ -146,19 +148,29 @@ impl TableBuilder for PostgresQueryBuilder {
self.prepare_column_def(column, sql);
}
TableAlterOption::ModifyColumn(column_def) => {
write!(sql, "ALTER COLUMN ").unwrap();
column_def.name.prepare(sql, self.quote());
write!(sql, " TYPE").unwrap();
self.prepare_column_type_check_auto_increment(column_def, sql);
if column_def.types.is_some() {
write!(sql, "ALTER COLUMN ").unwrap();
column_def.name.prepare(sql, self.quote());
write!(sql, " TYPE").unwrap();
self.prepare_column_type_check_auto_increment(column_def, sql);
}
for column_spec in column_def.spec.iter() {
if let ColumnSpec::AutoIncrement = column_spec {
continue;
}
write!(sql, ", ").unwrap();
write!(sql, "ALTER COLUMN ").unwrap();
if column_def.types.is_some() {
write!(sql, ", ALTER COLUMN ").unwrap();
} else {
write!(sql, " ALTER COLUMN ").unwrap();
}
column_def.name.prepare(sql, self.quote());
write!(sql, " SET ").unwrap();
self.prepare_column_spec(column_spec, sql);
match column_spec {
ColumnSpec::Null => write!(sql, " DROP NOT NULL").unwrap(),
_ => {
write!(sql, " SET ").unwrap();
self.prepare_column_spec(column_spec, sql);
}
}
}
}
TableAlterOption::RenameColumn(from_name, to_name) => {
Expand Down
15 changes: 15 additions & 0 deletions tests/postgres/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -407,3 +407,18 @@ fn alter_7() {
r#"ALTER TABLE "font" ADD COLUMN "new_col" integer, RENAME COLUMN "name" TO "name_new""#
);
}

#[test]
fn alter_8() {
assert_eq!(
Table::alter()
.table(Font::Table)
.modify_column(ColumnDef::new(Font::Language).null())
.to_string(PostgresQueryBuilder),
vec![
r#"ALTER TABLE "font""#,
r#"ALTER COLUMN "language" DROP NOT NULL"#,
]
.join(" ")
);
}

0 comments on commit 90245f1

Please sign in to comment.