#ifndef SQL_PATH_INCLUDED
#define SQL_PATH_INCLUDED
#include "sql_array.h"
#include "sql_list.h"
/* forward declarations */
class Database_qualified_name;
class sp_head;
class sp_name;
class Sp_handler;
struct MDL_key;
class Lex_ident_db_normalized;
struct Sql_path
{
private :
Lex_ident_db m_schemas[16 ];
uint m_count;
public :
Sql_path();
Sql_path& operator =(const Sql_path &rhs);
Sql_path& operator =(Sql_path &&rhs)
{
set(std::move(rhs));
return *this ;
}
Sql_path(const Sql_path&) = delete ;
Sql_path(Sql_path &&rhs)
{
m_count= 0 ;
set(std::move(rhs));
}
~Sql_path() { free(); }
bool resolve(THD *thd, sp_head *caller, sp_name *name,
const Sp_handler **sph, Database_qualified_name *pkgname) const ;
bool find_package_spec_type(THD *thd, Lex_ident_db_normalized *db,
const Lex_ident_sys_st &package,
const Lex_ident_sys_st &type);
/*
Initialize the path variable with default values
*/
bool init();
/*
Free the memory allocated by the path variable
*/
void free();
/*
Set the variable to the value of rhs , making a copy of the buffer
@ param rhs The path variable to copy from
*/
void set(const Sql_path &rhs);
/*
Set the variable to the value of rhs , moving the buffer
@ param rhs The path variable to move from
*/
void set(Sql_path &&rhs);
/*
Parse a string and set the path variable to the parsed value
The string is in my_charset_utf8mb3_general_ci .
@ param sv system_variables , local or global
@ param str The string to parse
*/
bool from_text(const system_variables &sv, String *str);
/*
Get the number of bytes needed to print the path variable
@ return The number of bytes needed
*/
size_t text_format_nbytes_needed() const ;
/*
Print the path variable to a string
@ param dst The destination buffer
@ param nbytes_available The number of bytes available in the buffer
@ return The number of bytes written
*/
size_t print(char *dst, size_t nbytes_available) const ;
LEX_CSTRING lex_cstring(MEM_ROOT *mem_root) const ;
private :
/*
Helper function to resolve CURRENT_SCHEMA to actual database name .
Returns the resolved schema , or { nullptr , 0 } if resolution fails .
*/
Lex_ident_db resolve_current_schema(THD *thd, sp_head *caller, size_t i) const ;
/*
Helper function to try resolving a routine in a specific schema .
Returns true if error occurred .
*/
bool try_resolve_in_schema(THD *thd, const Lex_ident_db_normalized &schema,
sp_name *name, const Sp_handler **sph,
Database_qualified_name *pkgname,
bool *resolved) const ;
LEX_CSTRING get_schema_for_print(size_t num) const ;
bool add_schema(char **to, bool is_quoted);
bool is_cur_schema(size_t i) const ;
};
class Sql_path_instant_set
{
THD *m_thd;
Sql_path m_path;
public :
Sql_path_instant_set(THD *thd, const LEX_CSTRING &str);
Sql_path_instant_set(THD *thd, const Sql_path &new_path);
~Sql_path_instant_set();
bool error() const { return m_thd; }
};
#endif /* SQL_PATH_INCLUDED */
Messung V0.5 in Prozent C=92 H=100 G=95
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(vorverarbeitet am 2026-10-08)
¤
*Bot Zugriff