mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
188 lines
6.7 KiB
C#
188 lines
6.7 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Runtime.Serialization;
|
|
using Arrowgene.Ddon.Shared;
|
|
|
|
namespace Arrowgene.Ddon.Database
|
|
{
|
|
[DataContract]
|
|
public class DatabaseSetting
|
|
{
|
|
public DatabaseSetting()
|
|
{
|
|
Type = "sqlite";
|
|
DatabaseFolder = Path.Combine(Util.ExecutingDirectory(), "Files/Database");
|
|
Host = "localhost";
|
|
Port = 3306;
|
|
Database = "Ddon";
|
|
User = string.Empty;
|
|
Password = string.Empty;
|
|
EnablePooling = true;
|
|
EnableTracing = true;
|
|
BufferSize = 32768;
|
|
// SQLite-only
|
|
WipeOnStartup = false;
|
|
// PSQL-only
|
|
NoResetOnClose = true;
|
|
// PSQL-only
|
|
MaxAutoPrepare = 200;
|
|
|
|
string envDbType = Environment.GetEnvironmentVariable("DB_TYPE");
|
|
if (!string.IsNullOrEmpty(envDbType))
|
|
{
|
|
Type = envDbType;
|
|
}
|
|
|
|
string envDbFolder = Environment.GetEnvironmentVariable("DB_FOLDER");
|
|
if (!string.IsNullOrEmpty(envDbFolder))
|
|
{
|
|
DatabaseFolder = envDbFolder;
|
|
}
|
|
|
|
string envDbHost = Environment.GetEnvironmentVariable("DB_HOST");
|
|
if (!string.IsNullOrEmpty(envDbHost))
|
|
{
|
|
Host = envDbHost;
|
|
}
|
|
|
|
string envDbPort = Environment.GetEnvironmentVariable("DB_PORT");
|
|
if (!string.IsNullOrEmpty(envDbPort))
|
|
{
|
|
Port = Convert.ToInt16(envDbPort);
|
|
}
|
|
|
|
string envDbDatabase = Environment.GetEnvironmentVariable("DB_DATABASE");
|
|
if (!string.IsNullOrEmpty(envDbDatabase))
|
|
{
|
|
Database = envDbDatabase;
|
|
}
|
|
|
|
string envDbUser = Environment.GetEnvironmentVariable("DB_USER");
|
|
if (!string.IsNullOrEmpty(envDbUser))
|
|
{
|
|
User = envDbUser;
|
|
}
|
|
|
|
string envDbPass = Environment.GetEnvironmentVariable("DB_PASS");
|
|
if (!string.IsNullOrEmpty(envDbPass))
|
|
{
|
|
Password = envDbPass;
|
|
}
|
|
|
|
string envDbEnablePooling = Environment.GetEnvironmentVariable("DB_ENABLE_POOLING");
|
|
if (!string.IsNullOrEmpty(envDbEnablePooling))
|
|
{
|
|
EnablePooling = Convert.ToBoolean(envDbEnablePooling);
|
|
}
|
|
|
|
// SQLite-only
|
|
string envDbWipeOnStartup = Environment.GetEnvironmentVariable("DB_WIPE_ON_STARTUP");
|
|
if (!string.IsNullOrEmpty(envDbWipeOnStartup))
|
|
{
|
|
WipeOnStartup = Convert.ToBoolean(envDbWipeOnStartup);
|
|
}
|
|
|
|
string envDbEnableTracing = Environment.GetEnvironmentVariable("DB_ENABLE_TRACING");
|
|
if (!string.IsNullOrEmpty(envDbEnableTracing))
|
|
{
|
|
EnableTracing = Convert.ToBoolean(envDbEnableTracing);
|
|
}
|
|
|
|
// PSQL-only
|
|
string envDbBufferSize = Environment.GetEnvironmentVariable("DB_BUFFER_SIZE");
|
|
if (!string.IsNullOrEmpty(envDbBufferSize))
|
|
{
|
|
BufferSize = Convert.ToUInt32(envDbBufferSize);
|
|
}
|
|
|
|
// PSQL-only
|
|
string envDbResetOnClose = Environment.GetEnvironmentVariable("DB_NO_RESET_ON_CLOSE");
|
|
if (!string.IsNullOrEmpty(envDbResetOnClose))
|
|
{
|
|
NoResetOnClose = Convert.ToBoolean(envDbResetOnClose);
|
|
}
|
|
|
|
// PSQL-only
|
|
string envDbMaxAutoPrepare = Environment.GetEnvironmentVariable("DB_MAX_AUTO_PREPARE");
|
|
if (!string.IsNullOrEmpty(envDbMaxAutoPrepare))
|
|
{
|
|
MaxAutoPrepare = Convert.ToUInt32(envDbMaxAutoPrepare);
|
|
}
|
|
}
|
|
|
|
public DatabaseSetting(DatabaseSetting databaseSettings)
|
|
{
|
|
Type = databaseSettings.Type;
|
|
DatabaseFolder = databaseSettings.DatabaseFolder;
|
|
Host = databaseSettings.Host;
|
|
Port = databaseSettings.Port;
|
|
User = databaseSettings.User;
|
|
Password = databaseSettings.Password;
|
|
Database = databaseSettings.Database;
|
|
WipeOnStartup = databaseSettings.WipeOnStartup;
|
|
BufferSize = databaseSettings.BufferSize;
|
|
|
|
// SQLite-only
|
|
EnableTracing = databaseSettings.EnableTracing;
|
|
|
|
// PSQL-only
|
|
NoResetOnClose = databaseSettings.NoResetOnClose;
|
|
MaxAutoPrepare = databaseSettings.MaxAutoPrepare;
|
|
}
|
|
|
|
[DataMember(Order = 0)] public string Type { get; set; }
|
|
|
|
[DataMember(Order = 1)] public string DatabaseFolder { get; set; }
|
|
|
|
[DataMember(Order = 2)] public string Host { get; set; }
|
|
|
|
[DataMember(Order = 3)] public short Port { get; set; }
|
|
|
|
[DataMember(Order = 4)] public string User { get; set; }
|
|
|
|
[DataMember(Order = 5)] public string Password { get; set; }
|
|
|
|
[DataMember(Order = 6)] public string Database { get; set; }
|
|
|
|
[DataMember(Order = 7)] public bool WipeOnStartup { get; set; }
|
|
|
|
/// <summary>
|
|
/// Behavior differs per DB:
|
|
/// - SQLite: Enable increased logging via trace events.
|
|
/// - PSQL: Enable IncludeErrorDetail.
|
|
/// </summary>
|
|
[DataMember(Order = 8)]
|
|
public bool EnableTracing { get; set; }
|
|
|
|
/// <summary>
|
|
/// Behavior differs per DB:
|
|
/// - SQLite: Adjust cache size in kibibytes. See: https://sqlite.org/pragma.html#pragma_cache_size
|
|
/// - PSQL: Adjust read, write, socket receive and socket send buffers. See: https://www.npgsql.org/doc/performance.html#reading-large-values
|
|
/// </summary>
|
|
[DataMember(Order = 9)]
|
|
public uint BufferSize { get; set; }
|
|
|
|
/// <summary>
|
|
/// PSQL-only setting to control "DISCARD ALL" usage.
|
|
/// https://www.npgsql.org/doc/performance.html#pooled-connection-reset
|
|
/// https://www.npgsql.org/doc/compatibility.html#pgbouncer
|
|
/// Set this to true when using PgBouncer.
|
|
/// </summary>
|
|
[DataMember(Order = 10)]
|
|
public bool NoResetOnClose { get; set; }
|
|
|
|
/// <summary>
|
|
/// Whether to enable built-in pooling at driver-level.
|
|
/// For use cases where an external connection pool exists e.g. PgBouncer this should be turned off.
|
|
/// </summary>
|
|
[DataMember(Order = 11)]
|
|
public bool EnablePooling { get; set; }
|
|
|
|
/// <summary>
|
|
/// PSQL-only setting to control how many statements to prepare and keep at most.
|
|
/// https://www.npgsql.org/doc/prepare.html#automatic-preparation
|
|
/// </summary>
|
|
[DataMember(Order = 12)]
|
|
public uint MaxAutoPrepare { get; set; }
|
|
}
|
|
}
|