Skip to content

Commit 79759f1

Browse files
committed
functionality and tests
1 parent e1d4069 commit 79759f1

2 files changed

Lines changed: 76 additions & 0 deletions

File tree

datafusion/core/tests/sql/expr.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,70 @@ async fn query_is_not_null() -> Result<()> {
317317
Ok(())
318318
}
319319

320+
#[tokio::test]
321+
async fn query_is_true() -> Result<()> {
322+
let schema = Arc::new(Schema::new(vec![Field::new("c1", DataType::Boolean, true)]));
323+
324+
let data = RecordBatch::try_new(
325+
schema.clone(),
326+
vec![Arc::new(BooleanArray::from(vec![
327+
Some(true),
328+
Some(false),
329+
None,
330+
]))],
331+
)?;
332+
333+
let table = MemTable::try_new(schema, vec![vec![data]])?;
334+
335+
let ctx = SessionContext::new();
336+
ctx.register_table("test", Arc::new(table))?;
337+
let sql = "SELECT c1 IS TRUE as t FROM test";
338+
let actual = execute_to_batches(&ctx, sql).await;
339+
let expected = vec![
340+
"+-------+",
341+
"| t |",
342+
"+-------+",
343+
"| true |",
344+
"| false |",
345+
"| false |",
346+
"+-------+",
347+
];
348+
assert_batches_eq!(expected, &actual);
349+
Ok(())
350+
}
351+
352+
#[tokio::test]
353+
async fn query_is_false() -> Result<()> {
354+
let schema = Arc::new(Schema::new(vec![Field::new("c1", DataType::Boolean, true)]));
355+
356+
let data = RecordBatch::try_new(
357+
schema.clone(),
358+
vec![Arc::new(BooleanArray::from(vec![
359+
Some(true),
360+
Some(false),
361+
None,
362+
]))],
363+
)?;
364+
365+
let table = MemTable::try_new(schema, vec![vec![data]])?;
366+
367+
let ctx = SessionContext::new();
368+
ctx.register_table("test", Arc::new(table))?;
369+
let sql = "SELECT c1 IS FALSE as f FROM test";
370+
let actual = execute_to_batches(&ctx, sql).await;
371+
let expected = vec![
372+
"+-------+",
373+
"| f |",
374+
"+-------+",
375+
"| false |",
376+
"| true |",
377+
"| false |",
378+
"+-------+",
379+
];
380+
assert_batches_eq!(expected, &actual);
381+
Ok(())
382+
}
383+
320384
#[tokio::test]
321385
async fn query_without_from() -> Result<()> {
322386
// Test for SELECT <expression> without FROM.

datafusion/sql/src/planner.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1944,6 +1944,18 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
19441944
right: Box::new(self.sql_expr_to_logical_expr(*right, schema, ctes)?),
19451945
}),
19461946

1947+
SQLExpr::IsTrue(expr) => Ok(Expr::BinaryExpr {
1948+
left: Box::new(self.sql_expr_to_logical_expr(*expr, schema, ctes)?),
1949+
op: Operator::IsNotDistinctFrom,
1950+
right: Box::new(lit(true)),
1951+
}),
1952+
1953+
SQLExpr::IsFalse(expr) => Ok(Expr::BinaryExpr {
1954+
left: Box::new(self.sql_expr_to_logical_expr(*expr, schema, ctes)?),
1955+
op: Operator::IsNotDistinctFrom,
1956+
right: Box::new(lit(false)),
1957+
}),
1958+
19471959

19481960
SQLExpr::UnaryOp { op, expr } => self.parse_sql_unary_op(op, *expr, schema, ctes),
19491961

0 commit comments

Comments
 (0)