Skip to content

Commit

Permalink
Add tck cases for DDL (#5220)
Browse files Browse the repository at this point in the history
  • Loading branch information
czpmango authored and Sophie-Xie committed Jan 28, 2023
1 parent b27b4e3 commit 57ec832
Show file tree
Hide file tree
Showing 2 changed files with 300 additions and 0 deletions.
298 changes: 298 additions & 0 deletions tests/tck/features/ddl/Ddl.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,298 @@
# Copyright (c) 2023 vesoft inc. All rights reserved.
#
# This source code is licensed under Apache 2.0 License.
Feature: DDL test

Background:
Given an empty graph
And create a space with following options:
| partition_num | 1 |
| replica_factor | 1 |
| vid_type | FIXED_STRING(30) |
| charset | utf8 |
| collate | utf8_bin |

Scenario: Tag DDL
When executing query:
"""
CREATE TAG A();
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG IF NOT EXISTS A(id int, name string);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG B(
id int NOT NULL DEFAULT 0+0 COMMENT "primary key",
name string NOT NULL,
createDate DATETIME, location geography(polygon),
isVisited bool COMMENT "kHop search flag",
nickName TIME DEFAULT time()
)
TTL_DURATION = 100, TTL_COL = "id", COMMENT = "TAG B";
"""
Then the execution should be successful
When executing query:
"""
DESC TAG A;
"""
Then the result should be, in any order:
| Field | Type | Null | Default | Comment |
When executing query:
"""
DESC TAG B;
"""
Then the result should be, in any order:
| Field | Type | Null | Default | Comment |
| "id" | "int64" | "NO" | 0 | "primary key" |
| "name" | "string" | "NO" | | |
| "createDate" | "datetime" | "YES" | | |
| "location" | "geography(polygon)" | "YES" | | |
| "isVisited" | "bool" | "YES" | | "kHop search flag" |
| "nickName" | "time" | "YES" | "time()" | |
When executing query:
"""
ALTER TAG B DROP (name)
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_A_1 on A();
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_A_2 on A(id);
"""
Then a ExecutionError should be raised at runtime: Key not existed!
When executing query:
"""
CREATE TAG INDEX IF NOT EXISTS idx_A_3 on A();
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_1 on B(isVisited, id, nickName, name(1), createDate);
"""
Then a ExecutionError should be raised at runtime: Key not existed!
When executing query:
"""
ALTER TAG B ADD (name string)
"""
# IMHO, this is really confusing. https://github.com/vesoft-inc/nebula/issues/2671
Then a ExecutionError should be raised at runtime: Existed!
When executing query:
"""
ALTER TAG B ADD (namex string)
"""
Then the execution should be successful
When executing query:
"""
ALTER TAG B CHANGE (isVisited bool)
"""
Then the execution should be successful
When executing query:
"""
ALTER TAG B CHANGE (isVisited int)
"""
Then a ExecutionError should be raised at runtime: Unsupported!
When executing query:
"""
CREATE TAG INDEX idx_B_2 on B(id);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_4 on B(namex);
"""
Then a ExecutionError should be raised at runtime: Invalid param!
When executing query:
"""
DROP TAG INDEX IF EXISTS idx_B_4;
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_5 on B(createDate);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_6 on B(location);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_7 on B(isVisited);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_8 on B(nickName);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_9 on B(id, nickName, namex(1), createDate);
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_B_10 on B(id, nickName, namex(1));
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_E2_11 on E2(id, nickName, namex(1));
"""
Then a ExecutionError should be raised at runtime: TagNotFound: Tag not existed!
When executing query:
"""
CREATE TAG INDEX idx_B_1 on B(isVisited, id, nickName, namex(1), createDate);
"""
Then the execution should be successful

Scenario: Edge DDL
When executing query:
"""
CREATE EDGE E1();
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE IF NOT EXISTS E1(id int, name string);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE E2(
id int NOT NULL DEFAULT 0+0 COMMENT "primary key",
name string NOT NULL,
createDate DATETIME, location geography(polygon),
isVisited bool COMMENT "kHop search flag",
nickName TIME DEFAULT time()
)
TTL_DURATION = 100, TTL_COL = "id", COMMENT = "EDGE E2";
"""
Then the execution should be successful
When executing query:
"""
DESC EDGE E1;
"""
Then the result should be, in any order:
| Field | Type | Null | Default | Comment |
When executing query:
"""
DESC EDGE E2;
"""
Then the result should be, in any order:
| Field | Type | Null | Default | Comment |
| "id" | "int64" | "NO" | 0 | "primary key" |
| "name" | "string" | "NO" | | |
| "createDate" | "datetime" | "YES" | | |
| "location" | "geography(polygon)" | "YES" | | |
| "isVisited" | "bool" | "YES" | | "kHop search flag" |
| "nickName" | "time" | "YES" | "time()" | |
When executing query:
"""
ALTER EDGE E2 DROP (name)
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E1_1 on E1();
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E1_2 on E1(id);
"""
Then a ExecutionError should be raised at runtime: Key not existed!
When executing query:
"""
CREATE EDGE INDEX IF NOT EXISTS idx_E1_3 on E1();
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_1 on E2(isVisited, id, nickName, name(1), createDate);
"""
Then a ExecutionError should be raised at runtime: Key not existed!
When executing query:
"""
ALTER EDGE E2 ADD (name string)
"""
Then a ExecutionError should be raised at runtime: Existed!
When executing query:
"""
ALTER EDGE E2 ADD (namex string)
"""
Then the execution should be successful
When executing query:
"""
ALTER EDGE E2 CHANGE (isVisited bool)
"""
Then the execution should be successful
When executing query:
"""
ALTER EDGE E2 CHANGE (isVisited int)
"""
Then a ExecutionError should be raised at runtime: Unsupported!
When executing query:
"""
CREATE EDGE INDEX idx_E2_2 on E2(id);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_4 on E2(namex);
"""
Then a ExecutionError should be raised at runtime: Invalid param!
When executing query:
"""
DROP EDGE INDEX IF EXISTS idx_E2_4;
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_5 on E2(createDate);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_6 on E2(location);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_7 on E2(isVisited);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_8 on E2(nickName);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_9 on E2(id, nickName, namex(1), createDate);
"""
Then the execution should be successful
When executing query:
"""
CREATE EDGE INDEX idx_E2_10 on E2(id, nickName, namex(1));
"""
Then the execution should be successful
When executing query:
"""
CREATE TAG INDEX idx_E2_11 on E2(id, nickName, namex(1));
"""
Then a ExecutionError should be raised at runtime: TagNotFound: Tag not existed!
When executing query:
"""
CREATE EDGE INDEX idx_E2_1 on E2(isVisited, id, nickName, namex(1), createDate);
"""
Then the execution should be successful
2 changes: 2 additions & 0 deletions tests/tck/utils/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@


def _parse_value(cell: str, variables: dict) -> Value:
if not cell:
cell = "EMPTY"
m = pattern.match(cell)
if m:
var = m.group(1)
Expand Down

0 comments on commit 57ec832

Please sign in to comment.