diff --git a/crates/dbx-core/src/db/dm_driver.rs b/crates/dbx-core/src/db/dm_driver.rs index 8df20fd92..a3cd8b5ea 100644 --- a/crates/dbx-core/src/db/dm_driver.rs +++ b/crates/dbx-core/src/db/dm_driver.rs @@ -258,6 +258,15 @@ pub fn list_triggers(client: &DmClient, schema: &str, table: &str) -> Result Result { + let set_schema = format!("SET SCHEMA \"{}\"", schema); + client.conn.execute(&set_schema, (), None).map_err(|e| { + log::error!("[dameng] set schema failed: {e}"); + e.to_string() + })?; + execute_query_sync(client, sql) +} + pub fn execute_query_sync(client: &DmClient, sql: &str) -> Result { let start = Instant::now(); let sql = sql.trim().trim_end_matches(';'); diff --git a/crates/dbx-core/src/db/oracle_driver.rs b/crates/dbx-core/src/db/oracle_driver.rs index 70dc0d0ea..1ff2021da 100644 --- a/crates/dbx-core/src/db/oracle_driver.rs +++ b/crates/dbx-core/src/db/oracle_driver.rs @@ -330,6 +330,15 @@ pub async fn list_triggers(conn: &OracleClient, schema: &str, table: &str) -> Re .collect()) } +pub async fn execute_query_with_schema(conn: &OracleClient, schema: &str, sql: &str) -> Result { + let set_schema = format!("ALTER SESSION SET CURRENT_SCHEMA = \"{}\"", schema); + conn.execute(&set_schema, &[]).await.map_err(|e| { + log::error!("[oracle] set current_schema failed: {e}"); + e.to_string() + })?; + execute_query(conn, sql).await +} + pub async fn execute_query(conn: &OracleClient, sql: &str) -> Result { let start = Instant::now(); let sql = sql.trim().trim_end_matches(';'); diff --git a/crates/dbx-core/src/query.rs b/crates/dbx-core/src/query.rs index e21d71ca6..096afe95b 100644 --- a/crates/dbx-core/src/query.rs +++ b/crates/dbx-core/src/query.rs @@ -191,6 +191,7 @@ pub async fn do_execute( } PoolKind::Oracle(pool) => { let client = pool.client(); + let schema = schema.map(|s| s.to_string()); drop(connections); let client = match cancel_token.as_ref() { Some(token) => tokio::select! { @@ -200,7 +201,13 @@ pub async fn do_execute( }, None => client.lock().await, }; - wait_for_query(cancel_token, db::oracle_driver::execute_query(&*client, sql)).await.map(truncate_result) + if let Some(schema) = schema { + wait_for_query(cancel_token, db::oracle_driver::execute_query_with_schema(&*client, &schema, sql)) + .await + .map(truncate_result) + } else { + wait_for_query(cancel_token, db::oracle_driver::execute_query(&*client, sql)).await.map(truncate_result) + } } PoolKind::Elasticsearch(client) => { let client = client.clone(); @@ -215,11 +222,16 @@ pub async fn do_execute( PoolKind::Dameng(client) => { let client = client.clone(); let sql = sql.to_string(); + let schema = schema.map(|s| s.to_string()); drop(connections); wait_for_query(cancel_token, async move { let task = tokio::task::spawn_blocking(move || { let client = client.lock().map_err(|e| e.to_string())?; - db::dm_driver::execute_query_sync(&client, &sql) + if let Some(schema) = schema { + db::dm_driver::execute_query_with_schema_sync(&client, &schema, &sql) + } else { + db::dm_driver::execute_query_sync(&client, &sql) + } }); task.await.map_err(|e| e.to_string())? }) diff --git a/src/components/grid/DataGrid.vue b/src/components/grid/DataGrid.vue index 258594071..09dbb66cd 100644 --- a/src/components/grid/DataGrid.vue +++ b/src/components/grid/DataGrid.vue @@ -623,6 +623,10 @@ function onWhereFilterKeydown(e: KeyboardEvent) { } if (e.key === "Enter") { e.preventDefault(); + if (whereSuggestions.value.length > 0) { + acceptWhereSuggestion(); + return; + } applyWhereFilter(); } } @@ -709,6 +713,10 @@ function onOrderByKeydown(e: KeyboardEvent) { } if (e.key === "Enter") { e.preventDefault(); + if (orderBySuggestions.value.length > 0) { + acceptOrderBySuggestion(); + return; + } applyOrderBySearch(); } }