diff --git a/src/client/commands/edit_privs.rs b/src/client/commands/edit_privs.rs index 400ff93..7b87d61 100644 --- a/src/client/commands/edit_privs.rs +++ b/src/client/commands/edit_privs.rs @@ -8,6 +8,7 @@ use clap::{Args, Parser}; use clap_complete::ArgValueCompleter; use dialoguer::{Confirm, Editor}; use futures_util::SinkExt; +use itertools::Itertools; use nix::unistd::{User, getuid}; use tokio_stream::StreamExt; @@ -203,9 +204,13 @@ pub async fn edit_database_privileges( } }) .flatten() + .sorted_by_key(|row| (row.db.clone(), row.user.clone())) .collect::>(), Some(Ok(Response::ListAllPrivileges(privilege_rows))) => match privilege_rows { - Ok(list) => list, + Ok(list) => list + .into_iter() + .sorted_by_key(|row| (row.db.clone(), row.user.clone())) + .collect(), Err(err) => { server_connection.send(Request::Exit).await?; return Err(anyhow::anyhow!(err.to_error_message()) diff --git a/src/core/protocol/commands/list_databases.rs b/src/core/protocol/commands/list_databases.rs index ddc5235..3d33dcf 100644 --- a/src/core/protocol/commands/list_databases.rs +++ b/src/core/protocol/commands/list_databases.rs @@ -61,7 +61,7 @@ pub fn print_list_databases_output_status( "Size" } ]); - for db in final_database_list { + for db in final_database_list.iter().sorted_by_key(|db| &db.database) { table.add_row(row![ db.database, db.tables.join("\n"), diff --git a/src/core/protocol/commands/list_privileges.rs b/src/core/protocol/commands/list_privileges.rs index def8db5..2a9b92f 100644 --- a/src/core/protocol/commands/list_privileges.rs +++ b/src/core/protocol/commands/list_privileges.rs @@ -64,25 +64,28 @@ pub fn print_list_privileges_output_status(output: &ListPrivilegesResponse, long .collect(), )); - for (_database, rows) in final_privs_map { - for row in &rows { - table.add_row(row![ - row.db, - row.user, - c->yn(row.select_priv), - c->yn(row.insert_priv), - c->yn(row.update_priv), - c->yn(row.delete_priv), - c->yn(row.create_priv), - c->yn(row.drop_priv), - c->yn(row.alter_priv), - c->yn(row.index_priv), - c->yn(row.create_tmp_table_priv), - c->yn(row.lock_tables_priv), - c->yn(row.references_priv), - ]); - } + for row in final_privs_map + .values() + .flatten() + .sorted_by_key(|row| (&row.db, &row.user)) + { + table.add_row(row![ + row.db, + row.user, + c->yn(row.select_priv), + c->yn(row.insert_priv), + c->yn(row.update_priv), + c->yn(row.delete_priv), + c->yn(row.create_priv), + c->yn(row.drop_priv), + c->yn(row.alter_priv), + c->yn(row.index_priv), + c->yn(row.create_tmp_table_priv), + c->yn(row.lock_tables_priv), + c->yn(row.references_priv), + ]); } + // } table.printstd(); } diff --git a/src/core/protocol/commands/list_users.rs b/src/core/protocol/commands/list_users.rs index ef7058a..3991664 100644 --- a/src/core/protocol/commands/list_users.rs +++ b/src/core/protocol/commands/list_users.rs @@ -1,5 +1,6 @@ use std::collections::BTreeMap; +use itertools::Itertools; use prettytable::Table; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -51,7 +52,7 @@ pub fn print_list_users_output_status(output: &ListUsersResponse) { "Locked", "Databases where user has privileges" ]); - for user in final_user_list { + for user in final_user_list.iter().sorted_by_key(|user| &user.user) { table.add_row(row![ user.user, user.has_password,