OmniSciDB  85c2d10cdc
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Regexp.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2017 MapD Technologies, 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 
25 #include "Regexp.h"
26 
27 #ifndef __CUDACC__
28 #include <boost/regex.hpp>
29 #include <stdexcept>
30 #endif
31 
32 /*
33  * @brief regexp_like performs the SQL REGEXP operation
34  * @param str string argument to be matched against pattern.
35  * @param str_len length of str
36  * @param pattern regex pattern string for SQL REGEXP
37  * @param pat_len length of pattern
38  * @param escape_char the escape character. '\\' is expected by default.
39  * @return true if str matches pattern, false otherwise.
40  */
41 extern "C" RUNTIME_EXPORT DEVICE bool regexp_like(const char* str,
42  const int32_t str_len,
43  const char* pattern,
44  const int32_t pat_len,
45  const char escape_char) {
46 #ifndef __CUDACC__
47  bool result;
48  try {
49  boost::regex re(pattern, pat_len, boost::regex::extended);
50  boost::cmatch what;
51  result = boost::regex_match(str, str + str_len, what, re);
52  } catch (std::runtime_error& error) {
53  // LOG(ERROR) << "Regexp match error: " << error.what();
54  result = false;
55  }
56  return result;
57 #else
58  return false;
59 #endif
60 }
61 
62 extern "C" RUNTIME_EXPORT DEVICE int8_t regexp_like_nullable(const char* str,
63  const int32_t str_len,
64  const char* pattern,
65  const int32_t pat_len,
66  const char escape_char,
67  const int8_t bool_null) {
68  if (!str || !pattern) {
69  return bool_null;
70  }
71 
72  return regexp_like(str, str_len, pattern, pat_len, escape_char);
73 }
#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:62
#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:41