• Alexander Barkov's avatar
    MDEV-31948 Add class DBNameBuffer, split check_db_name() into stages · b956a6a2
    Alexander Barkov authored
    - Adding a class Lex_ident_fs, to store identifiers for on-disk
      database objects, such as databases, tables, triggers.
    
    - Moving the validation code from check_db_name()
      to non-modifying methods in Lex_ident_fs:
    
        Lex_ident_fs::check_body()
        Lex_ident_fs::check_db_name()
    
      Adding a new method Lex_ident_fs::check_db_name_with_error(),
      which performs validation and raises an error on validation failure.
    
      Unlike the old function check_db_name(), the new class Lex_ident_fs
      does not lower-case the identifier during the validation.
      Lower-casing must be done before calling Lex_ident_fs validation methods.
    
    - Adding a low level helper template class CharBuffer which can:
      * store exact or lower-cased strings with a short fixed maximum length
      * return the value as a LEX_CSTRING efficiently
    
    - Adding a helper template class DBNameBuffer (deriving from CharBuffer), to
      allocate optionally lower-cased database identifiers on stack when relevant.
      Useful for temporary values which don't need to be allocated on MEM_ROOT.
    
    - Using DBNameBuffer in mysql_change_db()
    
    - Using DBNameBuffer in show_create_db()
    b956a6a2
sql_parse.cc 322 KB