关于Apache AGE中path与edge可排序性的矛盾行为问询
Apache AGE中Path与Edge类型比较的矛盾结果分析
问题现象
在测试Apache AGE的agtype中Path与Edge的可排序性时,出现了违反比较基本逻辑的异常行为:
- 执行
p > e比较Path与Edge时,所有结果均为true:
test=# SELECT * FROM cypher('test', $$ WITH [{id: 0, label: "label_name_1", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "edge_label", properties: {i: 0}}::edge, {id: 1, label: "label_name_2", properties: {}}::vertex ]::path as p MATCH (n)-[e]-(m) RETURN p>e $$) AS (e agtype); e ------ true true true true (4 rows)
- 执行
p < e比较时,所有结果均为false:
test=# SELECT * FROM cypher('test', $$ WITH [{id: 0, label: "label_name_1", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "edge_label", properties: {i: 0}}::edge, {id: 1, label: "label_name_2", properties: {}}::vertex ]::path as p MATCH (n)-[e]-(m) RETURN p<e $$) AS (e agtype); e ------- false false false false (4 rows)
- 调换比较顺序后,
e > p仍全部返回true,e < p仍全部返回false——这完全违背比较逻辑的基本规则:若p > e为真,则e > p必然为假,反之亦然。
结论:这是一个Bug
这种行为不是预期行为,属于Apache AGE的类型比较逻辑实现缺陷。
agtype的不同类型比较需遵循明确的优先级判定规则,且必须满足比较的自反性要求。当前Path与Edge的比较结果完全破坏了这一逻辑,说明类型比较的实现代码中存在错误,没有正确区分两种类型的比较优先级或判定逻辑。
建议在Apache AGE官方Issue仓库提交该问题,并附带上述测试用例,帮助开发团队定位修复。
内容的提问来源于stack exchange,提问作者Bhaskar Sharma
相关产品推荐
相关产品推荐

