fix: scope query connections by client session
This commit is contained in:
1 parent
ac65508ddb
commit
d326cb0ced
17 files changed
+290
-44
No files matched your search
@@ -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
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
|
||||
Reference in new issue
Block a user