Skip to content

Commit 6eaffe7

Browse files
author
Yu Chen
committed
refactor: move DialectUnparser to query.rs and box large enum variant
Move DialectUnparser and SqlDialect::unparser() from spark_dialect.rs to query.rs to co-locate with the SqlDialect enum. Box the Spark CustomDialect variant to fix clippy::large_enum_variant lint. Co-authored-by: Isaac
1 parent 1bc5623 commit 6eaffe7

2 files changed

Lines changed: 41 additions & 41 deletions

File tree

crates/lance-graph/src/query.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ use crate::config::GraphConfig;
99
use crate::error::{GraphError, Result};
1010
use crate::logical_plan::LogicalPlanner;
1111
use crate::parser::parse_cypher_query;
12+
use crate::spark_dialect::build_spark_dialect;
1213
use arrow_array::RecordBatch;
1314
use arrow_schema::{Field, Schema, SchemaRef};
15+
use datafusion_sql::unparser::dialect::{
16+
CustomDialect, DefaultDialect, MySqlDialect, PostgreSqlDialect, SqliteDialect,
17+
};
18+
use datafusion_sql::unparser::Unparser;
1419
use lance_graph_catalog::DirNamespace;
1520
use lance_namespace::models::DescribeTableRequest;
1621
use std::collections::{HashMap, HashSet};
@@ -32,6 +37,40 @@ pub enum SqlDialect {
3237
Sqlite,
3338
}
3439

40+
/// Wrapper to hold the concrete dialect type and provide an `Unparser` reference.
41+
pub enum DialectUnparser {
42+
Default(DefaultDialect),
43+
Spark(Box<CustomDialect>),
44+
PostgreSql(PostgreSqlDialect),
45+
MySql(MySqlDialect),
46+
Sqlite(SqliteDialect),
47+
}
48+
49+
impl DialectUnparser {
50+
pub fn as_unparser(&self) -> Unparser<'_> {
51+
match self {
52+
DialectUnparser::Default(d) => Unparser::new(d),
53+
DialectUnparser::Spark(d) => Unparser::new(d.as_ref()),
54+
DialectUnparser::PostgreSql(d) => Unparser::new(d),
55+
DialectUnparser::MySql(d) => Unparser::new(d),
56+
DialectUnparser::Sqlite(d) => Unparser::new(d),
57+
}
58+
}
59+
}
60+
61+
impl SqlDialect {
62+
/// Create a `DialectUnparser` configured for this dialect.
63+
pub fn unparser(&self) -> DialectUnparser {
64+
match self {
65+
SqlDialect::Default => DialectUnparser::Default(DefaultDialect {}),
66+
SqlDialect::Spark => DialectUnparser::Spark(Box::new(build_spark_dialect())),
67+
SqlDialect::PostgreSql => DialectUnparser::PostgreSql(PostgreSqlDialect {}),
68+
SqlDialect::MySql => DialectUnparser::MySql(MySqlDialect {}),
69+
SqlDialect::Sqlite => DialectUnparser::Sqlite(SqliteDialect {}),
70+
}
71+
}
72+
}
73+
3574
/// Normalize an Arrow schema to have lowercase field names.
3675
///
3776
/// This ensures that column names in the dataset match the normalized

crates/lance-graph/src/spark_dialect.rs

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright The Lance Authors
33

4-
//! SQL dialect support for the DataFusion unparser.
4+
//! Spark SQL dialect for the DataFusion unparser.
55
//!
66
//! This module provides a Spark SQL dialect built using DataFusion's
7-
//! [`CustomDialectBuilder`], and a helper to build an [`Unparser`] for any
8-
//! supported [`SqlDialect`].
7+
//! [`CustomDialectBuilder`].
98
//!
109
//! Key Spark SQL differences from standard SQL:
1110
//! - Backtick (`` ` ``) identifier quoting
@@ -18,13 +17,9 @@
1817
1918
use datafusion_sql::unparser::dialect::{
2019
CharacterLengthStyle, CustomDialect, CustomDialectBuilder, DateFieldExtractStyle,
21-
DefaultDialect, MySqlDialect, PostgreSqlDialect, SqliteDialect,
2220
};
23-
use datafusion_sql::unparser::Unparser;
2421
use datafusion_sql::sqlparser::ast::{self, Ident, ObjectName, TimezoneInfo};
2522

26-
use crate::query::SqlDialect;
27-
2823
/// Build a Spark SQL dialect using DataFusion's `CustomDialectBuilder`.
2924
pub fn build_spark_dialect() -> CustomDialect {
3025
CustomDialectBuilder::new()
@@ -56,40 +51,6 @@ pub fn build_spark_dialect() -> CustomDialect {
5651
.build()
5752
}
5853

59-
/// Wrapper to hold the concrete dialect type and provide an `Unparser` reference.
60-
pub enum DialectUnparser {
61-
Default(DefaultDialect),
62-
Spark(CustomDialect),
63-
PostgreSql(PostgreSqlDialect),
64-
MySql(MySqlDialect),
65-
Sqlite(SqliteDialect),
66-
}
67-
68-
impl DialectUnparser {
69-
pub fn as_unparser(&self) -> Unparser<'_> {
70-
match self {
71-
DialectUnparser::Default(d) => Unparser::new(d),
72-
DialectUnparser::Spark(d) => Unparser::new(d),
73-
DialectUnparser::PostgreSql(d) => Unparser::new(d),
74-
DialectUnparser::MySql(d) => Unparser::new(d),
75-
DialectUnparser::Sqlite(d) => Unparser::new(d),
76-
}
77-
}
78-
}
79-
80-
impl SqlDialect {
81-
/// Create a `DialectUnparser` configured for this dialect.
82-
pub fn unparser(&self) -> DialectUnparser {
83-
match self {
84-
SqlDialect::Default => DialectUnparser::Default(DefaultDialect {}),
85-
SqlDialect::Spark => DialectUnparser::Spark(build_spark_dialect()),
86-
SqlDialect::PostgreSql => DialectUnparser::PostgreSql(PostgreSqlDialect {}),
87-
SqlDialect::MySql => DialectUnparser::MySql(MySqlDialect {}),
88-
SqlDialect::Sqlite => DialectUnparser::Sqlite(SqliteDialect {}),
89-
}
90-
}
91-
}
92-
9354
#[cfg(test)]
9455
mod tests {
9556
use super::*;

0 commit comments

Comments
 (0)