From 213932c02950ad15b7cdb20c939bf2b96b10d916 Mon Sep 17 00:00:00 2001
From: "kyle.cao" <kyle.cao@vesoft.com>
Date: Fri, 5 Feb 2021 15:47:47 +0800
Subject: [PATCH] Support ascending/descending keywords (#736)

add test case

Co-authored-by: jie.wang <38901892+jievince@users.noreply.github.com>
Co-authored-by: Yee <2520865+yixinglu@users.noreply.github.com>
---
 .linters/cpp/checkKeyword.py                      | 2 ++
 src/parser/parser.yy                              | 8 +++++++-
 src/parser/scanner.lex                            | 2 ++
 tests/tck/features/match/MatchById.IntVid.feature | 4 ++--
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/.linters/cpp/checkKeyword.py b/.linters/cpp/checkKeyword.py
index deba075b..bd9b9304 100755
--- a/.linters/cpp/checkKeyword.py
+++ b/.linters/cpp/checkKeyword.py
@@ -93,6 +93,8 @@ reserved_key_words = [
     'KW_FLUSH',
     'KW_SUBMIT',
     'KW_ASC',
+    'KW_ASCENDING',
+    'KW_DESCENDING',
     'KW_DISTINCT',
     'KW_FETCH',
     'KW_PROP',
diff --git a/src/parser/parser.yy b/src/parser/parser.yy
index 52058c83..d68ff21d 100644
--- a/src/parser/parser.yy
+++ b/src/parser/parser.yy
@@ -165,7 +165,7 @@ static constexpr size_t MAX_ABS_INTEGER = 9223372036854775808ULL;
 %token KW_GET KW_DECLARE KW_GRAPH KW_META KW_STORAGE
 %token KW_TTL KW_TTL_DURATION KW_TTL_COL KW_DATA KW_STOP
 %token KW_FETCH KW_PROP KW_UPDATE KW_UPSERT KW_WHEN
-%token KW_ORDER KW_ASC KW_LIMIT KW_OFFSET
+%token KW_ORDER KW_ASC KW_LIMIT KW_OFFSET KW_ASCENDING KW_DESCENDING
 %token KW_DISTINCT KW_ALL KW_OF
 %token KW_BALANCE KW_LEADER KW_RESET KW_PLAN
 %token KW_SHORTEST KW_PATH KW_NOLOOP
@@ -1696,6 +1696,12 @@ order_factor
     | expression KW_DESC {
         $$ = new OrderFactor($1, OrderFactor::DESCEND);
     }
+    | expression KW_ASCENDING {
+        $$ = new OrderFactor($1, OrderFactor::ASCEND);
+    }
+    | expression KW_DESCENDING {
+        $$ = new OrderFactor($1, OrderFactor::DESCEND);
+    }
     ;
 
 order_factors
diff --git a/src/parser/scanner.lex b/src/parser/scanner.lex
index 08717ba7..22f29abc 100644
--- a/src/parser/scanner.lex
+++ b/src/parser/scanner.lex
@@ -120,6 +120,8 @@ IP_OCTET                    ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
 "FLUSH"                     { return TokenType::KW_FLUSH; }
 "SUBMIT"                    { return TokenType::KW_SUBMIT; }
 "ASC"                       { return TokenType::KW_ASC; }
+"ASCENDING"                 { return TokenType::KW_ASCENDING; }
+"DESCENDING"                { return TokenType::KW_DESCENDING; }
 "DISTINCT"                  { return TokenType::KW_DISTINCT; }
 "FETCH"                     { return TokenType::KW_FETCH; }
 "PROP"                      { return TokenType::KW_PROP; }
diff --git a/tests/tck/features/match/MatchById.IntVid.feature b/tests/tck/features/match/MatchById.IntVid.feature
index 565fb278..5228c3aa 100644
--- a/tests/tck/features/match/MatchById.IntVid.feature
+++ b/tests/tck/features/match/MatchById.IntVid.feature
@@ -260,7 +260,7 @@ Feature: Integer Vid Match By Id
       MATCH (v1) -[:like]-> (v)
       WHERE id(v1) == hash('Dejounte Murray')
       RETURN v.name AS Name, v.age AS Age
-      ORDER BY Age DESC, Name ASC
+      ORDER BY Age DESC, Name ASCENDING
       LIMIT 3
       """
     Then the result should be, in any order, with relax comparison:
@@ -273,7 +273,7 @@ Feature: Integer Vid Match By Id
       MATCH (v1) -[:like]-> (v)
       WHERE id(v1) == hash('Dejounte Murray')
       RETURN v.name AS Name, v.age AS Age
-      ORDER BY Age DESC, Name ASC
+      ORDER BY Age DESCENDING, Name ASC
       SKIP 3
       """
     Then the result should be, in any order, with relax comparison:
-- 
GitLab