首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calcite SQL解析器-- SELECT语句根节点类型并不总是SqlSelect

Calcite SQL解析器-- SELECT语句根节点类型并不总是SqlSelect
EN

Stack Overflow用户
提问于 2019-09-03 05:19:51
回答 1查看 353关注 0票数 2

我有一个简单的应用程序,它对SELECT语句的WHERE子句中的文字进行文本替换。我运行SqlParser.parseQuery()并对结果应用.getWhere()。

但是,对于以下查询,根节点不是SqlSelect,而是SqlOrderBy:

代码语言:javascript
复制
select EventID, Subject
from WorkOrder
where OwnerID = 100 and Active = 1 and Type = 2
order by Subject

如果我们使用"group by“而不是"order by”,那么根目录就是一个SqlSelect。

这是有意为之的行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 03:45:53

是的,这是故意的。ORDER BY实际上不是SELECT的一个子句。考虑一下

代码语言:javascript
复制
SELECT deptno FROM Emp
UNION
SELECT deptno FROM Dept
ORDER BY 1

ORDER BY子句适用于整个UNION,而不是第二个SELECT。因此,我们将其设置为独立节点。

当您请求Calcite解析查询时,返回的顶级节点可以是SqlSelect (SELECT)、SqlOrderBy (ORDER BY)、SqlBasicCall (UNIONINTERSECTEXCEPTVALUES)或SqlWith (WITH)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57762782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档