Skip to content

Commit 60d6ce3

Browse files
committed
[C++][Gandiva] Replace RegexUtil out references with pointer out args
1 parent cc15bf1 commit 60d6ce3

4 files changed

Lines changed: 17 additions & 14 deletions

File tree

cpp/src/gandiva/regex_functions_holder.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ Result<std::shared_ptr<LikeHolder>> LikeHolder::Make(const FunctionNode& node) {
129129

130130
Result<std::shared_ptr<LikeHolder>> LikeHolder::Make(const std::string& sql_pattern) {
131131
std::string pcre_pattern;
132-
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, pcre_pattern));
132+
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, &pcre_pattern));
133133

134134
RE2::Options regex_op;
135135
regex_op.set_dot_nl(true); // set dotall mode for the regex.
@@ -150,9 +150,9 @@ Result<std::shared_ptr<LikeHolder>> LikeHolder::Make(const std::string& sql_patt
150150
std::string pcre_pattern;
151151
if (escape_char.length() == 1) {
152152
ARROW_RETURN_NOT_OK(
153-
RegexUtil::SqlLikePatternToPcre(sql_pattern, escape_char.at(0), pcre_pattern));
153+
RegexUtil::SqlLikePatternToPcre(sql_pattern, escape_char.at(0), &pcre_pattern));
154154
} else {
155-
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, pcre_pattern));
155+
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, &pcre_pattern));
156156
}
157157

158158
auto lholder = std::shared_ptr<LikeHolder>(new LikeHolder(pcre_pattern, regex_op));
@@ -166,7 +166,7 @@ Result<std::shared_ptr<LikeHolder>> LikeHolder::Make(const std::string& sql_patt
166166
Result<std::shared_ptr<LikeHolder>> LikeHolder::Make(const std::string& sql_pattern,
167167
RE2::Options regex_op) {
168168
std::string pcre_pattern;
169-
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, pcre_pattern));
169+
ARROW_RETURN_NOT_OK(RegexUtil::SqlLikePatternToPcre(sql_pattern, &pcre_pattern));
170170

171171
auto lholder = std::shared_ptr<LikeHolder>(new LikeHolder(pcre_pattern, regex_op));
172172

cpp/src/gandiva/regex_functions_holder_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ TEST_F(TestLikeHolder, TestPcreSpecialWithNewLine) {
8989

9090
TEST_F(TestLikeHolder, TestRegexEscape) {
9191
std::string res;
92-
ARROW_EXPECT_OK(RegexUtil::SqlLikePatternToPcre("#%hello#_abc_def##", '#', res));
92+
ARROW_EXPECT_OK(RegexUtil::SqlLikePatternToPcre("#%hello#_abc_def##", '#', &res));
9393

9494
EXPECT_EQ(res, "%hello_abc.def#");
9595
}

cpp/src/gandiva/regex_util.cc

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,19 @@ const std::set<char> RegexUtil::pcre_regex_specials_ = {
2323
'[', ']', '(', ')', '|', '^', '-', '+', '*', '?', '{', '}', '$', '\\', '.'};
2424

2525
Status RegexUtil::SqlLikePatternToPcre(const std::string& sql_pattern, char escape_char,
26-
std::string& pcre_pattern) {
26+
std::string* const pcre_pattern) {
2727
/// Characters that are considered special by pcre regex. These needs to be
2828
/// escaped with '\\'.
29-
pcre_pattern.clear();
29+
if (pcre_pattern == nullptr) {
30+
return Status::Invalid("pcre_pattern must not be null");
31+
}
32+
pcre_pattern->clear();
3033
for (size_t idx = 0; idx < sql_pattern.size(); ++idx) {
3134
auto cur = sql_pattern.at(idx);
3235

3336
// Escape any char that is special for pcre regex
3437
if (pcre_regex_specials_.find(cur) != pcre_regex_specials_.end()) {
35-
pcre_pattern += "\\";
38+
(*pcre_pattern) += "\\";
3639
}
3740

3841
if (cur == escape_char) {
@@ -44,17 +47,17 @@ Status RegexUtil::SqlLikePatternToPcre(const std::string& sql_pattern, char esca
4447

4548
cur = sql_pattern.at(idx);
4649
if (cur == '_' || cur == '%' || cur == escape_char) {
47-
pcre_pattern += cur;
50+
(*pcre_pattern) += cur;
4851
} else {
4952
return Status::Invalid("Invalid escape sequence in pattern ", sql_pattern,
5053
" at offset ", idx);
5154
}
5255
} else if (cur == '_') {
53-
pcre_pattern += '.';
56+
(*pcre_pattern) += '.';
5457
} else if (cur == '%') {
55-
pcre_pattern += ".*";
58+
(*pcre_pattern) += ".*";
5659
} else {
57-
pcre_pattern += cur;
60+
(*pcre_pattern) += cur;
5861
}
5962
}
6063
return Status::OK();

cpp/src/gandiva/regex_util.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ class GANDIVA_EXPORT RegexUtil {
3131
public:
3232
// Convert an sql pattern to a pcre pattern
3333
static Status SqlLikePatternToPcre(const std::string& like_pattern, char escape_char,
34-
std::string& pcre_pattern);
34+
std::string* const pcre_pattern);
3535

3636
static Status SqlLikePatternToPcre(const std::string& like_pattern,
37-
std::string& pcre_pattern) {
37+
std::string* const pcre_pattern) {
3838
return SqlLikePatternToPcre(like_pattern, 0 /*escape_char*/, pcre_pattern);
3939
}
4040

0 commit comments

Comments
 (0)