This is an automated email from the ASF dual-hosted git repository.
weijun 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 172e557327 Minor: Simplify `IdentTaker` (#13609)
172e557327 is described below
commit 172e5573270ae4a3d152d5bf15c5c0008595090e
Author: Andrew Lamb <[email protected]>
AuthorDate: Sun Dec 1 07:00:26 2024 -0500
Minor: Simplify `IdentTaker` (#13609)
---
datafusion/sql/src/planner.rs | 45 ++++++++++++++++++++++++++++---------------
datafusion/sql/src/utils.rs | 2 +-
2 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/datafusion/sql/src/planner.rs b/datafusion/sql/src/planner.rs
index 382c503154..496088b1e1 100644
--- a/datafusion/sql/src/planner.rs
+++ b/datafusion/sql/src/planner.rs
@@ -622,13 +622,29 @@ pub fn object_name_to_table_reference(
idents_to_table_reference(idents, enable_normalization)
}
-struct IdentTaker(Vec<Ident>);
+struct IdentTaker {
+ normalizer: IdentNormalizer,
+ idents: Vec<Ident>,
+}
+
/// Take the next identifier from the back of idents, panic'ing if
/// there are none left
impl IdentTaker {
- fn take(&mut self, enable_normalization: bool) -> String {
- let ident = self.0.pop().expect("no more identifiers");
- IdentNormalizer::new(enable_normalization).normalize(ident)
+ fn new(idents: Vec<Ident>, enable_normalization: bool) -> Self {
+ Self {
+ normalizer: IdentNormalizer::new(enable_normalization),
+ idents,
+ }
+ }
+
+ fn take(&mut self) -> String {
+ let ident = self.idents.pop().expect("no more identifiers");
+ self.normalizer.normalize(ident)
+ }
+
+ /// Returns the number of remaining identifiers
+ fn len(&self) -> usize {
+ self.idents.len()
}
}
@@ -636,7 +652,7 @@ impl IdentTaker {
impl std::fmt::Display for IdentTaker {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut first = true;
- for ident in self.0.iter() {
+ for ident in self.idents.iter() {
if !first {
write!(f, ".")?;
}
@@ -653,29 +669,28 @@ pub(crate) fn idents_to_table_reference(
idents: Vec<Ident>,
enable_normalization: bool,
) -> Result<TableReference> {
- let mut taker = IdentTaker(idents);
- let num_idents = taker.0.len();
+ let mut taker = IdentTaker::new(idents, enable_normalization);
- match num_idents {
+ match taker.len() {
1 => {
- let table = taker.take(enable_normalization);
+ let table = taker.take();
Ok(TableReference::bare(table))
}
2 => {
- let table = taker.take(enable_normalization);
- let schema = taker.take(enable_normalization);
+ let table = taker.take();
+ let schema = taker.take();
Ok(TableReference::partial(schema, table))
}
3 => {
- let table = taker.take(enable_normalization);
- let schema = taker.take(enable_normalization);
- let catalog = taker.take(enable_normalization);
+ let table = taker.take();
+ let schema = taker.take();
+ let catalog = taker.take();
Ok(TableReference::full(catalog, schema, table))
}
_ => plan_err!(
"Unsupported compound identifier '{}'. Expected 1, 2 or 3 parts,
got {}",
taker,
- num_idents
+ taker.len()
),
}
}
diff --git a/datafusion/sql/src/utils.rs b/datafusion/sql/src/utils.rs
index e29a2299b4..2b3ee8be3c 100644
--- a/datafusion/sql/src/utils.rs
+++ b/datafusion/sql/src/utils.rs
@@ -259,7 +259,7 @@ pub(crate) fn make_decimal_type(
}
}
-// Normalize an owned identifier to a lowercase string unless the identifier
is quoted.
+/// Normalize an owned identifier to a lowercase string, unless the identifier
is quoted.
pub(crate) fn normalize_ident(id: Ident) -> String {
match id.quote_style {
Some(_) => id.value,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]