参数化查询无法正确使用索引 #5939
Labels
affects/none
PR/issue: this bug affects none version.
severity/none
Severity of bug
type/bug
Type: something is unexpected
Describe the bug (required)
正常情况下,以下两种查询应该有相同的行为
在使用参数化查询代替字符串查询后,形如
MATCH(v:player{name:$s}) RETURN v
的查询无法正确使用索引查看执行计划可以发现.并未构造出带PREFIX查询的indexCtx
Your Environments (required)
x86_64 GNU/Linux
g++ (GCC) 11.2.0
Intel(R) Xeon(R) Gold 6138T CPU
cdeab593e39416959f254ab18085ca17ac96ad19
)How To Reproduce(required)
Steps to reproduce the behavior:
1.使用NebulaGraph Console载入数据
2.保存参数
Expected behavior
两个执行计划基本相同,都能使用PREFIX查询进行索引搜索
Additional context
该问题在我的此PR #5938 触发的tck测试中发现(parameter.feature),根据本人调试,其具体表现是在
src/graph/util/OptimizerUtils.cpp
文件中以下部分在此处调用
ExpressionUtils::rewriteParameter(filter, qctx)
时,会将表达式转换为一个错误的形式player.name==__EMPTY__
,然后在尝试构造columnHints
时产生错误在形如
MATCH(v:player) WHERE v.player.name ==$s RETURN v
的查询中,该表达式在传入该模块前就会被正确转换,故不会产生此问题The text was updated successfully, but these errors were encountered: