You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by al...@apache.org on 2022/12/31 12:37:24 UTC

[arrow-datafusion] branch master updated: refactor: extract `parse_value` (#4774)

This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/master by this push:
     new acb8846f5 refactor: extract `parse_value` (#4774)
acb8846f5 is described below

commit acb8846f5e7ab80eac4c85f6ccb4544fc3e089d5
Author: jakevin <ja...@gmail.com>
AuthorDate: Sat Dec 31 20:37:19 2022 +0800

    refactor: extract `parse_value` (#4774)
---
 datafusion/sql/src/planner.rs | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/datafusion/sql/src/planner.rs b/datafusion/sql/src/planner.rs
index 2ca1550d8..0ee5913cb 100644
--- a/datafusion/sql/src/planner.rs
+++ b/datafusion/sql/src/planner.rs
@@ -1724,6 +1724,22 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
         }
     }
 
+    fn parse_value(&self, value: Value, param_data_types: &[DataType]) -> Result<Expr> {
+        match value {
+            Value::Number(n, _) => self.parse_sql_number(&n),
+            Value::SingleQuotedString(s) | Value::DoubleQuotedString(s) => Ok(lit(s)),
+            Value::Null => Ok(Expr::Literal(ScalarValue::Null)),
+            Value::Boolean(n) => Ok(lit(n)),
+            Value::Placeholder(param) => {
+                Self::create_placeholder_expr(param, param_data_types)
+            }
+            _ => Err(DataFusionError::Plan(format!(
+                "Unsupported Value '{:?}'",
+                value,
+            ))),
+        }
+    }
+
     fn sql_values_to_plan(
         &self,
         values: SQLValues,
@@ -1741,16 +1757,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
             .map(|row| {
                 row.into_iter()
                     .map(|v| match v {
-                        SQLExpr::Value(Value::Number(n, _)) => self.parse_sql_number(&n),
-                        SQLExpr::Value(
-                            Value::SingleQuotedString(s) | Value::DoubleQuotedString(s),
-                        ) => Ok(lit(s)),
-                        SQLExpr::Value(Value::Null) => {
-                            Ok(Expr::Literal(ScalarValue::Null))
-                        }
-                        SQLExpr::Value(Value::Boolean(n)) => Ok(lit(n)),
-                        SQLExpr::Value(Value::Placeholder(param)) => {
-                            Self::create_placeholder_expr(param, param_data_types)
+                        SQLExpr::Value(value) => {
+                            self.parse_value(value, param_data_types)
                         }
                         SQLExpr::UnaryOp { op, expr } => self.parse_sql_unary_op(
                             op,
@@ -1833,11 +1841,9 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
         planner_context: &mut PlannerContext,
     ) -> Result<Expr> {
         match sql {
-            SQLExpr::Value(Value::Number(n, _)) => self.parse_sql_number(&n),
-            SQLExpr::Value(Value::SingleQuotedString(ref s) | Value::DoubleQuotedString(ref s)) => Ok(lit(s.clone())),
-            SQLExpr::Value(Value::Boolean(n)) => Ok(lit(n)),
-            SQLExpr::Value(Value::Null) => Ok(Expr::Literal(ScalarValue::Null)),
-            SQLExpr::Value(Value::Placeholder(param)) => Self::create_placeholder_expr(param, &planner_context.prepare_param_data_types),
+            SQLExpr::Value(value) => {
+                self.parse_value(value, &planner_context.prepare_param_data_types)
+            }
             SQLExpr::Extract { field, expr } => Ok(Expr::ScalarFunction {
                 fun: BuiltinScalarFunction::DatePart,
                 args: vec![