1/*
2 A temporary header to resolve WebScaleSQL vs MariaDB differences
3 when porting MyRocks to MariaDB.
4*/
5#ifndef RDB_MARIADB_SERVER_PORT_H
6#define RDB_MARIADB_SERVER_PORT_H
7
8#include "my_global.h" /* ulonglong */
9#include "atomic_stat.h"
10#include "my_pthread.h"
11#include <mysql/psi/mysql_table.h>
12#include <mysql/psi/mysql_thread.h>
13
14/*
15 Code that is on SQL layer in facebook/mysql-5.6,
16 but is part of the storage engine in MariaRocks
17*/
18#include <regex>
19
20class Regex_list_handler
21{
22 private:
23#if defined(HAVE_PSI_INTERFACE)
24 const PSI_rwlock_key& m_key;
25#endif
26
27 char m_delimiter;
28 std::string m_bad_pattern_str;
29 const std::regex* m_pattern;
30
31 mutable mysql_rwlock_t m_rwlock;
32
33 Regex_list_handler(const Regex_list_handler& other)= delete;
34 Regex_list_handler& operator=(const Regex_list_handler& other)= delete;
35
36 public:
37#if defined(HAVE_PSI_INTERFACE)
38 Regex_list_handler(const PSI_rwlock_key& key,
39 char delimiter= ',') :
40 m_key(key),
41#else
42 Regex_list_handler(char delimiter= ',') :
43#endif
44 m_delimiter(delimiter),
45 m_bad_pattern_str(""),
46 m_pattern(nullptr)
47 {
48 mysql_rwlock_init(key, &m_rwlock);
49 }
50
51 ~Regex_list_handler()
52 {
53 mysql_rwlock_destroy(&m_rwlock);
54 delete m_pattern;
55 }
56
57 // Set the list of patterns
58 bool set_patterns(const std::string& patterns);
59
60 // See if a string matches at least one pattern
61 bool matches(const std::string& str) const;
62
63 // See the list of bad patterns
64 const std::string& bad_pattern() const
65 {
66 return m_bad_pattern_str;
67 }
68};
69
70void warn_about_bad_patterns(const Regex_list_handler* regex_list_handler,
71 const char *name);
72
73void print_keydup_error(TABLE *table, KEY *key, myf errflag,
74 const THD *thd, const char *org_table_name=NULL);
75
76#endif
77