@@ -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 log:: debug!( "Adding column: {}" , add_column_query) ;
840856 run_query ( & add_column_query, client) . await . map_err ( |e| {
@@ -3257,19 +3273,34 @@ SETTINGS enable_mixed_granularity_parts = 1, index_granularity = 8192, index_gra
32573273 . map ( |d| format ! ( " DEFAULT {}" , d) )
32583274 . unwrap_or_default ( ) ;
32593275
3276+ let ttl_clause = clickhouse_column
3277+ . ttl
3278+ . as_ref ( )
3279+ . map ( |t| format ! ( " TTL {}" , t) )
3280+ . unwrap_or_default ( ) ;
3281+
3282+ let codec_clause = clickhouse_column
3283+ . codec
3284+ . as_ref ( )
3285+ . map ( |c| format ! ( " CODEC({})" , c) )
3286+ . unwrap_or_default ( ) ;
3287+
32603288 let add_column_query = format ! (
3261- "ALTER TABLE `{}`.`{}` ADD COLUMN `{}` {}{} {}" ,
3289+ "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{}{}{} {}" ,
32623290 "test_db" ,
32633291 "test_table" ,
3292+ "" ,
32643293 clickhouse_column. name,
32653294 column_type_string,
32663295 default_clause,
3296+ codec_clause,
3297+ ttl_clause,
32673298 "FIRST"
32683299 ) ;
32693300
32703301 assert_eq ! (
32713302 add_column_query,
3272- "ALTER TABLE `test_db`.`test_table` ADD COLUMN `count` Int32 DEFAULT 42 FIRST"
3303+ "ALTER TABLE `test_db`.`test_table` ADD COLUMN `count` Int32 DEFAULT 42 FIRST"
32733304 ) ;
32743305 }
32753306
@@ -3305,19 +3336,34 @@ SETTINGS enable_mixed_granularity_parts = 1, index_granularity = 8192, index_gra
33053336 . map ( |d| format ! ( " DEFAULT {}" , d) )
33063337 . unwrap_or_default ( ) ;
33073338
3339+ let ttl_clause = clickhouse_column
3340+ . ttl
3341+ . as_ref ( )
3342+ . map ( |t| format ! ( " TTL {}" , t) )
3343+ . unwrap_or_default ( ) ;
3344+
3345+ let codec_clause = clickhouse_column
3346+ . codec
3347+ . as_ref ( )
3348+ . map ( |c| format ! ( " CODEC({})" , c) )
3349+ . unwrap_or_default ( ) ;
3350+
33083351 let add_column_query = format ! (
3309- "ALTER TABLE `{}`.`{}` ADD COLUMN `{}` {}{} {}" ,
3352+ "ALTER TABLE `{}`.`{}`{} ADD COLUMN `{}` {}{}{}{} {}" ,
33103353 "test_db" ,
33113354 "test_table" ,
3355+ "" ,
33123356 clickhouse_column. name,
33133357 column_type_string,
33143358 default_clause,
3359+ codec_clause,
3360+ ttl_clause,
33153361 "AFTER `id`"
33163362 ) ;
33173363
33183364 assert_eq ! (
33193365 add_column_query,
3320- "ALTER TABLE `test_db`.`test_table` ADD COLUMN `description` Nullable(String) DEFAULT 'default text' AFTER `id`"
3366+ "ALTER TABLE `test_db`.`test_table` ADD COLUMN `description` Nullable(String) DEFAULT 'default text' AFTER `id`"
33213367 ) ;
33223368 }
33233369
0 commit comments