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