@@ -812,29 +812,45 @@ async fn execute_add_table_column(
812812 let clickhouse_column = std_column_to_clickhouse_column ( column. clone ( ) ) ?;
813813 let column_type_string = basic_field_type_to_string ( & clickhouse_column. column_type ) ?;
814814
815+ let cluster_clause = cluster_name
816+ . map ( |c| format ! ( " ON CLUSTER {}" , c) )
817+ . unwrap_or_default ( ) ;
818+
815819 // Include DEFAULT clause if column has a default value
816820 let default_clause = clickhouse_column
817821 . default
818822 . as_ref ( )
819823 . map ( |d| format ! ( " DEFAULT {}" , d) )
820824 . unwrap_or_default ( ) ;
821825
822- let cluster_clause = cluster_name
823- . map ( |c| format ! ( " ON CLUSTER {}" , c) )
826+ let codec_clause = clickhouse_column
827+ . codec
828+ . as_ref ( )
829+ . map ( |c| format ! ( " CODEC({})" , c) )
824830 . unwrap_or_default ( ) ;
825831
832+ let ttl_clause = clickhouse_column
833+ . ttl
834+ . as_ref ( )
835+ . map ( |t| format ! ( " TTL {}" , t) )
836+ . unwrap_or_default ( ) ;
837+
838+ let position_clause = match after_column {
839+ None => "FIRST" . to_string ( ) ,
840+ Some ( after_col) => format ! ( "AFTER `{after_col}`" ) ,
841+ } ;
842+
826843 let add_column_query = format ! (
827- "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{} {}" ,
844+ "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{}{}{} {}" ,
828845 db_name,
829846 table_name,
830847 cluster_clause,
831848 clickhouse_column. name,
832849 column_type_string,
833850 default_clause,
834- match after_column {
835- None => "FIRST" . to_string( ) ,
836- Some ( after_col) => format!( "AFTER `{after_col}`" ) ,
837- }
851+ codec_clause,
852+ ttl_clause,
853+ position_clause
838854 ) ;
839855 tracing:: debug!( "Adding column: {}" , add_column_query) ;
840856 run_query ( & add_column_query, client) . await . map_err ( |e| {
@@ -3412,19 +3428,34 @@ SETTINGS enable_mixed_granularity_parts = 1, index_granularity = 8192, index_gra
34123428 . map ( |d| format ! ( " DEFAULT {}" , d) )
34133429 . unwrap_or_default ( ) ;
34143430
3431+ let ttl_clause = clickhouse_column
3432+ . ttl
3433+ . as_ref ( )
3434+ . map ( |t| format ! ( " TTL {}" , t) )
3435+ . unwrap_or_default ( ) ;
3436+
3437+ let codec_clause = clickhouse_column
3438+ . codec
3439+ . as_ref ( )
3440+ . map ( |c| format ! ( " CODEC({})" , c) )
3441+ . unwrap_or_default ( ) ;
3442+
34153443 let add_column_query = format ! (
3416- "ALTER TABLE `{}`.`{}` ADD COLUMN `{}` {}{} {}" ,
3444+ "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{}{}{} {}" ,
34173445 "test_db" ,
34183446 "test_table" ,
3447+ "" ,
34193448 clickhouse_column. name,
34203449 column_type_string,
34213450 default_clause,
3451+ codec_clause,
3452+ ttl_clause,
34223453 "FIRST"
34233454 ) ;
34243455
34253456 assert_eq ! (
34263457 add_column_query,
3427- "ALTER TABLE `test_db`.`test_table` ADD COLUMN `count` Int32 DEFAULT 42 FIRST"
3458+ "ALTER TABLE `test_db`.`test_table` ADD COLUMN `count` Int32 DEFAULT 42 FIRST"
34283459 ) ;
34293460 }
34303461
@@ -3460,19 +3491,34 @@ SETTINGS enable_mixed_granularity_parts = 1, index_granularity = 8192, index_gra
34603491 . map ( |d| format ! ( " DEFAULT {}" , d) )
34613492 . unwrap_or_default ( ) ;
34623493
3494+ let ttl_clause = clickhouse_column
3495+ . ttl
3496+ . as_ref ( )
3497+ . map ( |t| format ! ( " TTL {}" , t) )
3498+ . unwrap_or_default ( ) ;
3499+
3500+ let codec_clause = clickhouse_column
3501+ . codec
3502+ . as_ref ( )
3503+ . map ( |c| format ! ( " CODEC({})" , c) )
3504+ . unwrap_or_default ( ) ;
3505+
34633506 let add_column_query = format ! (
3464- "ALTER TABLE `{}`.`{}` ADD COLUMN `{}` {}{} {}" ,
3507+ "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{}{}{} {}" ,
34653508 "test_db" ,
34663509 "test_table" ,
3510+ "" ,
34673511 clickhouse_column. name,
34683512 column_type_string,
34693513 default_clause,
3514+ codec_clause,
3515+ ttl_clause,
34703516 "AFTER `id`"
34713517 ) ;
34723518
34733519 assert_eq ! (
34743520 add_column_query,
3475- "ALTER TABLE `test_db`.`test_table` ADD COLUMN `description` Nullable(String) DEFAULT 'default text' AFTER `id`"
3521+ "ALTER TABLE `test_db`.`test_table` ADD COLUMN `description` Nullable(String) DEFAULT 'default text' AFTER `id`"
34763522 ) ;
34773523 }
34783524
0 commit comments