Skip to content
This repository has been archived by the owner on Dec 1, 2022. It is now read-only.

Commit

Permalink
Add reverse path func. (#358)
Browse files Browse the repository at this point in the history
* Add reverse path func.

* Add test

* Disable some es test.

* Add some comment.

* Address comment.
  • Loading branch information
CPWstatic authored Dec 22, 2020
1 parent 51c0e32 commit 9e2d502
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 14 deletions.
12 changes: 7 additions & 5 deletions src/common/datatypes/Path.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ struct Step {

std::string toString() const {
std::stringstream os;
os << "-" << "[" << name << "]" << "->"
<< "(" << dst << ")"
<< "@" << ranking;
os << " ";
os << "-[" << name << "(" << type << ")]->"
<< "(" << dst << ")"
<< "@" << ranking << " ";
for (const auto& prop : props) {
os << prop.first << ":" << prop.second << ",";
}
return os.str();
auto path = os.str();
path.pop_back();
return path;
}

Step& operator=(Step&& rhs) noexcept {
Expand Down Expand Up @@ -84,6 +85,7 @@ struct Step {
bool operator==(const Step& rhs) const {
return dst == rhs.dst &&
type == rhs.type &&
name == rhs.name &&
ranking == rhs.ranking &&
props == rhs.props;
}
Expand Down
15 changes: 15 additions & 0 deletions src/common/function/FunctionManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ std::unordered_map<std::string, std::vector<TypeSignature>> FunctionManager::typ
TypeSignature({Value::Type::INT, Value::Type::INT, Value::Type::INT}, Value::Type::LIST)}},
{"hasSameEdgeInPath", { TypeSignature({Value::Type::PATH}, Value::Type::BOOL), }},
{"hasSameVertexInPath", {TypeSignature({Value::Type::PATH}, Value::Type::BOOL), }},
{"reversePath", {TypeSignature({Value::Type::PATH}, Value::Type::PATH), }},
};

// static
Expand Down Expand Up @@ -1448,6 +1449,20 @@ FunctionManager::FunctionManager() {
return path.hasDuplicateVertices();
};
}
{
auto &attr = functions_["reversePath"];
attr.minArity_ = 1;
attr.maxArity_ = 1;
attr.isPure_ = true;
attr.body_ = [](const auto &args) -> Value {
if (!args[0].isPath()) {
return Value::kNullBadType;
}
auto path = args[0].getPath();
path.reverse();
return path;
};
}
} // NOLINT

// static
Expand Down
13 changes: 13 additions & 0 deletions src/common/function/test/FunctionManagerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1565,6 +1565,19 @@ TEST_F(FunctionManagerTest, duplicateEdgesORVerticesInPath) {
}
}

TEST_F(FunctionManagerTest, ReversePath) {
{
Path path = createPath("0", {"1", "2", "3"});
std::vector<Value> args = {path};
Path expected;
expected.src = Vertex("3", {});
expected.steps.emplace_back(Step(Vertex("2", {}), -1, "edge1", 0, {}));
expected.steps.emplace_back(Step(Vertex("1", {}), -1, "edge1", 0, {}));
expected.steps.emplace_back(Step(Vertex("0", {}), -1, "edge1", 0, {}));
TEST_FUNCTION(reversePath, args, expected);
}
}

} // namespace nebula

int main(int argc, char **argv) {
Expand Down
8 changes: 4 additions & 4 deletions src/common/plugin/fulltext/elasticsearch/ESGraphAdapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ namespace plugin {
class ESGraphAdapter final : public FTGraphAdapter {
FRIEND_TEST(FulltextPluginTest, ESIndexCheckTest);
FRIEND_TEST(FulltextPluginTest, ESResultTest);
FRIEND_TEST(FulltextPluginTest, ESPrefixTest);
FRIEND_TEST(FulltextPluginTest, ESWildcardTest);
FRIEND_TEST(FulltextPluginTest, ESRegexpTest);
FRIEND_TEST(FulltextPluginTest, ESFuzzyTest);
FRIEND_TEST(FulltextPluginTest, DISABLED_ESPrefixTest);
FRIEND_TEST(FulltextPluginTest, DISABLED_ESWildcardTest);
FRIEND_TEST(FulltextPluginTest, DISABLED_ESRegexpTest);
FRIEND_TEST(FulltextPluginTest, DISABLED_ESFuzzyTest);
FRIEND_TEST(FulltextPluginTest, ESCreateIndexTest);
FRIEND_TEST(FulltextPluginTest, ESDropIndexTest);

Expand Down
11 changes: 6 additions & 5 deletions src/common/plugin/fulltext/test/FulltextPluginTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ TEST(FulltextPluginTest, ESResultTest) {
}
}

TEST(FulltextPluginTest, ESPrefixTest) {
// TODO: The json string is not comparable.
TEST(FulltextPluginTest, DISABLED_ESPrefixTest) {
HostAddr localHost_{"127.0.0.1", 9200};
HttpClient client(localHost_);
DocItem item("index1", "col1", 1, 2, "aa");
Expand All @@ -221,7 +222,7 @@ TEST(FulltextPluginTest, ESPrefixTest) {
ASSERT_EQ(expected , cmd);
}

TEST(FulltextPluginTest, ESWildcardTest) {
TEST(FulltextPluginTest, DISABLED_ESWildcardTest) {
HostAddr localHost_{"127.0.0.1", 9200};
HttpClient client(localHost_);
DocItem item("index1", "col1", 1, 2, "a?a");
Expand All @@ -237,7 +238,7 @@ TEST(FulltextPluginTest, ESWildcardTest) {
ASSERT_EQ(expected , cmd);
}

TEST(FulltextPluginTest, ESRegexpTest) {
TEST(FulltextPluginTest, DISABLED_ESRegexpTest) {
HostAddr localHost_{"127.0.0.1", 9200};
HttpClient client(localHost_);
DocItem item("index1", "col1", 1, 2, "+a");
Expand All @@ -253,7 +254,7 @@ TEST(FulltextPluginTest, ESRegexpTest) {
ASSERT_EQ(expected , cmd);
}

TEST(FulltextPluginTest, ESFuzzyTest) {
TEST(FulltextPluginTest, DISABLED_ESFuzzyTest) {
HostAddr localHost_{"127.0.0.1", 9200};
HttpClient client(localHost_);
DocItem item("index1", "col1", 1, 2, "+a");
Expand Down Expand Up @@ -334,7 +335,7 @@ folly::dynamic mockJson() {
return itemQuery;
}

TEST(FulltextPluginTest, jsonGenTest) {
TEST(FulltextPluginTest, DISABLED_jsonGenTest) {
auto str = folly::toJson(mockJson());
ASSERT_EQ(str, esJsonDoc);
}
Expand Down

0 comments on commit 9e2d502

Please sign in to comment.