@@ -366,6 +366,55 @@ def table_columns(table_name: str) -> t.Dict[str, exp.DataType]:
366366 ]
367367
368368
369+ def test_alter_table_precision_increase_varchar (adapter : t .Callable ):
370+ current_table_name = "test_table"
371+ target_table_name = "target_table"
372+
373+ def table_columns (table_name : str ) -> t .Dict [str , exp .DataType ]:
374+ if table_name == current_table_name :
375+ return {
376+ "id" : exp .DataType .build ("int" ),
377+ "test_column" : exp .DataType .build ("VARCHAR(10)" ),
378+ }
379+ else :
380+ return {
381+ "id" : exp .DataType .build ("int" ),
382+ "test_column" : exp .DataType .build ("VARCHAR(20)" ),
383+ }
384+
385+ adapter .columns = table_columns
386+
387+ adapter .alter_table (adapter .get_alter_expressions (current_table_name , target_table_name ))
388+ assert to_sql_calls (adapter ) == [
389+ 'ALTER TABLE "test_table" ALTER COLUMN "test_column" TYPE VARCHAR(20)' ,
390+ ]
391+
392+
393+ def test_alter_table_precision_increase_decimal (adapter : t .Callable ):
394+ current_table_name = "test_table"
395+ target_table_name = "target_table"
396+
397+ def table_columns (table_name : str ) -> t .Dict [str , exp .DataType ]:
398+ if table_name == current_table_name :
399+ return {
400+ "id" : exp .DataType .build ("int" ),
401+ "test_column" : exp .DataType .build ("DECIMAL(10, 10)" ),
402+ }
403+ else :
404+ return {
405+ "id" : exp .DataType .build ("int" ),
406+ "test_column" : exp .DataType .build ("DECIMAL(25, 10)" ),
407+ }
408+
409+ adapter .columns = table_columns
410+
411+ adapter .alter_table (adapter .get_alter_expressions (current_table_name , target_table_name ))
412+ assert to_sql_calls (adapter ) == [
413+ 'ALTER TABLE "test_table" DROP COLUMN "test_column" CASCADE' ,
414+ 'ALTER TABLE "test_table" ADD COLUMN "test_column" DECIMAL(25, 10)' ,
415+ ]
416+
417+
369418def test_merge (make_mocked_engine_adapter : t .Callable , mocker : MockerFixture ):
370419 adapter = make_mocked_engine_adapter (RedshiftEngineAdapter )
371420 mocker .patch (
0 commit comments