@@ -91,6 +91,20 @@ def querystring(self) -> QueryString:
9191 return QueryString (f"ALTER COLUMN { self .column_name } DROP DEFAULT" )
9292
9393
94+ @dataclass
95+ class SetColumnType (AlterColumnStatement ):
96+ __slots__ = ("column_name" , "column" )
97+
98+ column_name : str
99+ column : Column
100+
101+ @property
102+ def querystring (self ) -> QueryString :
103+ return QueryString (
104+ f"ALTER COLUMN { self .column_name } TYPE { self .column .column_type } "
105+ )
106+
107+
94108@dataclass
95109class SetDefault (AlterColumnStatement ):
96110 __slots__ = ("column" , "value" )
@@ -257,6 +271,7 @@ class Alter(Query):
257271 "_drop" ,
258272 "_rename_columns" ,
259273 "_rename_table" ,
274+ "_set_column_type" ,
260275 "_set_default" ,
261276 "_set_digits" ,
262277 "_set_length" ,
@@ -274,6 +289,7 @@ def __init__(self, table: t.Type[Table]):
274289 self ._drop : t .List [DropColumn ] = []
275290 self ._rename_columns : t .List [RenameColumn ] = []
276291 self ._rename_table : t .List [RenameTable ] = []
292+ self ._set_column_type : t .List [SetColumnType ] = []
277293 self ._set_default : t .List [SetDefault ] = []
278294 self ._set_digits : t .List [SetDigits ] = []
279295 self ._set_length : t .List [SetLength ] = []
@@ -333,6 +349,15 @@ def rename_column(
333349 self ._rename_columns .append (RenameColumn (column , new_name ))
334350 return self
335351
352+ def set_column_type (self , column_name : str , column : Column ) -> Alter :
353+ """
354+ Change the type of a column.
355+ """
356+ self ._set_column_type .append (
357+ SetColumnType (column_name = column_name , column = column )
358+ )
359+ return self
360+
336361 def set_default (self , column : Column , value : t .Any ) -> Alter :
337362 """
338363 Set the default for a column.
@@ -472,6 +497,7 @@ def querystrings(self) -> t.Sequence[QueryString]:
472497 self ._rename_table ,
473498 self ._drop ,
474499 self ._drop_default ,
500+ self ._set_column_type ,
475501 self ._set_unique ,
476502 self ._set_null ,
477503 self ._set_length ,
0 commit comments