27#ifndef SQL_LEX_HINTS_ICLUDED
28#define SQL_LEX_HINTS_ICLUDED
110 template <h
int_lex_
char_
classes Quote>
114 assert(*
ptr ==
'`' || *
ptr ==
'"' || *
ptr ==
'\'');
123 size_t double_separators = 0;
164 assert(0 < double_separators && double_separators <
yyleng);
169 if (double_separators > 0)
403 template <h
int_lex_
char_
classes Separator>
409 for (
const char *s = from, *
end = from + len; s <
end;) {
413 assert(hint_len > 1);
414 memcpy(t, s, hint_len);
425 memcpy(t, s,
end - s);
Lexical scanner for hint comments.
Definition: sql_lex_hints.h:57
sql_digest_state * digest_state
Digest buffer interface to append tokens.
Definition: sql_lex_hints.h:74
void adjust_token()
Definition: sql_lex_hints.h:393
Hint_scanner(THD *thd, size_t lineno_arg, const char *buf, size_t len, sql_digest_state *digest_state_arg)
Constructor.
Definition: sql_lex_hints.cc:53
int scan_ident()
Definition: sql_lex_hints.h:182
const char * raw_yytext
Current token (yytext) origin in the input_buf.
Definition: sql_lex_hints.h:80
int scan_multiplier_or_ident()
Definition: sql_lex_hints.h:200
size_t lineno
Definition: sql_lex_hints.h:61
int scan()
Definition: sql_lex_hints.cc:70
const char * input_buf
Definition: sql_lex_hints.h:64
bool eof() const
Definition: sql_lex_hints.h:319
int scan_quoted()
Definition: sql_lex_hints.h:111
void compact(LEX_STRING *to, const char *from, size_t len, size_t doubles)
Definition: sql_lex_hints.h:404
const hint_lex_char_classes * char_classes
Definition: sql_lex_hints.h:62
int scan_query_block_name()
Definition: sql_lex_hints.h:221
const CHARSET_INFO * cs
Definition: sql_lex_hints.h:59
hint_lex_char_classes peek_class() const
Definition: sql_lex_hints.h:329
void skip_byte()
Definition: sql_lex_hints.h:353
size_t yyleng
Length of the current token (see yytext)
Definition: sql_lex_hints.h:88
int scan_number_or_multiplier_or_ident()
Definition: sql_lex_hints.h:275
size_t get_lineno() const
Definition: sql_lex_hints.h:95
void skip_byte(char byte)
Skips the next byte.
Definition: sql_lex_hints.h:365
uchar get_byte()
Definition: sql_lex_hints.h:345
void add_digest(uint token)
Helper function to check digest buffer for overflow before adding tokens.
Definition: sql_lex_hints.h:451
const char * ptr
Definition: sql_lex_hints.h:67
bool has_hints
True if a hint comment is not empty (has any hints).
Definition: sql_lex_hints.h:90
const char * yytext
Current token pointer (may be converted allocated string outside input_buf.
Definition: sql_lex_hints.h:84
const char * get_ptr() const
Definition: sql_lex_hints.h:96
void skip_newline()
Definition: sql_lex_hints.h:339
const char * input_buf_end
Definition: sql_lex_hints.h:65
bool skip_mb()
Definition: sql_lex_hints.h:381
void skip_byte(const char *str)
Skips the next byte.
Definition: sql_lex_hints.h:376
hint_lex_char_classes peek_class2() const
Definition: sql_lex_hints.h:333
int scan_fraction_digits()
Definition: sql_lex_hints.h:297
THD * thd
Definition: sql_lex_hints.h:58
char peek_byte() const
Definition: sql_lex_hints.h:324
sql_digest_state * get_digest()
Definition: sql_lex_hints.h:97
int scan_ident_or_keyword()
Definition: sql_lex_hints.h:243
void syntax_warning(const char *msg) const
Push a warning message into MySQL error stack with line and position information.
Definition: sql_lex_hints.cc:136
void start_token()
Definition: sql_lex_hints.h:398
void add_hint_token_digest()
Add hint tokens to main lexer's digest calculation buffer.
Definition: sql_lex_hints.cc:149
int prev_token
Definition: sql_lex_hints.h:69
const bool is_ansi_quotes
Definition: sql_lex_hints.h:60
int get_next_token()
Definition: sql_lex_hints.h:100
static const Lex_hash hint_keywords
Definition: sql_lex_hash.h:48
const struct SYMBOL * get_hash_symbol(const char *s, unsigned int len) const
Definition: sql_lex_hash.cc:75
Definition: parse_tree_hints.h:98
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
void * alloc(size_t size)
Definition: sql_lexer_thd.h:48
bool convert_string(LEX_STRING *, const CHARSET_INFO *, const char *, size_t, const CHARSET_INFO *, bool=false)
Definition: sql_lexer_thd.h:41
const CHARSET_INFO * charset() const
Definition: sql_lexer_thd.h:40
char * strmake(const char *str, size_t size) const
Definition: sql_lexer_thd.h:50
bool charset_is_system_charset
is set if a statement accesses a temporary table created through CREATE TEMPORARY TABLE.
Definition: sql_class.h:2722
static struct wordvalue doubles[]
Definition: ctype-czech.cc:171
#define yylval
Definition: fts0pars.cc:68
A better implementation of the UNIX ctype(3) library.
static uint my_ismbchar(const CHARSET_INFO *cs, const char *str, const char *strend)
Definition: m_ctype.h:723
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1545
#define DBUG_TRACE
Definition: my_dbug.h:146
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:52
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1052
Definition: buf0block_hint.cc:30
Definition: commit_order_queue.h:34
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
hint_lex_char_classes
Definition: sql_chars.h:74
@ HINT_CHR_MB
Definition: sql_chars.h:84
@ HINT_CHR_NL
Definition: sql_chars.h:85
@ HINT_CHR_BACKQUOTE
Definition: sql_chars.h:77
@ HINT_CHR_DOUBLEQUOTE
Definition: sql_chars.h:81
@ HINT_CHR_QUOTE
Definition: sql_chars.h:86
@ HINT_CHR_DOT
Definition: sql_chars.h:80
@ HINT_CHR_ASTERISK
Definition: sql_chars.h:75
@ HINT_CHR_IDENT
Definition: sql_chars.h:83
@ HINT_CHR_SLASH
Definition: sql_chars.h:87
@ HINT_CHR_EOF
Definition: sql_chars.h:82
@ HINT_CHR_DIGIT
Definition: sql_chars.h:79
@ HINT_ARG_IDENT
Definition: sql_hints.yy.h:81
@ HINT_ARG_NUMBER
Definition: sql_hints.yy.h:80
@ HINT_ERROR
Definition: sql_hints.yy.h:86
@ HINT_IDENT_OR_NUMBER_WITH_SCALE
Definition: sql_hints.yy.h:84
@ HINT_ARG_TEXT
Definition: sql_hints.yy.h:83
@ HINT_ARG_FLOATING_POINT_NUMBER
Definition: sql_hints.yy.h:97
@ HINT_ARG_QB_NAME
Definition: sql_hints.yy.h:82
void HINT_PARSER_error(THD *, Hint_scanner *, PT_hint_list **, const char *msg)
Definition: sql_lex_hints.cc:118
int HINT_PARSER_lex(YYSTYPE *yacc_yylval, Hint_scanner *scanner)
Definition: sql_lex_hints.h:471
void hint_lex_init_maps(CHARSET_INFO *cs, hint_lex_char_classes *hint_map)
sql_digest_state * digest_add_token(sql_digest_state *, uint, Lexer_yystype *)
Definition: sql_lexer.cc:54
Definition: m_ctype.h:385
Definition: mysql_lex_string.h:35
char * str
Definition: mysql_lex_string.h:36
size_t length
Definition: mysql_lex_string.h:37
Definition: lex_symbol.h:39
const unsigned int length
Definition: lex_symbol.h:41
const unsigned int tok
Definition: lex_symbol.h:42
const char * name
Definition: lex_symbol.h:40
State data storage for digest_start, digest_add_token.
Definition: sql_digest_stream.h:36
unsigned int uint
Definition: uca9-dump.cc:75
Definition: lexer_yystype.h:33
LEX_STRING lex_str
Definition: lexer_yystype.h:34
Definition: parser_yystype.h:340