26#ifndef _UTILS_SQLSTRING_H_
27#define _UTILS_SQLSTRING_H_
31#ifndef __STDC_FORMAT_MACROS
32#define __STDC_FORMAT_MACROS 1
52 bool wildcards =
false);
54 bool wildcards =
false);
57 bool wildcards =
false);
63 const char quote_char);
81 template <
typename Iterator,
typename Derived>
91 it_ = std::move(other.it_);
102 return *
dynamic_cast<Derived *
>(
this);
106 return it_ != other.
it_;
109 static std::pair<Derived, Derived> from_iterators(Iterator
begin,
112 template <
typename Container>
113 static std::pair<Derived, Derived> from_container(Container &c);
123 int _locked_escape{0};
125 std::string consume_until_next_escape();
127 void lock_escape(
int esc);
128 void unlock_escape();
139 }
else if (esc ==
'?') {
149 throw std::invalid_argument(
150 "Error formatting SQL query: internal error, expected ? or ! escape "
151 "got something else");
169 operator std::string()
const;
170 std::string
str()
const;
174 return str() == other.
str();
225 template <
typename T>
227 auto esc = next_escape();
231 T it = iterators.first;
232 T end = iterators.second;
233 for (; it !=
end; ++it) {
242 append(consume_until_next_escape());
247 template <
typename T>
249 using const_iterator =
typename std::vector<T>::const_iterator;
250 *this << std::make_pair<const_iterator, const_iterator>(values.begin(),
256 template <
typename T>
258 using const_iterator =
typename std::set<T>::const_iterator;
259 *this << std::make_pair<const_iterator, const_iterator>(values.begin(),
266 template <
typename T>
278 int esc = next_escape();
280 throw std::invalid_argument(
281 "Error formatting SQL query: invalid escape for numeric argument");
284 append(consume_until_next_escape());
289template <
typename Iterator,
typename Derived>
290template <
typename Container>
291std::pair<Derived, Derived>
294 return std::make_pair<Derived, Derived>(c.begin(), c.end());
297template <
typename Iterator,
typename Derived>
298std::pair<Derived, Derived>
301 return std::make_pair<Derived, Derived>(
begin,
end);
Iterator wrapper, for serializing arrays of structures to string.
Definition: utils_sqlstring.h:82
CustomContainerIterator & operator=(CustomContainerIterator &&other)
Definition: utils_sqlstring.h:90
CustomContainerIterator(const Iterator &it)
Definition: utils_sqlstring.h:84
virtual ~CustomContainerIterator()=default
Iterator it_
Definition: utils_sqlstring.h:116
CustomContainerIterator(const CustomContainerIterator &other)
Definition: utils_sqlstring.h:85
static std::pair< Derived, Derived > from_iterators(Iterator begin, Iterator end)
Definition: utils_sqlstring.h:299
static std::pair< Derived, Derived > from_container(Container &c)
Definition: utils_sqlstring.h:292
Derived & operator++()
Definition: utils_sqlstring.h:100
bool operator!=(const CustomContainerIterator &other) const
Definition: utils_sqlstring.h:105
CustomContainerIterator(Iterator &&it)
Definition: utils_sqlstring.h:87
CustomContainerIterator & operator=(const CustomContainerIterator &other)
Definition: utils_sqlstring.h:95
Definition: utils_sqlstring.h:67
sqlstringformat _format
Definition: utils_sqlstring.h:122
static const sqlstring empty
Definition: utils_sqlstring.h:157
sqlstring(const sqlstring ©)
std::string _formatted
Definition: utils_sqlstring.h:120
sqlstring & format(int esc, const char *v, int length)
Definition: utils_sqlstring.h:132
sqlstring & operator<<(const std::set< T > &values)
Definition: utils_sqlstring.h:257
sqlstring & operator=(const sqlstring &)=default
bool operator==(const sqlstring &other) const
Definition: utils_sqlstring.h:173
static const sqlstring end
Definition: utils_sqlstring.h:159
sqlstring & operator<<(const T value)
replaces a ? in the format string with any integer numeric value
Definition: utils_sqlstring.h:267
sqlstring & operator<<(const std::vector< T > &values)
Definition: utils_sqlstring.h:248
std::string str() const
Definition: utils_sqlstring.cc:507
sqlstring & operator<<(const float val)
replaces a ? in the format string with a float numeric value
Definition: utils_sqlstring.h:180
std::string _format_string_left
Definition: utils_sqlstring.h:121
sqlstring & operator<<(const std::pair< T, T > &iterators)
Replace ? or ! with multiple values.
Definition: utils_sqlstring.h:226
static int flags[50]
Definition: hp_test1.cc:40
static const char separator
Definition: item_func.cc:4454
#define T
Definition: jit_executor_value.cc:373
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:50
static char * escaped
Definition: mysqldump.cc:152
void copy(Shards< COUNT > &dst, const Shards< COUNT > &src) noexcept
Copy the counters, overwrite destination.
Definition: ut0counter.h:354
std::string HARNESS_EXPORT reset()
get 'reset attributes' ESC sequence.
Definition: vt100.cc:37
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1084
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
bool is_empty(const std::string &str)
Definition: generic.h:34
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
mysqlrouter::sqlstring sqlstring
Definition: query_retry_on_ro.cc:36
std::string ROUTER_MYSQL_EXPORT escape_backticks(const char *s, int length)
Definition: utils_sqlstring.cc:341
SqlStringFlags
Definition: utils_sqlstring.h:44
@ UseAnsiQuotes
Definition: utils_sqlstring.h:46
@ EndOfInput
Definition: utils_sqlstring.h:48
@ QuoteOnlyIfNeeded
Definition: utils_sqlstring.h:45
ROUTER_UTILS_EXPORT std::ostream & operator<<(std::ostream &strm, const URI &uri)
Definition: uri.cc:1207
std::string ROUTER_MYSQL_EXPORT quote_identifier(const std::string &identifier, const char quote_char)
Definition: utils_sqlstring.cc:387
const char * begin(const char *const c)
Definition: base64.h:44
std::string ROUTER_MYSQL_EXPORT quote_identifier_if_needed(const std::string &ident, const char quote_char)
Quotes the given identifier, but only if it needs to be quoted.
Definition: utils_sqlstring.cc:400
std::string ROUTER_MYSQL_EXPORT escape_sql_string(const char *s, bool wildcards=false)
Definition: utils_sqlstring.cc:329
const char * end(const char *const c)
Definition: base64.h:45
std::string ROUTER_CLUSTER_EXPORT to_string(const MetadataSchemaVersion &version)
Definition: cluster_metadata.cc:488
#define ROUTER_MYSQL_EXPORT
Definition: router_mysql_export.h:15