You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by GitBox <gi...@apache.org> on 2022/03/29 14:20:33 UTC

[GitHub] [arrow-datafusion] alamb opened a new issue #2117: `panic` `range end index 3 out of range for slice of length 2` when evaluating CASE expression

alamb opened a new issue #2117:
URL: https://github.com/apache/arrow-datafusion/issues/2117


   **Describe the bug**
   
   Running certain queries with `CASE` expressions will result in an error such as:
   ```
   thread 'main' panicked at 'range end index 3 out of range for slice of length 2', /Users/alamb/.cargo/registry/src/github.com-1ecc6299db9ec823/arrow-11.0.0/src/array/transform/primitive.rs:31:37
   note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
   ```
   
   @yjshen  basically has identified the issue here: https://github.com/influxdata/influxdb_iox/pull/4148#issuecomment-1081563527 related to Nulls and `SlicesIter`
   
   **To Reproduce**
   ```rust
   use std::sync::Arc;
   
   use datafusion::{arrow::{array::{ArrayRef, Float64Array, Array, ArrayDataBuilder}, util::pretty, record_batch::RecordBatch, buffer::Buffer}, prelude::*, datasource::MemTable};
   
   
   #[tokio::main]
   async fn main() {
       println!("Starting tests");
   
       // Construct an array that has several NULL values whose
       // underlying buffer actually matches the where expr predicate
       let load4: Float64Array = vec![
           Some(1.77), // 1.77
           Some(1.77), // null <-- matching, but will be set to null
           Some(1.77), // null <-- matching, but will be set to null
           Some(1.78), // 1.78
           None,       // null
           Some(1.77), // 1.77
       ].into_iter()
           .collect();
   
       let null_buffer = Buffer::from_slice_ref(&[0b00101001u8]);
       let load4 = ArrayDataBuilder::new(load4.data_type().clone())
           .len(load4.len())
           .null_bit_buffer(null_buffer)
           .buffers(load4.data().buffers().to_vec())
           .build()
           .unwrap();
       let load4: Float64Array = load4.into();
   
       let batch = RecordBatch::try_from_iter(vec![
           ("load4", Arc::new(load4) as ArrayRef),
       ]).unwrap();
   
       let config = SessionConfig::new();
       let ctx = SessionContext::with_config(config);
   
       let table = MemTable::try_new(batch.schema(), vec![vec![batch]]).unwrap();
       ctx.register_table("foo", Arc::new(table)).unwrap();
   
   
       let df = ctx.sql("SELECT * FROM foo").await.expect("sql");
       let batches = df.collect().await.expect("execute");
       pretty::print_batches(&batches).unwrap();
   
   
       // this panic's
       // thread 'main' panicked at 'range end index 3 out of range for slice of length 2', /Users/alamb/.cargo/registry/src/github.com-1ecc6299db9ec823/arrow-11.0.0/src/array/transform/primitive.rs:31:37
       let df = ctx.sql("SELECT CASE WHEN load4 = 1.77 THEN load4 END as load4 FROM foo").await.expect("sql");
       let batches = df.collect().await.expect("execute");
       pretty::print_batches(&batches).unwrap();
   }
   ```
   
   results in 
   
   **Expected behavior**
   
   This output should be produced
   
   ```
   1.77
   NULL
   NULL
   NULL
   NULL
   1.77
   ```
   
   
   **Additional context**
   Very likely introduced by https://github.com/apache/arrow-datafusion/pull/2068
   
   Found by the IOx test suite here: https://github.com/influxdata/influxdb_iox/pull/4148
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [arrow-datafusion] alamb closed issue #2117: `panic` `range end index 3 out of range for slice of length 2` when evaluating CASE expression

Posted by GitBox <gi...@apache.org>.
alamb closed issue #2117:
URL: https://github.com/apache/arrow-datafusion/issues/2117


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org