# calcite-sql **Repository Path**: gptaobao001/calcite-sql ## Basic Information - **Project Name**: calcite-sql - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-18 - **Last Updated**: 2024-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 语法分析器 #### Calcite SQL 解析、语法扩展、元数据验证原理与实战 https://zhuanlan.zhihu.com/p/605156292?utm_id=0 #### Calcite SQL 校验源码分析 https://segmentfault.com/a/1190000040931285?utm_source=sf-similar-article https://blog.csdn.net/QXC1281/article/details/90343560 https://huaweicloud.csdn.net/63356e02d3efff3090b56947.html #### git仓库 https://github.com/quxiucheng/apache-calcite-tutorial/tree/master/calcite-tutorial-4-validator/validator-1-calcite-validator #### 报错信息 1. 函数【函数名】参数不合法 2. 列名【列名】无效 #### SqlValidator 接口方法 SqlValidator 接口定义了许多方法,用于在 SQL 解析和校验过程中执行各种校验操作。以下是 SqlValidator 接口中常用方法的作用: validate(SqlNode):对给定的 SqlNode(通常是一个 SQL 语句)进行校验,包括语法、语义、数据类型等方面的检查。 getCatalogReader():获取用于访问数据库元数据(表、视图、函数等)的 CatalogReader 对象。 getOperatorTable():获取用于解析和校验 SQL 中的运算符的 OperatorTable 对象。 getConformance():获取 SQL 校验器所使用的规范(Conformance)。 getTypeFactory():获取用于创建和操作 SQL 数据类型的 JavaTypeFactory 对象。 getScope():获取当前 SQL 上下文中的作用域对象,用于查找和维护 SQL 对象的命名空间。 getNamespace(SqlNode):获取给定 SqlNode 对应的命名空间对象,用于获取相关的元数据信息。 validateNamespace(SqlNode, SqlValidatorScope):对给定 SqlNode 在指定作用域下的命名空间进行校验。 validateQuery(SqlNode, SqlValidatorScope):对给定的查询 SqlNode 进行校验,包括 SELECT、FROM、WHERE 等子句的校验。 validateJoin(SqlNode, SqlValidatorScope, SqlValidatorScope):对 JOIN 操作进行校验,包括校验连接条件、表别名、列重复等。 validateWindow(SqlNode, SqlValidatorScope):对 WINDOW 子句进行校验,包括窗口函数的定义和使用。 validateCall(SqlCall, SqlValidatorScope):对 SQL 函数调用进行校验,包括函数存在性、参数个数、参数类型等。 validateLiteral(SqlLiteral):对字面量进行校验,包括数据类型、范围、语法规则等检查。 validateIdentifier(SqlIdentifier):对标识符(表名、列名等)进行校验,包括是否存在、是否重复、大小写敏感等检查。 validateColumnListParams(SqlNodeList, SqlValidatorScope):对列列表进行校验,包括列是否存在、列重复、列别名等检查。