(
client: &mut AuthedClient,
cluster: &str,
sql_query: &str,
max_response_size: usize,
)
| 1217 | } |
| 1218 | |
| 1219 | async fn execute_query( |
| 1220 | client: &mut AuthedClient, |
| 1221 | cluster: &str, |
| 1222 | sql_query: &str, |
| 1223 | max_response_size: usize, |
| 1224 | ) -> Result<McpResult, McpRequestError> { |
| 1225 | debug!(cluster = %cluster, "Executing user query"); |
| 1226 | |
| 1227 | validate_readonly_query(sql_query)?; |
| 1228 | |
| 1229 | // Use READ ONLY transaction to prevent modifications |
| 1230 | // Combine with SET CLUSTER (prometheus.rs:29-33 pattern) |
| 1231 | let combined_query = format!( |
| 1232 | "BEGIN READ ONLY; SET CLUSTER = {}; {}\n; COMMIT;", |
| 1233 | escaped_string_literal(cluster), |
| 1234 | sql_query |
| 1235 | ); |
| 1236 | |
| 1237 | let rows = execute_sql(client, &combined_query).await?; |
| 1238 | |
| 1239 | format_rows_response(rows, max_response_size) |
| 1240 | } |
| 1241 | |
| 1242 | async fn query_system_catalog( |
| 1243 | client: &mut AuthedClient, |
no test coverage detected