98 lines
3.5 KiB
C#
98 lines
3.5 KiB
C#
using MySqlConnector;
|
|
using SharpChat.Config;
|
|
|
|
namespace SharpChat.EventStorage {
|
|
public partial class MariaDBEventStorage {
|
|
public static string BuildConnString(IConfig config) {
|
|
return BuildConnString(
|
|
config.ReadValue("host", "localhost") ?? string.Empty,
|
|
config.ReadValue("user") ?? string.Empty,
|
|
config.ReadValue("pass") ?? string.Empty,
|
|
config.ReadValue("db", "sharpchat") ?? string.Empty
|
|
);
|
|
}
|
|
|
|
public static string BuildConnString(string host, string username, string password, string database) {
|
|
return new MySqlConnectionStringBuilder {
|
|
Server = host,
|
|
UserID = username,
|
|
Password = password,
|
|
Database = database,
|
|
OldGuids = false,
|
|
TreatTinyAsBoolean = false,
|
|
CharacterSet = "utf8mb4",
|
|
SslMode = MySqlSslMode.None,
|
|
ForceSynchronous = true,
|
|
ConnectionTimeout = 5,
|
|
}.ToString();
|
|
}
|
|
|
|
private MySqlConnection GetConnection() {
|
|
MySqlConnection conn = new(ConnectionString);
|
|
conn.Open();
|
|
return conn;
|
|
}
|
|
|
|
private int RunCommand(string command, params MySqlParameter[] parameters) {
|
|
try {
|
|
using MySqlConnection conn = GetConnection();
|
|
using MySqlCommand cmd = conn.CreateCommand();
|
|
if(parameters?.Length > 0)
|
|
cmd.Parameters.AddRange(parameters);
|
|
cmd.CommandText = command;
|
|
return cmd.ExecuteNonQuery();
|
|
} catch(MySqlException ex) {
|
|
Logger.Write(ex);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
private int RunMigrationCommand(string command, params MySqlParameter[] parameters) {
|
|
try {
|
|
using MySqlConnection conn = GetConnection();
|
|
using MySqlCommand cmd = conn.CreateCommand();
|
|
cmd.CommandTimeout = 0;
|
|
if(parameters?.Length > 0)
|
|
cmd.Parameters.AddRange(parameters);
|
|
cmd.CommandText = command;
|
|
return cmd.ExecuteNonQuery();
|
|
} catch(MySqlException ex) {
|
|
Logger.Write(ex);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
private MySqlDataReader? RunQuery(string command, params MySqlParameter[] parameters) {
|
|
try {
|
|
MySqlConnection conn = GetConnection();
|
|
MySqlCommand cmd = conn.CreateCommand();
|
|
if(parameters?.Length > 0)
|
|
cmd.Parameters.AddRange(parameters);
|
|
cmd.CommandText = command;
|
|
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
|
|
} catch(MySqlException ex) {
|
|
Logger.Write(ex);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private object? RunQueryValue(string command, params MySqlParameter[] parameters) {
|
|
try {
|
|
using MySqlConnection conn = GetConnection();
|
|
using MySqlCommand cmd = conn.CreateCommand();
|
|
if(parameters?.Length > 0)
|
|
cmd.Parameters.AddRange(parameters);
|
|
cmd.CommandText = command;
|
|
cmd.Prepare();
|
|
return cmd.ExecuteScalar();
|
|
} catch(MySqlException ex) {
|
|
Logger.Write(ex);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|