Skip to content

Commit 8b27a73

Browse files
authored
Merge pull request piccolo-orm#40 from piccolo-orm/issue_39_empty_date_column_migration_fix
Issue 39 empty date column migration fix
2 parents df3e287 + 4e563f8 commit 8b27a73

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

piccolo/columns/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .column_types import ( # noqa: F401
22
Boolean,
3+
Date,
34
Decimal,
45
Float,
56
ForeignKey,

piccolo/query/methods/alter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def querystring(self) -> QueryString:
8888
class DropDefault(AlterColumnStatement):
8989
@property
9090
def querystring(self) -> QueryString:
91-
return QueryString("DROP DEFAULT {}", self.column_name)
91+
return QueryString(f"ALTER COLUMN {self.column_name} DROP DEFAULT")
9292

9393

9494
@dataclass

tests/apps/migrations/auto/test_migration_manager.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,65 @@ def test_alter_column_set_default(self):
336336
[{"column_default": "''::character varying"}],
337337
)
338338

339+
@postgres_only
340+
def test_alter_column_drop_default(self):
341+
"""
342+
Test setting a column default to None with MigrationManager.
343+
"""
344+
# Make sure it has a non-null default to start with.
345+
manager_1 = MigrationManager()
346+
manager_1.alter_column(
347+
table_class_name="Manager",
348+
tablename="manager",
349+
column_name="name",
350+
params={"default": "Mr Manager"},
351+
old_params={"default": None},
352+
)
353+
asyncio.run(manager_1.run())
354+
self.assertEqual(
355+
self._get_column_default(),
356+
[{"column_default": "'Mr Manager'::character varying"}],
357+
)
358+
359+
# Drop the default.
360+
manager_2 = MigrationManager()
361+
manager_2.alter_column(
362+
table_class_name="Manager",
363+
tablename="manager",
364+
column_name="name",
365+
params={"default": None},
366+
old_params={"default": "Mr Manager"},
367+
)
368+
asyncio.run(manager_2.run())
369+
self.assertEqual(
370+
self._get_column_default(), [{"column_default": None}],
371+
)
372+
373+
# And add it back once more to be sure.
374+
manager_3 = manager_1
375+
asyncio.run(manager_3.run())
376+
self.assertEqual(
377+
self._get_column_default(),
378+
[{"column_default": "'Mr Manager'::character varying"}],
379+
)
380+
381+
# Run them all backwards
382+
asyncio.run(manager_3.run_backwards())
383+
self.assertEqual(
384+
self._get_column_default(), [{"column_default": None}],
385+
)
386+
387+
asyncio.run(manager_2.run_backwards())
388+
self.assertEqual(
389+
self._get_column_default(),
390+
[{"column_default": "'Mr Manager'::character varying"}],
391+
)
392+
393+
asyncio.run(manager_1.run_backwards())
394+
self.assertEqual(
395+
self._get_column_default(), [{"column_default": None}],
396+
)
397+
339398
@postgres_only
340399
def test_alter_column_add_index(self):
341400
"""

0 commit comments

Comments
 (0)