Skip to content

Commit 62a4ef5

Browse files
committed
parser done
Signed-off-by: jayzhan211 <jayzhan211@gmail.com>
1 parent 5e6eeca commit 62a4ef5

File tree

2 files changed

+12
-18
lines changed

2 files changed

+12
-18
lines changed

datafusion/functions-array/src/rewrite.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
2020
use crate::array_has::array_has_all;
2121
use crate::concat::{array_append, array_concat, array_prepend};
22-
use crate::extract::array_slice;
2322
use datafusion_common::config::ConfigOptions;
2423
use datafusion_common::tree_node::Transformed;
2524
use datafusion_common::utils::list_ndims;
2625
use datafusion_common::Result;
2726
use datafusion_common::{Column, DFSchema};
2827
use datafusion_expr::expr::ScalarFunction;
2928
use datafusion_expr::expr_rewriter::FunctionRewrite;
30-
use datafusion_expr::{BinaryExpr, Expr, GetFieldAccess, GetIndexedField, Operator};
29+
use datafusion_expr::{BinaryExpr, Expr, Operator};
3130

3231
/// Rewrites expressions into function calls to array functions
3332
pub(crate) struct ArrayFunctionRewriter {}
@@ -147,17 +146,6 @@ impl FunctionRewrite for ArrayFunctionRewriter {
147146
Transformed::yes(array_prepend(*left, *right))
148147
}
149148

150-
// expr[start, stop, stride] ==> array_slice(expr, start, stop, stride)
151-
Expr::GetIndexedField(GetIndexedField {
152-
expr,
153-
field:
154-
GetFieldAccess::ListRange {
155-
start,
156-
stop,
157-
stride,
158-
},
159-
}) => Transformed::yes(array_slice(*expr, *start, *stop, *stride)),
160-
161149
_ => Transformed::no(expr),
162150
};
163151
Ok(transformed)

datafusion/sql/src/expr/mod.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
use arrow_schema::DataType;
1919
use arrow_schema::TimeUnit;
20-
use datafusion_expr::GetIndexedField;
2120
use sqlparser::ast::{ArrayAgg, Expr as SQLExpr, JsonOperator, TrimWhereField, Value};
2221
use sqlparser::parser::ParserError::ParserError;
2322

@@ -1045,10 +1044,17 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
10451044
internal_err!("get_field not found")
10461045
}
10471046
}
1048-
_ => Ok(Expr::GetIndexedField(GetIndexedField::new(
1049-
Box::new(expr),
1050-
field,
1051-
))),
1047+
// expr[start, stop, stride] ==> array_slice(expr, start, stop, stride)
1048+
GetFieldAccess::ListRange { start, stop, stride } => {
1049+
if let Some(udf) = self.context_provider.get_function_meta("array_slice") {
1050+
Ok(Expr::ScalarFunction(ScalarFunction::new_udf(
1051+
udf,
1052+
vec![expr, *start, *stop, *stride],
1053+
)))
1054+
} else {
1055+
internal_err!("array_slice not found")
1056+
}
1057+
}
10521058
}
10531059
}
10541060
}

0 commit comments

Comments
 (0)