mirror of
https://github.com/postgresml/pgcat.git
synced 2026-03-27 18:56:30 +00:00
implement show users (#329)
* implement show users * fix compile errors * add basic ruby test * gitignore things
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,4 +1,7 @@
|
|||||||
.idea
|
.idea
|
||||||
/target
|
/target
|
||||||
*.deb
|
*.deb
|
||||||
.vscode
|
.vscode
|
||||||
|
.profraw
|
||||||
|
cov/
|
||||||
|
lcov.info
|
||||||
|
|||||||
33
src/admin.rs
33
src/admin.rs
@@ -100,6 +100,10 @@ where
|
|||||||
trace!("SHOW VERSION");
|
trace!("SHOW VERSION");
|
||||||
show_version(stream).await
|
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 SHOW query against the admin database").await,
|
||||||
},
|
},
|
||||||
_ => error_response(stream, "Unsupported 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
|
||||||
|
}
|
||||||
|
|||||||
@@ -286,4 +286,14 @@ describe "Admin" do
|
|||||||
connections.map(&:close)
|
connections.map(&:close)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user