Skip to content

Commit

Permalink
Support timestamp (vesoft-inc#201)
Browse files Browse the repository at this point in the history
  • Loading branch information
ayyt authored and dutor committed Mar 25, 2019
1 parent dd8a40e commit 84b1665
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 22 deletions.
13 changes: 7 additions & 6 deletions src/executor/Executor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,21 @@ std::unique_ptr<Executor> Executor::makeExecutor(Sentence *sentence) {
return executor;
}

std::string Executor::valueTypeToString(nebula::cpp2::ValueType type){
std::string Executor::valueTypeToString(nebula::cpp2::ValueType type) {
switch (type.type) {
case nebula::cpp2::SupportedType::BOOL:
case nebula::cpp2::SupportedType::BOOL:
return "bool";
case nebula::cpp2::SupportedType::INT:
case nebula::cpp2::SupportedType::INT:
return "int";
case nebula::cpp2::SupportedType::DOUBLE:
case nebula::cpp2::SupportedType::DOUBLE:
return "double";
case nebula::cpp2::SupportedType::STRING:
case nebula::cpp2::SupportedType::STRING:
return "string";
case nebula::cpp2::SupportedType::TIMESTAMP:
return "timestamp";
default:
return "unknown";
}

}

} // namespace graph
Expand Down
4 changes: 3 additions & 1 deletion src/executor/test/DefineSchemaTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ TEST_F(DefineSchemaTest, DISABLED_Simple) {
ASSERT_NE(nullptr, client);
{
cpp2::ExecutionResponse resp;
std::string query = "DEFINE TAG person(name string, email string, age int, gender string)";
std::string query = "DEFINE TAG person(name string, email string, "
"age int, gender string, row_timestamp timestamp)";
auto code = client->execute(query, resp);
ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
}
Expand All @@ -44,6 +45,7 @@ TEST_F(DefineSchemaTest, DISABLED_Simple) {
{"name", "string"},
{"age", "int"},
{"gender", "string"},
{"row_timestamp", "timestamp"},
};
ASSERT_TRUE(verifyResult(resp, expected));
}
Expand Down
2 changes: 2 additions & 0 deletions src/parser/Expressions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,8 @@ std::string columnTypeToString(ColumnType type) {
return "bigint";
case BOOL:
return "bool";
case TIMESTAMP:
return "timestamp";
default:
return "unknown";
}
Expand Down
2 changes: 1 addition & 1 deletion src/parser/Expressions.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace nebula {
class Cord;

enum ColumnType {
INT, STRING, DOUBLE, BIGINT, BOOL,
INT, STRING, DOUBLE, BIGINT, BOOL, TIMESTAMP,
};

std::string columnTypeToString(ColumnType type);
Expand Down
3 changes: 2 additions & 1 deletion src/parser/parser.yy
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class GraphScanner;
%token KW_MATCH KW_INSERT KW_VALUES KW_YIELD KW_RETURN KW_DEFINE KW_VERTEX KW_TTL
%token KW_EDGE KW_UPDATE KW_STEPS KW_OVER KW_UPTO KW_REVERSELY KW_SPACE
%token KW_INT KW_BIGINT KW_DOUBLE KW_STRING KW_BOOL KW_TAG KW_UNION KW_INTERSECT KW_MINUS
%token KW_NO KW_OVERWRITE KW_IN KW_DESCRIBE KW_SHOW KW_HOSTS
%token KW_NO KW_OVERWRITE KW_IN KW_DESCRIBE KW_SHOW KW_HOSTS KW_TIMESTAMP
/* symbols */
%token L_PAREN R_PAREN L_BRACKET R_BRACKET L_BRACE R_BRACE COMMA
%token PIPE OR AND LT LE GT GE EQ NE ADD SUB MUL DIV MOD NOT NEG ASSIGN
Expand Down Expand Up @@ -212,6 +212,7 @@ type_spec
| KW_STRING { $$ = ColumnType::STRING; }
| KW_BOOL { $$ = ColumnType::BOOL; }
| KW_BIGINT { $$ = ColumnType::BIGINT; }
| KW_TIMESTAMP { $$ = ColumnType::TIMESTAMP; }
;

multiplicative_expression
Expand Down
2 changes: 2 additions & 0 deletions src/parser/scanner.lex
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ TRUE ([Tt][Rr][Uu][Ee])
FALSE ([Ff][Aa][Ll][Ss][Ee])
SHOW ([Ss][Hh][Oo][Ww])
HOSTS ([Hh][Oo][Ss][Tt][Ss])
TIMESTAMP ([Tt][Ii][Mm][Ee][Ss][Tt][Aa][Mm][Pp])


LABEL ([a-zA-Z][_a-zA-Z0-9]*)
Expand Down Expand Up @@ -113,6 +114,7 @@ OCT ([0-7])
{FALSE} { yylval->boolval = false; return TokenType::BOOL; }
{SHOW} { return TokenType::KW_SHOW; }
{HOSTS} { return TokenType::KW_HOSTS; }
{TIMESTAMP} { return TokenType::KW_TIMESTAMP; }

"." { return TokenType::DOT; }
"," { return TokenType::COMMA; }
Expand Down
4 changes: 2 additions & 2 deletions src/parser/test/ExpressionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ TEST_F(ExpressionTest, EdgeReference) {
GQLParser parser;
{
std::string query = "GO FROM 1 OVER follow WHERE follow._src == 1 "
"|| follow.timestamp < 1545798791"
"|| follow.cur_time < 1545798791"
"&& follow._dst == 2";
auto parsed = parser.parse(query);
ASSERT_TRUE(parsed.ok());
Expand All @@ -485,7 +485,7 @@ TEST_F(ExpressionTest, EdgeReference) {
return 2L;
};
ctx->getters().getEdgeProp = [] (auto &prop) -> VariantType {
if (prop == "timestamp") {
if (prop == "cur_time") {
return static_cast<int64_t>(::time(NULL));
}
return 1545798790L;
Expand Down
30 changes: 19 additions & 11 deletions src/parser/test/ParserTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ TEST(Parser, DefineTag) {
{
GQLParser parser;
std::string query = "DEFINE TAG person(name string, age int TTL = 100, "
"married bool, salary double)";
"married bool, salary double, create_time timestamp)";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
Expand Down Expand Up @@ -176,15 +176,15 @@ TEST(Parser, Pipe) {
TEST(Parser, InsertVertex) {
{
GQLParser parser;
std::string query = "INSERT VERTEX person(name,age,married,salary) "
"VALUES(12345: \"dutor\", 30, true, 3.14)";
std::string query = "INSERT VERTEX person(name,age,married,salary,create_time) "
"VALUES(12345: \"dutor\", 30, true, 3.14, 1551331900)";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "INSERT TAG person(name,age,married,salary) "
"VALUES(12345: \"dutor\", 30, true, 3.14)";
"VALUES(12345: \"dutor\", 30, true, 3.14, 1551331900)";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
Expand All @@ -193,28 +193,36 @@ TEST(Parser, InsertVertex) {
TEST(Parser, UpdateVertex) {
{
GQLParser parser;
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\",age=30,married=true";
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\", age=30, "
"married=true, create_time=1551331999";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\",age=31,married=true "
"WHERE salary > 10000";
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\", age=31, "
"married=true, create_time=1551332019 WHERE salary > 10000";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\",age=30,married=true "
"YIELD name,salary";
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\", age=31, married=true, "
"create_time=1551332019 WHERE create_time > 1551332018";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "UPDATE OR INSERT VERTEX 12345 SET name=\"dutor\",age=30,married=true "
"YIELD name,salary";
std::string query = "UPDATE VERTEX 12345 SET name=\"dutor\", age=30, married=true "
"YIELD name, salary, create_time";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "UPDATE OR INSERT VERTEX 12345 SET name=\"dutor\", age=30, "
"married=true YIELD name, salary, create_time";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
Expand Down
3 changes: 3 additions & 0 deletions src/parser/test/ScannerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,9 @@ TEST(Scanner, Basic) {
CHECK_SEMANTIC_TYPE("HOSTS", TokenType::KW_HOSTS),
CHECK_SEMANTIC_TYPE("hosts", TokenType::KW_HOSTS),
CHECK_SEMANTIC_TYPE("Hosts", TokenType::KW_HOSTS),
CHECK_SEMANTIC_TYPE("TIMESTAMP", TokenType::KW_TIMESTAMP),
CHECK_SEMANTIC_TYPE("timestamp", TokenType::KW_TIMESTAMP),
CHECK_SEMANTIC_TYPE("Timestamp", TokenType::KW_TIMESTAMP),

CHECK_SEMANTIC_TYPE("_type", TokenType::TYPE_PROP),
CHECK_SEMANTIC_TYPE("_id", TokenType::ID_PROP),
Expand Down

0 comments on commit 84b1665

Please sign in to comment.