Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  upgrade_conf_file.cc   Sprache: C

 

/*
   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 Street, Fifth Floor, Boston, MA 02111-1301 USA */



/*
  Variables that were present in older releases, but are now removed.
  to get the list of variables that are present in current release
  execute

  SELECT LOWER(variable_name) from INFORMATION_SCHEMA.GLOBAL_VARIABLES ORDER BY 1

  Compare the list between releases to figure out which variables have gone.

  Note : the list below only includes the default-compiled server and none of the
  loadable plugins.
*/

#include <my_global.h>
#include <my_sys.h>
#include <windows.h>
#include <initializer_list>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>

static const char *removed_variables[] =
{
"aria_recover",
"debug_crc_break",
"engine_condition_pushdown",
"have_csv",
"have_innodb",
"have_ndbcluster",
"have_partitioning",
"innodb_adaptive_flushing_method",
"innodb_adaptive_hash_index_partitions",
"innodb_adaptive_max_sleep_delay",
"innodb_additional_mem_pool_size",
"innodb_api_bk_commit_interval",
"innodb_api_disable_rowlock",
"innodb_api_enable_binlog",
"innodb_api_enable_mdl",
"innodb_api_trx_level",
"innodb_background_scrub_data_check_interval",
"innodb_background_scrub_data_compressed",
"innodb_background_scrub_data_interval",
"innodb_background_scrub_data_uncompressed",
"innodb_blocking_buffer_pool_restore",
"innodb_buffer_pool_instances",
"innodb_buffer_pool_populate",
"innodb_buffer_pool_restore_at_startup",
"innodb_buffer_pool_shm_checksum",
"innodb_buffer_pool_shm_key",
"innodb_checkpoint_age_target",
"innodb_checksums",
"innodb_cleaner_eviction_factor",
"innodb_cleaner_flush_chunk_size",
"innodb_cleaner_free_list_lwm",
"innodb_cleaner_lru_chunk_size",
"innodb_cleaner_lsn_age_factor",
"innodb_cleaner_max_flush_time",
"innodb_cleaner_max_lru_time",
"innodb_commit_concurrency",
"innodb_concurrency_tickets",
"innodb_corrupt_table_action",
"innodb_dict_size_limit",
"innodb_doublewrite_file",
"innodb_empty_free_list_algorithm",
"innodb_fake_changes",
"innodb_fast_checksum",
"innodb_file_format",
"innodb_file_format_check",
"innodb_file_format_max",
"innodb_flush_neighbor_pages",
"innodb_force_load_corrupted",
"innodb_foreground_preflush",
"innodb_ibuf_accel_rate",
"innodb_ibuf_active_contract",
"innodb_ibuf_max_size",
"innodb_idle_flush_pct",
"innodb_import_table_from_xtrabackup",
"innodb_instrument_semaphores",
"innodb_kill_idle_transaction",
"innodb_large_prefix",
"innodb_lazy_drop_table",
"innodb_locking_fake_changes",
"innodb_locks_unsafe_for_binlog",
"innodb_log_arch_dir",
"innodb_log_arch_expire_sec",
"innodb_log_block_size",
"innodb_log_checksum_algorithm",
"innodb_log_checksums",
"innodb_log_compressed_pages",
"innodb_log_files_in_group",
"innodb_log_optimize_ddl",
"innodb_max_bitmap_file_size",
"innodb_max_changed_pages",
"innodb_merge_sort_block_size",
"innodb_mirrored_log_groups",
"innodb_mtflush_threads",
"innodb_page_cleaners",
"innodb_persistent_stats_root_page",
"innodb_print_lock_wait_timeout_info",
"innodb_purge_run_now",
"innodb_purge_stop_now",
"innodb_read_ahead",
"innodb_recovery_stats",
"innodb_recovery_update_relay_log",
"innodb_replication_delay",
"innodb_rollback_segments",
"innodb_scrub_log",
"innodb_scrub_log_speed",
"innodb_show_locks_held",
"innodb_show_verbose_locks",
"innodb_stats_auto_update",
"innodb_stats_sample_pages",
"innodb_stats_update_need_lock",
"innodb_support_xa",
"innodb_sync_array_size",
"innodb_thread_concurrency",
"innodb_thread_concurrency_timer_based",
"innodb_thread_sleep_delay",
"innodb_track_changed_pages",
"innodb_track_redo_log_now",
"innodb_undo_logs",
"innodb_use_fallocate",
"innodb_use_global_flush_log_at_trx_commit",
"innodb_use_mtflush",
"innodb_use_stacktrace",
"innodb_use_sys_malloc",
"innodb_use_sys_stats_table",
"innodb_use_trim",
"log",
"log_slow_queries",
"max_long_data_size",
"multi_range_count",
"rpl_recovery_rank",
"skip_bdb",
"sql_big_tables",
"sql_low_priority_updates",
"sql_max_join_size",
"thread_concurrency",
"timed_mutexes"
};


static int cmp_strings(const void* a, const void *b)
{
  return strcmp((const char *)a, *(const char **)b);
}


#define MY_INI_SECTION_SIZE 32 * 1024 + 3

static bool is_utf8_str(const char *s)
{
  MY_STRCOPY_STATUS status;
  const struct charset_info_st *cs= &my_charset_utf8mb4_bin;
  size_t len= strlen(s);
  if (!len)
    return true;
  cs->cset->well_formed_char_length(cs, s, s + len, len, &status);
  return status.m_well_formed_error_pos == nullptr;
}


static UINT get_system_acp()
{
  static DWORD system_acp;
  if (system_acp)
    return system_acp;

  char str_cp[10];
  int cch= GetLocaleInfo(GetSystemDefaultLCID(), LOCALE_IDEFAULTANSICODEPAGE,
                         str_cp, sizeof(str_cp));

  system_acp= cch > 0 ? atoi(str_cp) : 1252;

  return system_acp;
}


static char *ansi_to_utf8(const char *s)
{
#define MAX_STR_LEN MY_INI_SECTION_SIZE
  static wchar_t utf16_buf[MAX_STR_LEN];
  static char utf8_buf[MAX_STR_LEN];
  if (MultiByteToWideChar(get_system_acp(), 0, s, -1, utf16_buf, MAX_STR_LEN))
  {
    if (WideCharToMultiByte(CP_UTF8, 0, utf16_buf, -1, utf8_buf, MAX_STR_LEN,
                            0, 0))
      return utf8_buf;
  }
  return 0;
}

int fix_section(const char *myini_path, const char *section_name,
                bool is_server)
{
  if (!is_server && GetACP() != CP_UTF8)
    return 0;

  static char section_data[MY_INI_SECTION_SIZE];
  DWORD size= GetPrivateProfileSection(section_name, section_data,
                                       MY_INI_SECTION_SIZE, myini_path);
  if (size == MY_INI_SECTION_SIZE - 2)
  {
    return -1;
  }

  for (char *keyval= section_data; *keyval; keyval += strlen(keyval)+1)
  {
    char varname[256];
    char *value;
    char *key_end= strchr(keyval, '=');
    if (!key_end)
      key_end= keyval + strlen(keyval);

    if (key_end - keyval > sizeof(varname))
      continue;

    value= key_end + 1;
    if (GetACP() == CP_UTF8 && !is_utf8_str(value))
    {
      /*Convert a value, if it is not already UTF-8*/
      char *new_val= ansi_to_utf8(value);
      if (new_val)
      {
        *key_end= 0;
        fprintf(stdout, "Fixing variable '%s' charset, value=%s\n", keyval,
                new_val);
        WritePrivateProfileString(section_name, keyval, new_val, myini_path);
        *key_end= '=';
      }
    }
    if (!is_server)
      continue;

    // Check if variable should be removed from config.
    // First, copy and normalize (convert dash to underscore) to  variable
    // names
    for (char *p= keyval, *q= varname;; p++, q++)
    {
      if (p == key_end)
      {
        *q= 0;
        break;
      }
      *q= (*p == '-') ? '_' : *p;
    }
    const char *v= (const char *) bsearch(varname, removed_variables, sizeof(removed_variables) / sizeof(removed_variables[0]),
                                          sizeof(char *), cmp_strings);

    if (v)
    {
      fprintf(stdout, "Removing variable '%s' from config file\n", varname);
      // delete variable
      *key_end= 0;
      WritePrivateProfileString(section_name, keyval, 0, myini_path);
    }
  }
  return 0;
}

static bool is_mariadb_section(const char *name, bool *is_server)
{
  if (strncmp(name, "mysql", 5)
      && strncmp(name, "mariadb", 7)
      && strcmp(name, "client")
      && strcmp(name, "client-server")
      && strcmp(name, "server"))
  {
    return false;
  }

  for (const char *section_name : {"mysqld", "server", "mariadb"})
    if (*is_server= !strcmp(section_name, name))
      break;

  return true;
}


/**
  Convert file from a previous version, by removing obsolete variables
  Also, fix values to be UTF8, if MariaDB is running in utf8 mode
*/

int upgrade_config_file(const char *myini_path)
{
  static char all_sections[MY_INI_SECTION_SIZE];
  int sz= GetPrivateProfileSectionNamesA(all_sections, MY_INI_SECTION_SIZE,
                                         myini_path);
  if (!sz)
    return 0;
  if (sz > MY_INI_SECTION_SIZE - 2)
  {
    fprintf(stderr, "Too many sections in config file\n");
    return -1;
  }
  for (char *section= all_sections; *section; section+= strlen(section) + 1)
  {
    bool is_server_section;
    if (is_mariadb_section(section, &is_server_section))
      fix_section(myini_path, section, is_server_section);
  }
  return 0;
}

Messung V0.5 in Prozent
C=98 H=93 G=95

¤ Dauer der Verarbeitung: 0.36 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

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.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1867298