diff --git a/src/frontend/src/handler/describe.rs b/src/frontend/src/handler/describe.rs index 25497bc08c215..67cc3f3585bdb 100644 --- a/src/frontend/src/handler/describe.rs +++ b/src/frontend/src/handler/describe.rs @@ -29,6 +29,7 @@ use crate::binder::{Binder, Relation}; use crate::catalog::{CatalogError, IndexCatalog}; use crate::handler::util::col_descs_to_rows; use crate::handler::HandlerArgs; +use crate::optimizer::property::Direction; pub fn handle_describe(handler_args: HandlerArgs, table_name: ObjectName) -> Result { let session = handler_args.session; @@ -113,11 +114,18 @@ pub fn handle_describe(handler_args: HandlerArgs, table_name: ObjectName) -> Res rows.extend(indices.iter().map(|index| { let index_table = index.index_table.clone(); - let index_columns = index_table + let index_columns_with_ordering = index_table .pk .iter() .filter(|x| !index_table.columns[x.index].is_hidden) - .map(|x| index_table.columns[x.index].name().to_string()) + .map(|x| { + let index_column_name = index_table.columns[x.index].name().to_string(); + if Direction::Desc == x.direct { + index_column_name + " DESC" + } else { + index_column_name + } + }) .collect_vec(); let pk_column_index_set = index_table @@ -147,7 +155,7 @@ pub fn handle_describe(handler_args: HandlerArgs, table_name: ObjectName) -> Res Some( format!( "index({}) distributed by({})", - display_comma_separated(&index_columns), + display_comma_separated(&index_columns_with_ordering), display_comma_separated(&distributed_by_columns), ) .into(), @@ -156,7 +164,7 @@ pub fn handle_describe(handler_args: HandlerArgs, table_name: ObjectName) -> Res Some( format!( "index({}) include({}) distributed by({})", - display_comma_separated(&index_columns), + display_comma_separated(&index_columns_with_ordering), display_comma_separated(&include_columns), display_comma_separated(&distributed_by_columns), ) @@ -204,7 +212,7 @@ mod tests { .unwrap(); frontend - .run_sql("create index idx1 on t (v1,v2);") + .run_sql("create index idx1 on t (v1 DESC, v2);") .await .unwrap(); @@ -233,7 +241,7 @@ mod tests { "v3".into() => "Int32".into(), "v4".into() => "Int32".into(), "primary key".into() => "v3".into(), - "idx1".into() => "index(v1, v2, v3) include(v4) distributed by(v1, v2)".into(), + "idx1".into() => "index(v1 DESC, v2, v3) include(v4) distributed by(v1, v2)".into(), }; assert_eq!(columns, expected_columns);