Skip to content
Snippets Groups Projects
Unverified Commit 5a56edfd authored by kyle.cao's avatar kyle.cao Committed by GitHub
Browse files

Support IS EMPTY (#809)


small change

add tck

add tck

revert

format

small change

rebase

rebase

fix tck

fix

Co-authored-by: default avatarYee <2520865+yixinglu@users.noreply.github.com>
parent 8c2451c1
No related branches found
No related tags found
No related merge requests found
......@@ -367,7 +367,7 @@ static constexpr size_t MAX_ABS_INTEGER = 9223372036854775808ULL;
%left KW_OR KW_XOR
%left KW_AND
%right KW_NOT
%left EQ NE LT LE GT GE REG KW_IN KW_NOT_IN KW_CONTAINS KW_NOT_CONTAINS KW_STARTS_WITH KW_ENDS_WITH KW_NOT_STARTS_WITH KW_NOT_ENDS_WITH KW_IS_NULL KW_IS_NOT_NULL
%left EQ NE LT LE GT GE REG KW_IN KW_NOT_IN KW_CONTAINS KW_NOT_CONTAINS KW_STARTS_WITH KW_ENDS_WITH KW_NOT_STARTS_WITH KW_NOT_ENDS_WITH KW_IS_NULL KW_IS_NOT_NULL KW_IS_EMPTY KW_IS_NOT_EMPTY
%left PLUS MINUS
%left STAR DIV MOD
%right NOT
......@@ -586,6 +586,12 @@ expression
| expression KW_IS_NOT_NULL {
$$ = new UnaryExpression(Expression::Kind::kIsNotNull, $1);
}
| expression KW_IS_EMPTY {
$$ = new UnaryExpression(Expression::Kind::kIsEmpty, $1);
}
| expression KW_IS_NOT_EMPTY {
$$ = new UnaryExpression(Expression::Kind::kIsNotEmpty, $1);
}
| expression EQ expression {
$$ = new RelationalExpression(Expression::Kind::kRelEQ, $1, $3);
}
......
......@@ -32,6 +32,8 @@ ENDS_WITH (ENDS{blanks}WITH)
NOT_ENDS_WITH (NOT{blanks}ENDS{blanks}WITH)
IS_NULL (IS{blanks}NULL)
IS_NOT_NULL (IS{blanks}NOT{blanks}NULL)
IS_EMPTY (IS{blanks}EMPTY)
IS_NOT_EMPTY (IS{blanks}NOT{blanks}EMPTY)
LABEL ([a-zA-Z][_a-zA-Z0-9]*)
DEC ([0-9])
......@@ -213,6 +215,8 @@ IP_OCTET ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
{NOT_ENDS_WITH} { return TokenType::KW_NOT_ENDS_WITH;}
{IS_NULL} { return TokenType::KW_IS_NULL;}
{IS_NOT_NULL} { return TokenType::KW_IS_NOT_NULL;}
{IS_EMPTY} { return TokenType::KW_IS_EMPTY;}
{IS_NOT_EMPTY} { return TokenType::KW_IS_NOT_EMPTY;}
"UNWIND" { return TokenType::KW_UNWIND;}
"SKIP" { return TokenType::KW_SKIP;}
"OPTIONAL" { return TokenType::KW_OPTIONAL;}
......
......@@ -137,6 +137,14 @@ void DeduceTypeVisitor::visit(UnaryExpression *expr) {
type_ = Value::Type::BOOL;
break;
}
case Expression::Kind::kIsEmpty: {
type_ = Value::Type::BOOL;
break;
}
case Expression::Kind::kIsNotEmpty: {
type_ = Value::Type::BOOL;
break;
}
case Expression::Kind::kUnaryIncr: {
auto detectVal = kConstantValues.at(type_) + 1;
if (detectVal.isBadNull()) {
......
......@@ -67,7 +67,9 @@ void ExtractPropExprVisitor::visit(UnaryExpression* expr) {
case Expression::Kind::kUnaryNegate:
case Expression::Kind::kUnaryNot:
case Expression::Kind::kIsNull:
case Expression::Kind::kIsNotNull: {
case Expression::Kind::kIsNotNull:
case Expression::Kind::kIsEmpty:
case Expression::Kind::kIsNotEmpty: {
expr->operand()->accept(this);
break;
}
......
......@@ -306,6 +306,29 @@ Feature: Go Sentence
| EMPTY | "Bucks" | EMPTY |
| "Kobe Bryant" | EMPTY | EMPTY |
| "Marc Gasol" | EMPTY | EMPTY |
When executing query:
"""
GO FROM "Paul Gasol" OVER *
WHERE $$.player.name IS NOT EMPTY
YIELD like._dst
"""
Then the result should be, in any order, with relax comparison:
| like._dst |
| "Kobe Bryant" |
| "Marc Gasol" |
When executing query:
"""
GO FROM "Paul Gasol" OVER *
WHERE $$.player.name IS EMPTY
YIELD like._dst
"""
Then the result should be, in any order, with relax comparison:
| like._dst |
| EMPTY |
| EMPTY |
| EMPTY |
| EMPTY |
| EMPTY |
When executing query:
"""
GO FROM "Manu Ginobili" OVER * REVERSELY YIELD like.likeness, teammate.start_year, serve.start_year, $$.player.name
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment