implement show users (#329)

* implement show users

* fix compile errors

* add basic ruby test

* gitignore things
This commit is contained in:
Nicholas Dujay
2023-02-21 16:08:43 -05:00
committed by GitHub
parent 28f2d19cac
commit 37e1c5297a
3 changed files with 47 additions and 1 deletions

3
.gitignore vendored
View File

@@ -2,3 +2,6 @@
/target
*.deb
.vscode
.profraw
cov/
lcov.info

View File

@@ -100,6 +100,10 @@ where
trace!("SHOW VERSION");
show_version(stream).await
}
"USERS" => {
trace!("SHOW USERS");
show_users(stream).await
}
_ => error_response(stream, "Unsupported SHOW query against the admin database").await,
},
_ => error_response(stream, "Unsupported query against the admin database").await,
@@ -666,3 +670,32 @@ where
}
}
}
/// Show Users.
async fn show_users<T>(stream: &mut T) -> Result<(), Error>
where
T: tokio::io::AsyncWrite + std::marker::Unpin,
{
let mut res = BytesMut::new();
res.put(row_description(&vec![
("name", DataType::Text),
("pool_mode", DataType::Text),
]));
for (user_pool, pool) in get_all_pools() {
let pool_config = &pool.settings;
res.put(data_row(&vec![
user_pool.user.clone(),
pool_config.pool_mode.to_string(),
]));
}
res.put(command_complete("SHOW"));
res.put_u8(b'Z');
res.put_i32(5);
res.put_u8(b'I');
write_all_half(stream, &res).await
}

View File

@@ -286,4 +286,14 @@ describe "Admin" do
connections.map(&:close)
end
end
describe "SHOW users" do
it "returns the right users" do
admin_conn = PG::connect(processes.pgcat.admin_connection_string)
results = admin_conn.async_exec("SHOW USERS")[0]
admin_conn.close
expect(results["name"]).to eq("sharding_user")
expect(results["pool_mode"]).to eq("transaction")
end
end
end