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:4517
 
#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:1078
 
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