This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new d77af59500 Derive Eq, Hash, Ord for ResolvedTableReference to be
capable of map key (#13303)
d77af59500 is described below
commit d77af59500829b45f581ad6a81f0dabdf9e16522
Author: Kezhu Wang <[email protected]>
AuthorDate: Sat Nov 9 04:23:54 2024 +0800
Derive Eq, Hash, Ord for ResolvedTableReference to be capable of map key
(#13303)
Resolves #13300.
---
datafusion/common/src/table_reference.rs | 2 +-
datafusion/core/src/execution/session_state.rs | 9 +++++----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/datafusion/common/src/table_reference.rs
b/datafusion/common/src/table_reference.rs
index 67f3da4f48..bb53a30dcb 100644
--- a/datafusion/common/src/table_reference.rs
+++ b/datafusion/common/src/table_reference.rs
@@ -19,7 +19,7 @@ use crate::utils::{parse_identifiers_normalized,
quote_identifier};
use std::sync::Arc;
/// A fully resolved path to a table of the form "catalog.schema.table"
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ResolvedTableReference {
/// The catalog (aka database) containing the table
pub catalog: Arc<str>,
diff --git a/datafusion/core/src/execution/session_state.rs
b/datafusion/core/src/execution/session_state.rs
index ad0c1c2d41..f65bd2a597 100644
--- a/datafusion/core/src/execution/session_state.rs
+++ b/datafusion/core/src/execution/session_state.rs
@@ -540,8 +540,9 @@ impl SessionState {
};
for reference in references {
- let resolved = &self.resolve_table_ref(reference);
- if let Entry::Vacant(v) =
provider.tables.entry(resolved.to_string()) {
+ let resolved = self.resolve_table_ref(reference);
+ if let Entry::Vacant(v) = provider.tables.entry(resolved) {
+ let resolved = v.key();
if let Ok(schema) = self.schema_for_ref(resolved.clone()) {
if let Some(table) = schema.table(&resolved.table).await? {
v.insert(provider_as_source(table));
@@ -1599,7 +1600,7 @@ impl From<SessionState> for SessionStateBuilder {
/// having a direct dependency on the [`SessionState`] struct (and core crate)
struct SessionContextProvider<'a> {
state: &'a SessionState,
- tables: HashMap<String, Arc<dyn TableSource>>,
+ tables: HashMap<ResolvedTableReference, Arc<dyn TableSource>>,
}
impl<'a> ContextProvider for SessionContextProvider<'a> {
@@ -1611,7 +1612,7 @@ impl<'a> ContextProvider for SessionContextProvider<'a> {
&self,
name: TableReference,
) -> datafusion_common::Result<Arc<dyn TableSource>> {
- let name = self.state.resolve_table_ref(name).to_string();
+ let name = self.state.resolve_table_ref(name);
self.tables
.get(&name)
.cloned()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]