Skip to content

Commit ae11339

Browse files
committed
Add two tests for indexed_field access, level one and level two nesting
1 parent 8bbe421 commit ae11339

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

datafusion/tests/sql.rs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4826,3 +4826,88 @@ async fn avro_explain() {
48264826
];
48274827
assert_eq!(expected, actual);
48284828
}
4829+
4830+
#[tokio::test]
4831+
async fn query_get_indexed_field() -> Result<()> {
4832+
let mut ctx = ExecutionContext::new();
4833+
let schema = Arc::new(Schema::new(vec![Field::new(
4834+
"some_list",
4835+
DataType::List(Box::new(Field::new("item", DataType::Int64, true))),
4836+
false,
4837+
)]));
4838+
let builder = PrimitiveBuilder::<Int64Type>::new(3);
4839+
let mut lb = ListBuilder::new(builder);
4840+
for int_vec in vec![
4841+
vec![0 as i64, 1, 2],
4842+
vec![4 as i64, 5, 6],
4843+
vec![7 as i64, 8, 9],
4844+
] {
4845+
let builder = lb.values();
4846+
for int in int_vec {
4847+
builder.append_value(int);
4848+
}
4849+
lb.append(true);
4850+
}
4851+
4852+
let data = RecordBatch::try_new(schema.clone(), vec![Arc::new(lb.finish())])?;
4853+
let table = MemTable::try_new(schema, vec![vec![data]])?;
4854+
let table_a = Arc::new(table);
4855+
4856+
ctx.register_table("ints", table_a)?;
4857+
4858+
// Original column is micros, convert to millis and check timestamp
4859+
let sql = "SELECT some_list[0] as i0 FROM ints LIMIT 3";
4860+
let actual = execute(&mut ctx, sql).await;
4861+
let expected = vec![vec!["0"], vec!["4"], vec!["7"]];
4862+
assert_eq!(expected, actual);
4863+
Ok(())
4864+
}
4865+
4866+
#[tokio::test]
4867+
async fn query_nested_get_indexed_field() -> Result<()> {
4868+
let mut ctx = ExecutionContext::new();
4869+
let schema = Arc::new(Schema::new(vec![Field::new(
4870+
"some_list",
4871+
DataType::List(Box::new(Field::new(
4872+
"item",
4873+
DataType::List(Box::new(Field::new("item", DataType::Int64, true))),
4874+
true,
4875+
))),
4876+
false,
4877+
)]));
4878+
let builder = PrimitiveBuilder::<Int64Type>::new(3);
4879+
let nested_lb = ListBuilder::new(builder);
4880+
let mut lb = ListBuilder::new(nested_lb);
4881+
for int_vec_vec in vec![
4882+
vec![vec![0 as i64, 1], vec![2, 3], vec![3, 4]],
4883+
vec![vec![5 as i64, 6], vec![7, 8], vec![9, 10]],
4884+
vec![vec![11 as i64, 12], vec![13, 14], vec![15, 16]],
4885+
] {
4886+
let nested_builder = lb.values();
4887+
for int_vec in int_vec_vec {
4888+
let mut builder = nested_builder.values();
4889+
for int in int_vec {
4890+
builder.append_value(int);
4891+
}
4892+
nested_builder.append(true);
4893+
}
4894+
lb.append(true);
4895+
}
4896+
4897+
let data = RecordBatch::try_new(schema.clone(), vec![Arc::new(lb.finish())])?;
4898+
let table = MemTable::try_new(schema, vec![vec![data]])?;
4899+
let table_a = Arc::new(table);
4900+
4901+
ctx.register_table("ints", table_a)?;
4902+
4903+
// Original column is micros, convert to millis and check timestamp
4904+
let sql = "SELECT some_list[0] as i0 FROM ints LIMIT 3";
4905+
let actual = execute(&mut ctx, sql).await;
4906+
let expected = vec![vec!["[0, 1]"], vec!["[5, 6]"], vec!["[11, 12]"]];
4907+
assert_eq!(expected, actual);
4908+
let sql = "SELECT some_list[0][0] as i0 FROM ints LIMIT 3";
4909+
let actual = execute(&mut ctx, sql).await;
4910+
let expected = vec![vec!["0"], vec!["5"], vec!["11"]];
4911+
assert_eq!(expected, actual);
4912+
Ok(())
4913+
}

0 commit comments

Comments
 (0)