我有一个简单的应用程序,它对SELECT语句的WHERE子句中的文字进行文本替换。我运行SqlParser.parseQuery()并对结果应用.getWhere()。
但是,对于以下查询,根节点不是SqlSelect,而是SqlOrderBy:
select EventID, Subject
from WorkOrder
where OwnerID = 100 and Active = 1 and Type = 2
order by Subject如果我们使用"group by“而不是"order by”,那么根目录就是一个SqlSelect。
这是有意为之的行为吗?
发布于 2019-09-05 03:45:53
是的,这是故意的。ORDER BY实际上不是SELECT的一个子句。考虑一下
SELECT deptno FROM Emp
UNION
SELECT deptno FROM Dept
ORDER BY 1ORDER BY子句适用于整个UNION,而不是第二个SELECT。因此,我们将其设置为独立节点。
当您请求Calcite解析查询时,返回的顶级节点可以是SqlSelect (SELECT)、SqlOrderBy (ORDER BY)、SqlBasicCall (UNION、INTERSECT、EXCEPT或VALUES)或SqlWith (WITH)。
https://stackoverflow.com/questions/57762782
复制相似问题