Skip to content
Snippets Groups Projects
Unverified Commit e59523f4 authored by yaphet's avatar yaphet Committed by GitHub
Browse files

Create space with zone (#423)


* create space with zone

* fix

Co-authored-by: default avatarYee <2520865+yixinglu@users.noreply.github.com>
parent e75b02e6
No related branches found
No related tags found
No related merge requests found
......@@ -55,7 +55,8 @@ folly::Future<Status> DescSpaceExecutor::execute() {
"Replica Factor",
"Charset",
"Collate",
"Vid Type"};
"Vid Type",
"Group"};
Row row;
row.values.emplace_back(spaceId);
row.values.emplace_back(properties.get_space_name());
......@@ -64,6 +65,11 @@ folly::Future<Status> DescSpaceExecutor::execute() {
row.values.emplace_back(properties.get_charset_name());
row.values.emplace_back(properties.get_collate_name());
row.values.emplace_back(SchemaUtil::typeToString(properties.get_vid_type()));
if (properties.__isset.group_name) {
row.values.emplace_back(properties.get_group_name());
} else {
row.values.emplace_back("default");
}
dataSet.rows.emplace_back(std::move(row));
return finish(ResultBuilder()
.value(Value(std::move(dataSet)))
......@@ -144,7 +150,7 @@ folly::Future<Status> ShowCreateSpaceExecutor::execute() {
Row row;
row.values.emplace_back(properties.get_space_name());
auto fmt = "CREATE SPACE `%s` (partition_num = %d, replica_factor = %d, "
"charset = %s, collate = %s, vid_type = %s)";
"charset = %s, collate = %s, vid_type = %s) ON %s";
row.values.emplace_back(folly::stringPrintf(
fmt,
properties.get_space_name().c_str(),
......@@ -152,7 +158,9 @@ folly::Future<Status> ShowCreateSpaceExecutor::execute() {
properties.get_replica_factor(),
properties.get_charset_name().c_str(),
properties.get_collate_name().c_str(),
SchemaUtil::typeToString(properties.get_vid_type()).c_str()));
SchemaUtil::typeToString(properties.get_vid_type()).c_str(),
properties.__isset.group_name ? properties.get_group_name()->c_str()
: "default"));
dataSet.rows.emplace_back(std::move(row));
return finish(ResultBuilder()
.value(Value(std::move(dataSet)))
......
......@@ -28,10 +28,10 @@ folly::Future<Status> IndexScanExecutor::indexScan() {
return finish(ResultBuilder().value(Value(std::move(dataSet))).finish());
}
return storageClient->lookupIndex(lookup->space(),
*lookup->queryContext(),
*lookup->queryContext(),
lookup->isEdge(),
lookup->schemaId(),
*lookup->returnColumns())
*lookup->returnColumns())
.via(runner())
.then([this](StorageRpcResponse<LookupIndexResp> &&rpcResp) {
return handleResp(std::move(rpcResp));
......
......@@ -154,7 +154,8 @@ public:
VID_TYPE,
CHARSET,
COLLATE,
ATOMIC_EDGE
ATOMIC_EDGE,
GROUP_NAME
};
SpaceOptItem(OptionType op, std::string val) {
......@@ -235,7 +236,7 @@ public:
return asString();
} else {
LOG(ERROR) << "charset value illegal.";
return 0;
return "";
}
}
......@@ -244,7 +245,16 @@ public:
return asString();
} else {
LOG(ERROR) << "collate value illage.";
return 0;
return "";
}
}
std::string getGroupName() const {
if (isString()) {
return asString();
} else {
LOG(ERROR) << "group name value illage.";
return "";
}
}
......@@ -305,6 +315,11 @@ public:
spaceOpts_.reset(spaceOpts);
}
void setGroupName(std::string& name) {
auto *item = new SpaceOptItem(SpaceOptItem::OptionType::GROUP_NAME, name);
spaceOpts_->addOpt(std::move(item));
}
std::vector<SpaceOptItem*> getOpts() {
if (spaceOpts_ == nullptr) {
return {};
......@@ -354,23 +369,14 @@ public:
kind_ = Kind::kDescribeSpace;
}
void setClusterName(std::string* clusterName) {
clusterName_.reset(clusterName);
}
const std::string* spaceName() const {
return spaceName_.get();
}
const std::string* clusterName() const {
return clusterName_.get();
}
std::string toString() const override;
private:
std::unique_ptr<std::string> spaceName_;
std::unique_ptr<std::string> clusterName_;
};
class ConfigRowItem {
......
......@@ -2791,11 +2791,25 @@ create_space_sentence
auto sentence = new CreateSpaceSentence($4, $3);
$$ = sentence;
}
| KW_CREATE KW_SPACE opt_if_not_exists name_label KW_ON name_label {
auto sentence = new CreateSpaceSentence($4, $3);
sentence->setOpts(new SpaceOptList());
sentence->setGroupName(*$6);
$$ = sentence;
delete $6;
}
| KW_CREATE KW_SPACE opt_if_not_exists name_label L_PAREN space_opt_list R_PAREN {
auto sentence = new CreateSpaceSentence($4, $3);
sentence->setOpts($6);
$$ = sentence;
}
| KW_CREATE KW_SPACE opt_if_not_exists name_label L_PAREN space_opt_list R_PAREN KW_ON name_label {
auto sentence = new CreateSpaceSentence($4, $3);
sentence->setOpts($6);
sentence->setGroupName(*$9);
$$ = sentence;
delete $9;
}
;
describe_space_sentence
......
......@@ -178,31 +178,20 @@ TEST(Parser, SpaceOperation) {
}
{
GQLParser parser;
std::string query = "USE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DESC SPACE default_space";
std::string query = "CREATE SPACE default_space(partition_num=9, replica_factor=3) "
"ON group_0";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DESCRIBE SPACE default_space";
std::string query = "CREATE SPACE default_space ON group_0";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "SHOW CREATE SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DROP SPACE default_space";
std::string query = "CREATE SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
......@@ -241,6 +230,36 @@ TEST(Parser, SpaceOperation) {
auto result = parser.parse(query);
EXPECT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "USE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DESC SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DESCRIBE SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "SHOW CREATE SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
{
GQLParser parser;
std::string query = "DROP SPACE default_space";
auto result = parser.parse(query);
ASSERT_TRUE(result.ok()) << result.status();
}
}
TEST(Parser, TagOperation) {
......
......@@ -89,6 +89,9 @@ Status CreateSpaceValidator::validateImpl() {
spaceDesc_.set_isolation_level(meta::cpp2::IsolationLevel::DEFAULT);
}
}
case SpaceOptItem::GROUP_NAME: {
break;
}
}
}
......
......@@ -23,7 +23,7 @@ class TestSpace(NebulaTestSuite):
# check result
resp = self.client.execute('DESC SPACE space_with_default_options')
expect_result = [['space_with_default_options', 100, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['space_with_default_options', 100, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# drop space
......@@ -42,7 +42,7 @@ class TestSpace(NebulaTestSuite):
# desc space
resp = self.client.execute('DESC SPACE default_space')
self.check_resp_succeeded(resp)
expect_result = [['default_space', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['default_space', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# show create space
......@@ -51,12 +51,12 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('SHOW CREATE SPACE default_space')
self.check_resp_succeeded(resp)
create_space_str = 'CREATE SPACE `default_space` ('\
'partition_num = 9, '\
create_space_str = 'CREATE SPACE `default_space` (partition_num = 9, '\
'replica_factor = 1, '\
'charset = utf8, '\
'collate = utf8_bin, '\
'vid_type = FIXED_STRING(8))';
'vid_type = FIXED_STRING(8)) '\
'ON default'
expect_result = [['default_space', create_space_str]]
self.check_result(resp, expect_result)
......@@ -83,7 +83,7 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_charset_collate')
self.check_resp_succeeded(resp)
expect_result = [['space_charset_collate', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['space_charset_collate', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# drop space
......@@ -96,7 +96,7 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_charset')
self.check_resp_succeeded(resp)
expect_result = [['space_charset', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['space_charset', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# drop space
......@@ -109,7 +109,7 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_collate')
self.check_resp_succeeded(resp)
expect_result = [['space_collate', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['space_collate', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# drop space
......@@ -146,7 +146,7 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_capital')
self.check_resp_succeeded(resp)
expect_result = [['space_capital', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)']]
expect_result = [['space_capital', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(8)', 'default']]
self.check_result(resp, expect_result, {0})
# drop space
......@@ -198,7 +198,7 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_string_vid')
self.check_resp_succeeded(resp)
expect_result = [['space_string_vid', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(30)']]
expect_result = [['space_string_vid', 9, 1, 'utf8', 'utf8_bin', 'FIXED_STRING(30)', 'default']]
self.check_result(resp, expect_result, {0})
def test_create_space_with_int_vid(self):
......@@ -209,5 +209,5 @@ class TestSpace(NebulaTestSuite):
resp = self.client.execute('DESC SPACE space_int_vid')
self.check_resp_succeeded(resp)
expect_result = [['space_int_vid', 9, 1, 'utf8', 'utf8_bin', 'INT64']]
expect_result = [['space_int_vid', 9, 1, 'utf8', 'utf8_bin', 'INT64', 'default']]
self.check_result(resp, expect_result, {0})
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