Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions datafusion/sql/src/expr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ use datafusion_expr::planner::{
};
use sqlparser::ast::{
AccessExpr, BinaryOperator, CastFormat, CastKind, DataType as SQLDataType,
DictionaryField, Expr as SQLExpr, ExprWithAlias as SQLExprWithAlias, MapEntry,
StructField, Subscript, TrimWhereField, Value, ValueWithSpan,
DictionaryField, Expr as SQLExpr, ExprWithAlias as SQLExprWithAlias,
FunctionArguments, MapEntry, StructField, Subscript, TrimWhereField, Value,
ValueWithSpan,
};

use datafusion_common::{
Expand Down Expand Up @@ -476,7 +477,21 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
),

SQLExpr::Function(function) => {
self.sql_function_to_expr(function, schema, planner_context)
// workaround for https://github.com/apache/datafusion-sqlparser-rs/issues/1909
if matches!(function.args, FunctionArguments::None)
&& function.name.0.len() > 1
&& function.name.0.iter().all(|part| part.as_ident().is_some())
{
let ids = function
.name
.0
.iter()
.map(|part| part.as_ident().expect("just checked").clone())
.collect();
self.sql_compound_identifier_to_expr(ids, schema, planner_context)
} else {
self.sql_function_to_expr(function, schema, planner_context)
}
}

SQLExpr::Rollup(exprs) => {
Expand Down
17 changes: 14 additions & 3 deletions datafusion/sqllogictest/test_files/select.slt
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ VALUES (1,2,3,4,5,6,7,8,9,10,11,12,13,NULL,'F',3.5)

# Test non-literal expressions in VALUES
query II
VALUES (1, CASE WHEN RANDOM() > 0.5 THEN 1 ELSE 1 END),
VALUES (1, CASE WHEN RANDOM() > 0.5 THEN 1 ELSE 1 END),
(2, CASE WHEN RANDOM() > 0.5 THEN 2 ELSE 2 END);
----
1 1
Expand Down Expand Up @@ -558,7 +558,7 @@ EXPLAIN SELECT * FROM ((SELECT column1 FROM foo) "T1" CROSS JOIN (SELECT column2
----
logical_plan
01)SubqueryAlias: F
02)--Cross Join:
02)--Cross Join:
03)----SubqueryAlias: T1
04)------TableScan: foo projection=[column1]
05)----SubqueryAlias: T2
Expand Down Expand Up @@ -1641,7 +1641,7 @@ query II
SELECT
CASE WHEN B.x > 0 THEN A.x / B.x ELSE 0 END AS value1,
CASE WHEN B.x > 0 AND B.y > 0 THEN A.x / B.x ELSE 0 END AS value3
FROM t AS A, (SELECT * FROM t WHERE x = 0) AS B;
FROM t AS A, (SELECT * FROM t WHERE x = 0) AS B;
----
0 0
0 0
Expand Down Expand Up @@ -1871,3 +1871,14 @@ select *, count(*) over() as ta from t;

statement count 0
drop table t;

# test "user" column
# See https://github.com/apache/datafusion/issues/14141
statement count 0
create table t_with_user(a int, user text) as values (1,'test'), (2,null);

query T
select t_with_user.user from t_with_user;
----
test
NULL