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();
}