public void ProcessTemplate()

in Configurator/Core/Ini/IniTemplate.cs [446:630]


    public void ProcessTemplate(bool isReconfigure = false, bool writeTemplate = true, bool skipExistingValues = false)
    {
      _formulaEngine.AssignFormulaVariable("basedir", string.Format("\"{0}\"", BaseDir));
      _formulaEngine.AssignFormulaVariable("datadir", Path.Combine(DataDir, "Data")); // String.Format("\"{0}\\data\\\"", DataDir));
      _formulaEngine.AssignFormulaVariable("port", Port.ToString());
      _formulaEngine.AssignFormulaVariable("socket", PipeName);
      _formulaEngine.AssignFormulaVariable("shared_memory_base_name", MemoryName);
      _formulaEngine.AssignFormulaVariable("default_storage_engine", DefaultStorageEngine);
      _formulaEngine.AssignFormulaVariable("default_character_set", DefaultCharacterSet);
      _formulaEngine.AssignFormulaVariable("myisam_percentage", MyisamUsage.ToString(CultureInfo.CurrentCulture));
      _formulaEngine.AssignFormulaVariable("innodb_buffer_pool_size_percentage", InnoDBBPSUsage.ToString(CultureInfo.CurrentCulture));
      _formulaEngine.AssignFormulaVariable("active_connections", NumberConnections.ToString(CultureInfo.CurrentCulture));
      _formulaEngine.AssignFormulaVariable("query_cache_pct", UseQueryCache.ToString(CultureInfo.CurrentCulture));
      _formulaEngine.AssignFormulaVariable("log_out", LogOutput);
      _formulaEngine.AssignFormulaVariable("gen_query", GeneralLog);
      _formulaEngine.AssignFormulaVariable("gen_query_file", GeneralLogFile);
      _formulaEngine.AssignFormulaVariable("slow_query", SlowQueryLog);
      _formulaEngine.AssignFormulaVariable("slow_query_file", SlowQueryLogFile);
      _formulaEngine.AssignFormulaVariable("long_query_time", LongQueryTime);
      _formulaEngine.AssignFormulaVariable("log_bin", LogBin);
      _formulaEngine.AssignFormulaVariable("log_error", LogError);
      _formulaEngine.AssignFormulaVariable("server_id", ServerId.HasValue ? ServerId.ToString() : string.Empty);
      _formulaEngine.AssignFormulaVariable("lower_case_table_names", ((int)LowerCaseTableNames).ToString());
      _formulaEngine.AssignFormulaVariable("bitedness", Win32.Is64BitOs ? "0" : "1");
      _formulaEngine.AssignFormulaVariable("secure_file_priv", SecureFilePriv);
      _formulaEngine.AssignFormulaVariable("plugin_load", PluginLoad);
      _formulaEngine.AssignFormulaVariable("mysqlx_port", MySqlXPort.ToString());
      _formulaEngine.AssignFormulaVariable("named_pipe_full_access_group", NamedPipeFullAccessGroup);
      
      // In this case we don't want the existing file to be replaced.
      if (!writeTemplate)
      {
        return;
      }

      if (File.Exists(ConfigurationFile) && !isReconfigure)
      {
        UpgradeIniFile(skipExistingValues);
        return;
      }

      var writer = new StreamWriter(ConfigurationFile);
      foreach (object obj in _output)
      {
        if (obj is IniTemplateVariable)
        {
          var itv = obj as IniTemplateVariable;
          string result;
          if (itv.Options != "NO_PARSE")
          {
            _formulaEngine.Parse(itv.Formula);
            try
            {
              result = _formulaEngine.Evaluate();
            }
            catch
            {
              itv.Disabled = true;
              result = itv.DefaultValue;
            }
          }
          else
          {
            result = itv.DefaultValue;
          }

          switch (itv.VariableName)
          {
            case "DEFAULT":
            case "STATE_CHANGE":
              // continue;
              break;

            case "CLIENT_PORT":
            case "SERVER_PORT":
              itv.Disabled = !EnableNetworking;
              break;

            case "SERVER_PIPE":
              itv.Disabled = !EnableNamedPipe;
              break;

            case "SHARED_MEMORY":
              itv.Disabled = !EnableSharedMemory;
              break;

            case "SHARED_MEMORY_BASE_NAME":
              itv.Disabled = !EnableSharedMemory;
              break;

            case "CLIENT_PIPE":
            case "CLIENT_SOCKET":
            case "SERVER_SOCKET":
              itv.Disabled = !EnableNamedPipe;
              break;

            case "SERVER_SKIP":
              itv.Disabled = EnableNetworking;
              break;

            case "QUERY_CACHE_SIZE":
              itv.Disabled = !EnableQueryCache;
              break;

            case "QUERY_CACHE_TYPE":
              itv.Disabled = !EnableQueryType;
              break;

            case "LOG_BIN":
              itv.Disabled = string.IsNullOrEmpty(LogBin);
              break;

            case "SERVER_ID":
              itv.Disabled = !ServerId.HasValue;
              break;

            case "SECURE_FILE_PRIV":
              itv.Disabled = string.IsNullOrEmpty(SecureFilePriv);
              break;

            case "PLUGIN_LOAD":
              itv.Disabled = string.IsNullOrEmpty(PluginLoad);
              break;

            case "LOOSE_MYSQLX_PORT":
              itv.Disabled = !ServerVersion.ServerSupportsXProtocol();
              break;

            case "SQL_MODE":
              itv.Disabled = true;
              break;

            case "INNODB_HOME":
              if (!string.IsNullOrEmpty(InnoDBHomeDir))
              {
                itv.Disabled = false;
                _formulaEngine.AssignFormulaVariable("innodb_home", InnoDBHomeDir);
              }
              else
              {
                itv.Disabled = true;
              }
              break;

            case "INNODB_LOG_FILE_SIZE":
              if (!string.IsNullOrEmpty(itv.DefaultValue))
              {
                result = itv.DefaultValue;
                itv.ReduceResult = false;
              }
              break;

            case "SKIP_INNODB":
              itv.Disabled = SkipInnodb;
              break;

            case "NAMED_PIPE_FULL_ACCESS_GROUP":
              itv.Disabled = !EnableNamedPipe;
              itv.SupportsEmptyResult = true;
              break;
          }

          if (itv.VariableName == "STATE_CHANGE" || !itv.Valid)
          {
            continue;
          }
          string assignment = string.Empty;
          if (result.Length > 0
              || itv.SupportsEmptyResult)
          {
            assignment = "=" + (itv.ReduceResult ? ReduceBytesToString(double.Parse(result)) : result);
          }

          writer.WriteLine((itv.Disabled ? "# " : string.Empty) + itv.OutputParameter + assignment);
        }
        else
        {
          var its = (IniTemplateStatic)obj;
          writer.WriteLine(its.LineAsRead);
        }
      }

      writer.Close();
      writer.Dispose();
    }