Skip to content

Commit

Permalink
Error handling in Expression::eval (vesoft-inc#669)
Browse files Browse the repository at this point in the history
*     Issue#424 to make `Expression::eval` to be able to do error handling.

    Summary:

    1. When the expression is evaluated, some wrong judgments are added,
       ifthe expression was failed, an error will be replyed to the user.

    2 fixed the crash when using mockStorageServer.

* 1 reformat the code.
2 Handled some errors.
  • Loading branch information
monadbobo authored and dutor committed Aug 12, 2019
1 parent 23c975e commit 78d0d75
Show file tree
Hide file tree
Showing 15 changed files with 482 additions and 240 deletions.
244 changes: 146 additions & 98 deletions src/common/filter/Expressions.cpp

Large diffs are not rendered by default.

47 changes: 24 additions & 23 deletions src/common/filter/Expressions.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
namespace nebula {

class Cord;
using OptVariantType = StatusOr<VariantType>;

enum ColumnType {
INT, STRING, DOUBLE, BIGINT, BOOL, TIMESTAMP,
Expand Down Expand Up @@ -88,12 +89,12 @@ class ExpressionContext final {
}

struct Getters {
std::function<VariantType()> getEdgeRank;
std::function<VariantType(const std::string&)> getInputProp;
std::function<VariantType(const std::string&)> getVariableProp;
std::function<VariantType(const std::string&, const std::string&)> getSrcTagProp;
std::function<VariantType(const std::string&, const std::string&)> getDstTagProp;
std::function<VariantType(const std::string&, const std::string&)> getAliasProp;
std::function<OptVariantType()> getEdgeRank;
std::function<OptVariantType(const std::string&)> getInputProp;
std::function<OptVariantType(const std::string&)> getVariableProp;
std::function<OptVariantType(const std::string&, const std::string&)> getSrcTagProp;
std::function<OptVariantType(const std::string&, const std::string&)> getDstTagProp;
std::function<OptVariantType(const std::string&, const std::string&)> getAliasProp;
};

Getters& getters() {
Expand Down Expand Up @@ -125,7 +126,7 @@ class Expression {

virtual Status MUST_USE_RESULT prepare() = 0;

virtual VariantType eval() const = 0;
virtual OptVariantType eval() const = 0;

virtual bool isInputExpression() const {
return kind_ == kInputProp;
Expand Down Expand Up @@ -297,7 +298,7 @@ class AliasPropertyExpression: public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -333,7 +334,7 @@ class InputPropertyExpression final : public AliasPropertyExpression {
prop_.reset(prop);
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -358,7 +359,7 @@ class DestPropertyExpression final : public AliasPropertyExpression {
prop_.reset(prop);
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -383,7 +384,7 @@ class VariablePropertyExpression final : public AliasPropertyExpression {
prop_.reset(prop);
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -408,7 +409,7 @@ class EdgeTypeExpression final : public AliasPropertyExpression {
prop_.reset(new std::string("_type"));
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -433,7 +434,7 @@ class EdgeSrcIdExpression final : public AliasPropertyExpression {
prop_.reset(new std::string("_src"));
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -458,7 +459,7 @@ class EdgeDstIdExpression final : public AliasPropertyExpression {
prop_.reset(new std::string("_dst"));
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -483,7 +484,7 @@ class EdgeRankExpression final : public AliasPropertyExpression {
prop_.reset(new std::string("_rank"));
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand All @@ -508,7 +509,7 @@ class SourcePropertyExpression final : public AliasPropertyExpression {
prop_.reset(prop);
}

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -548,7 +549,7 @@ class PrimaryExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -594,7 +595,7 @@ class FunctionCallExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -637,7 +638,7 @@ class UnaryExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -676,7 +677,7 @@ class TypeCastingExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -725,7 +726,7 @@ class ArithmeticExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -776,7 +777,7 @@ class RelationalExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down Expand Up @@ -828,7 +829,7 @@ class LogicalExpression final : public Expression {

std::string toString() const override;

VariantType eval() const override;
OptVariantType eval() const override;

Status MUST_USE_RESULT prepare() override;

Expand Down
Loading

0 comments on commit 78d0d75

Please sign in to comment.