apache calcite源码阅读(二)org.apache.calcite.sql下的`SqlSelect` 类解析

`SqlSelect` 类,继承自 `SqlCall` 类。`SqlSelect` 类表示一个 SQL SELECT 查询语句的语法树节点。下面是每个方法的解释:

1. `public SqlSelect(SqlParserPos pos, SqlNodeList keywordList, SqlNodeList selectList, SqlNode from, SqlNode where, SqlNodeList groupBy, SqlNode having, SqlNodeList windowDecls, SqlNodeList orderBy, SqlNode offset, SqlNode fetch)`: 这是 `SqlSelect` 类的构造方法,用于创建 `SqlSelect` 对象。它接受多个参数,包括语法树节点的位置信息和 SELECT 查询的各个部分(关键字、SELECT 列表、FROM 子句、WHERE 子句、GROUP BY 子句、HAVING 子句、窗口声明、ORDER BY 子句、OFFSET 子句和 FETCH 子句)。

2. `public SqlOperator getOperator()`:返回一个 `SqlOperator` 对象,用于表示 `SqlSelect` 对象的运算符。

3. `public SqlKind getKind()`:返回一个 `SqlKind` 枚举值,表示该对象的类型为 `SqlKind.SELECT`,即表示 SELECT 查询。

4. `public List<SqlNode> getOperandList()`:返回一个包含所有操作数的列表,这些操作数包括关键字列表、选择列表、FROM 子句、WHERE 子句、GROUP BY 子句、HAVING 子句、窗口声明、ORDER BY 子句、OFFSET 子句和 FETCH 子句。

5. `setOperand(int i, @Nullable SqlNode operand)` 方法:根据给定的索引 `i`,设置相应位置上的操作数为指定的 `operand`。

6. `public final boolean isDistinct()`:检查查询是否使用了 DISTINCT 关键字来去重。

7. `public final SqlNode getModifierNode(SqlSelectKeyword modifier)`: 获取指定的修饰符节点。修饰符节点是指 SELECT 查询中的关键字节点,如 DISTINCT、ALL 等。

8. `public final SqlNode getFrom()`: 获取 FROM 子句中指定的节点。

9. `public void setFrom(@Nullable SqlNode from)` 方法:设置 FROM 子句的节点。

10. `public final SqlNodeList getGroup()` 方法:获取 GROUP BY 子句中指定的节点列表。

11. `public void setGroupBy(@Nullable SqlNodeList groupBy)` 方法:设置 GROUP BY 子句的节点列表。

12. `public final SqlNode getHaving()` 方法:获取 HAVING 子句中指定的节点。

13. `public void setHaving(@Nullable SqlNode having)` 方法:设置 HAVING 子句的节点。

14. `public final SqlNodeList getSelectList()` 方法:获取 SELECT 子句中指定的节点列表。

15. `public void setSelectList(SqlNodeList selectList)` 方法:设置 SELECT 子句的节点列表。

16. `public final SqlNode getWhere()` 方法:获取 WHERE 子句中指定的节点。

17. `public void setWhere(@Nullable SqlNode whereClause)` 方法:设置 WHERE 子句的节点。

18. `public final SqlNodeList getWindowList()` 方法:获取窗口声明的节点列表。

19. `public final SqlNodeList getOrderList()` 方法:获取 ORDER BY 子句中指定的节点列表。

20. `public void setOrderBy(@Nullable SqlNodeList orderBy)` 方法:设置 ORDER BY 子句的节点列表。

21. `public final SqlNode getOffset()` 方法:获取 OFFSET 子句中指定的节点。

22. `public void setOffset(@Nullable SqlNode offset)` 方法:设置 OFFSET 子句的节点。

23. `public final SqlNode getFetch()` 方法:获取 FETCH 子句中指定的节点。

24. `public void setFetch(@Nullable SqlNode fetch)` 方法:设置 FETCH 子句的节点。

25. `public void setHints(@Nullable SqlNodeList hints)` 方法:设置提示列表的节点。

26. `public SqlNodeList getHints()` 方法:获取提示列表的节点列表。

27. `public boolean hasHints()` 方法:检查是否存在提示列表。

28. `public void validate (SqlValidator validator, SqlValidatorScope scope)` 方法:通过给定的验证器和作用域验证查询。

29.`public void unparse(SqlWriter writer, int leftPrec, int rightPrec)` 方法:将查询解析为字符串并写入给定的 `SqlWriter`。

30.`public boolean hasOrderBy()` 方法:检查是否存在 ORDER BY 子句。

31. `public boolean hasWhere()` 方法:检查是否存在 WHERE 子句。

32.`public boolean isKeywordPresent(SqlSelectKeyword targetKeyWord)` 方法:检查是否存在指定的关键字。

这些方法用于操作和访问 `SqlSelect` 对象的各个部分,包括关键字列表、子句节点、选择列表等。它们提供了对查询对象的属性和结构进行操作和查询的能力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值