Skip to content

Commit 2354758

Browse files
authored
Implement array_slice and array_element, remove array_trim (#6936)
* feat: reading array elements * feat: array_element, array_slice, struct_extract * feat: support for positive and zero numbers for array_element and array_slice * feat: support negative numbers for array_element and array_slice * feat: add more sql logic tests for array_element and array_slice * feat: unit tests for get indexed fields * feat: sqllogictests for index * docs: array_element and array_slice * feat: some TODOS * feat: proto * feat: proto * fix: tests * fix: query_nested_get_indexed_field_on_struct * fix: some bugs * fix: typo * test: remove test_udaf_returning_struct_subquery * feat: column support for list with single index * fix: list index does not support with columns * fix: proto * fix: proto test * fix: clippy * fix: test_udaf_returning_struct_subquery
1 parent 02da044 commit 2354758

File tree

29 files changed

+1979
-597
lines changed

29 files changed

+1979
-597
lines changed

datafusion/core/src/physical_planner.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,28 @@ fn create_physical_name(e: &Expr, is_first_expr: bool) -> Result<String> {
181181
let expr = create_physical_name(expr, false)?;
182182
Ok(format!("{expr} IS NOT UNKNOWN"))
183183
}
184-
Expr::GetIndexedField(GetIndexedField { key, expr }) => {
184+
Expr::GetIndexedField(GetIndexedField {
185+
key,
186+
extra_key,
187+
expr,
188+
}) => {
185189
let expr = create_physical_name(expr, false)?;
186-
Ok(format!("{expr}[{key}]"))
190+
191+
if let (Some(list_key), Some(extra_key)) = (&key.list_key, extra_key) {
192+
let key = create_physical_name(list_key, false)?;
193+
let extra_key = create_physical_name(extra_key, false)?;
194+
Ok(format!("{expr}[{key}:{extra_key}]"))
195+
} else {
196+
let key = if let Some(list_key) = &key.list_key {
197+
create_physical_name(list_key, false)?
198+
} else if let Some(ScalarValue::Utf8(Some(struct_key))) = &key.struct_key
199+
{
200+
struct_key.to_string()
201+
} else {
202+
String::from("")
203+
};
204+
Ok(format!("{expr}[{key}]"))
205+
}
187206
}
188207
Expr::ScalarFunction(func) => {
189208
create_function_physical_name(&func.fun.to_string(), false, &func.args)

0 commit comments

Comments
 (0)