tugraph-analytics
tugraph-analytics copied to clipboard
Added implementation of standard ISO-GQL syntax(5):same predicate
【需求描述】 新增实现以下标准ISO-GQL语法:
- same predicate
【期望产出】
- 支持实现上述语法,同时提供并跑通测试用例。
如有疑问请联系: @puuuuug
当前现状分析
Apache GeaFlow已经具备了GQL查询语言的基础架构,包括基于Apache Calcite的解析器实现和图模式匹配功能。
现有的架构包括:
- 基本的Match模式语法支持
- SqlUnionPathPattern用于路径模式的联合操作
- 基于Apache Calcite的GeaFlowDSLParser解析器
实现方案
1. 语法扩展设计
需要在现有的Match语法基础上扩展"same predicate"功能,支持在多个路径模式中使用相同的谓词条件。根据现有的Match语法结构 ,建议扩展语法如下:
MATCH PathPattern1 | PathPattern2 WHERE SAME(predicate_condition)
2. 核心组件实现
2.1 AST节点扩展
需要扩展现有的SQL节点类来支持same predicate语法:
- 基于现有的SqlUnionPathPattern创建SqlSamePredicatePattern类
- 扩展现有的SqlMatchPattern以支持same predicate条件
2.2 解析器扩展
需要在GeaFlowDSLParser中添加same predicate的语法规则:
- 扩展lexical规则识别SAME关键字
- 添加语法规则处理same predicate结构
- 更新GQL conformance规则
2.3 验证器实现
需要在GQLValidatorImpl中添加same predicate的验证逻辑:
- 验证predicate条件的合法性
- 确保相同谓词在不同路径模式中的兼容性
- 类型检查和作用域验证
2.4 关系代数转换
需要在GQLToRelConverter中实现same predicate到关系代数的转换:
- 将same predicate条件提取为公共过滤条件
- 生成适当的关系代数操作符
- 优化生成的查询计划
3. 详细实现步骤
第一阶段:语法解析支持
- 在geaflow-dsl-parser模块中:
- 扩展GeaFlowParserImpl添加same predicate语法
- 创建SqlSamePredicatePattern AST节点类
- 更新GQLConformance配置
第二阶段:语义验证
- 在geaflow-dsl-plan模块中:
- 扩展GQLValidatorImpl添加same predicate验证
- 创建相应的namespace类处理作用域
- 实现类型推导和兼容性检查
第三阶段:执行计划生成
- 在geaflow-dsl-plan模块中:
- 扩展GQLToRelConverter处理same predicate转换
- 创建对应的关系代数操作符
- 实现查询优化规则
第四阶段:测试用例开发
- 在geaflow-dsl-parser的test模块中:
- 创建SamePredicateSyntaxTest测试类
- 添加各种same predicate语法的测试用例
- 在IsoGqlSyntaxTest中增加相关测试
4. 测试用例设计
以下测试场景:
-- 基础same predicate测试
MATCH (a:person) -> (b) | (a:person) -> (c) WHERE SAME(a.age > 25)
-- 复杂条件测试
MATCH (a) -[e1:knows]-> (b) | (a) -[e2:likes]-> (c) WHERE SAME(e1.weight = e2.weight)
-- 嵌套路径测试
MATCH ((a) -> (b) -> (c)) | ((a) -> (d) -> (e)) WHERE SAME(a.status = 'active')