diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
commit | a175314c3e5827eb193872241446f2f8f5c9d33c (patch) | |
tree | cd3d60ca99ae00829c52a6ca79150a5b6e62528b /sql/vers_string.h | |
parent | Initial commit. (diff) | |
download | mariadb-10.5-upstream/1%10.5.12.tar.xz mariadb-10.5-upstream/1%10.5.12.zip |
Adding upstream version 1:10.5.12.upstream/1%10.5.12upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | sql/vers_string.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/sql/vers_string.h b/sql/vers_string.h new file mode 100644 index 00000000..4e173f86 --- /dev/null +++ b/sql/vers_string.h @@ -0,0 +1,82 @@ +/* + Copyright (c) 2018, 2020, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef VERS_STRING_INCLUDED +#define VERS_STRING_INCLUDED + +#include "lex_string.h" + +/* + LEX_CSTRING with comparison semantics. +*/ + +// db and table names: case sensitive (or insensitive) in table_alias_charset +struct Compare_table_names +{ + int operator()(const LEX_CSTRING& a, const LEX_CSTRING& b) const + { + DBUG_ASSERT(a.str[a.length] == 0); + DBUG_ASSERT(b.str[b.length] == 0); + return table_alias_charset->strnncoll(a.str, a.length, + b.str, b.length); + } +}; + +// column names and other identifiers: case insensitive in system_charset_info +struct Compare_identifiers +{ + int operator()(const LEX_CSTRING& a, const LEX_CSTRING& b) const + { + DBUG_ASSERT(a.str[a.length] == 0); + DBUG_ASSERT(b.str[b.length] == 0); + return my_strcasecmp(system_charset_info, a.str, b.str); + } +}; + + +template <class Compare> +struct Lex_cstring_with_compare : public Lex_cstring +{ +public: + Lex_cstring_with_compare() {} + Lex_cstring_with_compare(const char *_str, size_t _len) : + Lex_cstring(_str, _len) + { } + Lex_cstring_with_compare(const LEX_STRING src) : + Lex_cstring(src.str, src.length) + { } + Lex_cstring_with_compare(const LEX_CSTRING src) : Lex_cstring(src.str, src.length) + { } + Lex_cstring_with_compare(const char *_str) : Lex_cstring(_str, strlen(_str)) + { } + bool streq(const Lex_cstring_with_compare& b) const + { + return Lex_cstring::length == b.length && 0 == Compare()(*this, b); + } + operator const char* () const + { + return str; + } + operator bool () const + { + return str != NULL; + } +}; + +typedef Lex_cstring_with_compare<Compare_identifiers> Lex_ident; +typedef Lex_cstring_with_compare<Compare_table_names> Lex_table_name; + +#endif // VERS_STRING_INCLUDED |