我有一个简单的应用程序,它对SELECT语句的WHERE子句中的文字进行文本替换。我运行SqlParser.parseQuery()并将.getWhere()应用于结果。
但是,对于以下查询,根节点不是SqlSelect,而是SqlOrderBy:
select EventID, Subject
from WorkOrder
where OwnerID = 100 and Active = 1 and Type = 2
order by Subject
如果我们使用“分组依据”而不是“排序依据”,则根目录是预期的SqlSelect。
这是预期的行为吗?
答案 0 :(得分:0)
是的,这是有意的。 ORDER BY
并不是SELECT
的子句。考虑
SELECT deptno FROM Emp
UNION
SELECT deptno FROM Dept
ORDER BY 1
ORDER BY
子句适用于整个UNION
,而不适用于第二个SELECT
。因此,我们使其成为一个独立的节点。
当您要求方解石解析查询时,返回的顶级节点可以是SqlSelect
(SELECT
),SqlOrderBy
(ORDER BY
),{{1 }}(SqlBasicCall
,UNION
,INTERSECT
或EXCEPT
)或VALUES
(SqlWith
)。