fix: scope query connections by client session

This commit is contained in:
t8y2 committed 2026-05-25 17:23:36 +08:00
1 parent ac65508ddb
commit d326cb0ced
17 files changed
+290 -44

No files matched your search

+1
View File
@@ -185,6 +185,7 @@ async fn main() {
.route("/data-compare/prepare-from-tables", post(routes::data_compare::prepare_data_compare_from_tables))
.route("/query/cancel", post(routes::query::cancel_query))
.route("/query/close-session", post(routes::query::close_query_session))
.route("/query/close-client-session", post(routes::query::close_client_connection_session))
.route("/export/query-result-json", post(routes::text_export::export_query_result_json))
.route("/export/query-result-markdown", post(routes::text_export::export_query_result_markdown))
// Redis
+33 -1
View File
@@ -19,6 +19,7 @@ pub struct ExecuteQueryRequest {
pub fetch_size: Option<usize>,
pub page_size: Option<usize>,
pub result_session_id: Option<String>,
pub client_session_id: Option<String>,
}
#[derive(Deserialize)]
@@ -33,6 +34,15 @@ pub struct CloseSessionRequest {
pub connection_id: String,
pub database: String,
pub session_id: String,
pub client_session_id: Option<String>,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CloseClientConnectionSessionRequest {
pub connection_id: String,
pub database: String,
pub client_session_id: String,
}
#[derive(Deserialize)]
@@ -260,6 +270,7 @@ pub async fn execute_query(
fetch_size: req.fetch_size,
page_size: req.page_size,
result_session_id: req.result_session_id,
client_session_id: req.client_session_id,
},
)
.await
@@ -290,6 +301,7 @@ pub async fn execute_multi(
fetch_size: req.fetch_size,
page_size: req.page_size,
result_session_id: req.result_session_id,
client_session_id: req.client_session_id,
},
)
.await
@@ -328,7 +340,27 @@ pub async fn close_query_session(
State(state): State<Arc<WebState>>,
Json(req): Json<CloseSessionRequest>,
) -> Result<Json<serde_json::Value>, AppError> {
let closed = dbx_core::query::close_query_session(&state.app, &req.connection_id, &req.database, &req.session_id)
let closed = dbx_core::query::close_query_session(
&state.app,
&req.connection_id,
&req.database,
&req.session_id,
req.client_session_id.as_deref(),
)
.await
.map_err(AppError)?;
Ok(Json(serde_json::json!(closed)))
}
pub async fn close_client_connection_session(
State(state): State<Arc<WebState>>,
Json(req): Json<CloseClientConnectionSessionRequest>,
) -> Result<Json<serde_json::Value>, AppError> {
let database = if req.database.trim().is_empty() { None } else { Some(req.database.as_str()) };
let closed = state
.app
.close_client_session_pool(&req.connection_id, database, &req.client_session_id)
.await
.map_err(AppError)?;