OmniSciDB  c0231cc57d
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Regexp.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2022 HEAVY.AI, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
23 #include "Regexp.h"
24 
25 #ifndef __CUDACC__
26 #include <stdexcept>
28 #endif
29 
30 /*
31  * @brief regexp_like performs the SQL REGEXP operation
32  * @param str string argument to be matched against pattern.
33  * @param str_len length of str
34  * @param pattern regex pattern string for SQL REGEXP
35  * @param pat_len length of pattern
36  * @param escape_char the escape character. '\\' is expected by default.
37  * @return true if str matches pattern, false otherwise.
38  */
39 extern "C" RUNTIME_EXPORT DEVICE bool regexp_like(const char* str,
40  const int32_t str_len,
41  const char* pattern,
42  const int32_t pat_len,
43  const char escape_char) {
44 #ifndef __CUDACC__
45  bool result;
46  try {
47  boost::regex re(pattern, pat_len, boost::regex::extended);
48  boost::cmatch what;
49  result = boost::regex_match(str, str + str_len, what, re);
50  } catch (std::runtime_error& error) {
51  // LOG(ERROR) << "Regexp match error: " << error.what();
52  result = false;
53  }
54  return result;
55 #else
56  return false;
57 #endif
58 }
59 
60 extern "C" RUNTIME_EXPORT DEVICE int8_t regexp_like_nullable(const char* str,
61  const int32_t str_len,
62  const char* pattern,
63  const int32_t pat_len,
64  const char escape_char,
65  const int8_t bool_null) {
66  if (!str || !pattern) {
67  return bool_null;
68  }
69 
70  return regexp_like(str, str_len, pattern, pat_len, escape_char);
71 }
#define DEVICE
RUNTIME_EXPORT DEVICE int8_t regexp_like_nullable(const char *str, const int32_t str_len, const char *pattern, const int32_t pat_len, const char escape_char, const int8_t bool_null)
Definition: Regexp.cpp:60
#define RUNTIME_EXPORT
RUNTIME_EXPORT DEVICE bool regexp_like(const char *str, const int32_t str_len, const char *pattern, const int32_t pat_len, const char escape_char)
Definition: Regexp.cpp:39