Skip to content

Commit

Permalink
Fix the crash when lookup parameter expression eval in storage #5336
Browse files Browse the repository at this point in the history
  • Loading branch information
czpmango authored and Sophie-Xie committed Mar 4, 2023
1 parent db3c1b3 commit 9fcbe5b
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 4 deletions.
3 changes: 3 additions & 0 deletions src/graph/validator/LookupValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,9 @@ Status LookupValidator::validateWhere() {
}

auto* filter = whereClause->filter();
if (filter != nullptr) {
filter = graph::ExpressionUtils::rewriteParameter(filter, qctx_);
}
if (FTIndexUtils::needTextSearch(filter)) {
lookupCtx_->isFulltextIndex = true;
lookupCtx_->fulltextExpr = filter;
Expand Down
4 changes: 1 addition & 3 deletions src/storage/ExprVisitorBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,7 @@ void ExprVisitorBase::visit(SubscriptExpression *expr) {
expr->left()->accept(this);
expr->right()->accept(this);
}
void ExprVisitorBase::visit(AttributeExpression *expr) {
fatal(expr);
}
void ExprVisitorBase::visit(AttributeExpression *) {}
void ExprVisitorBase::visit(LogicalExpression *expr) {
for (auto operand : expr->operands()) {
operand->accept(this);
Expand Down
79 changes: 78 additions & 1 deletion tests/tck/features/yield/parameter.feature
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ Feature: Parameter
"""
LOOKUP ON player WHERE player.age>$p2+43
"""
Then a SemanticError should be raised at runtime: Column type error : age
Then a SemanticError should be raised at runtime: Type error `(true+43)'
When executing query:
"""
MATCH (v:player) RETURN v LIMIT $p6
Expand Down Expand Up @@ -330,3 +330,80 @@ Feature: Parameter
| v |
| BAD_TYPE |
| BAD_TYPE |
<<<<<<< HEAD
=======
Scenario: [param-test-013] DML
Given an empty graph
And load "nba" csv data to a new space
When executing query:
"""
insert vertex player(name, age) values "1":($p6.c, $p1+40)
"""
Then the execution should be successful
When executing query:
"""
insert vertex player(age, name) values "1":($p6.c, $p1+40)
"""
Then a ExecutionError should be raised at runtime: Storage Error: The data type does not meet the requirements. Use the correct type of data.
When executing query:
"""
insert edge like(likeness) values "1"->"2":($p1+40)
"""
Then the execution should be successful
When executing query:
"""
insert edge like(likeness) values "1"->"2":($p6.c)
"""
Then a ExecutionError should be raised at runtime: Storage Error: The data type does not meet the requirements. Use the correct type of data.
When executing query:
"""
update vertex on player "1" set age=age+$p1 when age>$p1
"""
Then the execution should be successful
When executing query:
"""
update vertex on player "1" set age=age+$p6.c when age>$p1
"""
Then a ExecutionError should be raised at runtime: Storage Error: Invalid data, may be wrong value type.
When executing query:
"""
update edge on like "1"->"2" set likeness=likeness+$p1
"""
Then the execution should be successful
When executing query:
"""
update edge on like "1"->"2" set likeness=likeness+$p6.c when likeness>300
"""
Then the execution should be successful
When executing query:
"""
update edge on like "1"->"2" set likeness=likeness+$p6.c when likeness<300
"""
Then a ExecutionError should be raised at runtime: Storage Error: Invalid data, may be wrong value type.
When executing query:
"""
update edge on like "1"->"2" set likeness=likeness+$p6.c when likeness>$p1
"""
Then a ExecutionError should be raised at runtime: Storage Error: Invalid data, may be wrong value type.
When executing query:
"""
update edge on like "1"->"2" set likeness=likeness+$p6.a when likeness>$p1
"""
Then the execution should be successful
When executing query:
"""
$var=lookup on player where player.name==$p6.c and player.age in [43,35,42,45] yield id(vertex) AS VertexID;DELETE VERTEX $var.VertexID;RETURN count($var.VertexID) AS record
"""
Then the execution should be successful
When executing query:
"""
$var=lookup on player where player.name==$p3 and player.age in [43,35,42,45] yield id(vertex) AS VertexID;DELETE VERTEX $var.VertexID;RETURN count($var.VertexID) AS record
"""
Then the execution should be successful
When executing query:
"""
$var=lookup on player where player.name==$p7.a.b.d[4] and player.age in [43,35,42,45] yield id(vertex) AS VertexID;DELETE VERTEX $var.VertexID;RETURN count($var.VertexID) AS record
"""
Then the execution should be successful
>>>>>>> c20467f19 (Fix the crash when lookup parameter expression eval in storage (#5336))

0 comments on commit 9fcbe5b

Please sign in to comment.