Created by: Andrew
This commit is contained in:
Andrew
2016-08-27 22:43:23 -04:00
commit 6d74d5b59e
31 changed files with 3002 additions and 0 deletions

View File

@@ -0,0 +1,206 @@
using System;
using System.IO;
using MySql.Data.MySqlClient;
using System.Collections.Generic;
using System.Reflection;
using System.Diagnostics;
using KartExtreme.IO;
namespace KartExtreme.Data
{
public class TemporaryConnection : IDisposable
{
private string oldHost;
private string oldSchema;
private string oldUsername;
private string oldPassword;
internal TemporaryConnection(string host, string schema, string username, string password)
{
this.oldHost = Database.Host;
this.oldSchema = Database.Schema;
this.oldUsername = Database.Username;
this.oldPassword = Database.Password;
Database.Host = host;
Database.Schema = schema;
Database.Username = username;
Database.Password = password;
}
public void Dispose()
{
Database.Host = this.oldHost;
Database.Schema = this.oldSchema;
Database.Username = this.oldUsername;
Database.Password = this.oldPassword;
}
}
public class TemporarySchema : IDisposable
{
private string oldSchema;
internal TemporarySchema(string schema)
{
this.oldSchema = Database.Schema;
Database.Schema = schema;
}
public void Dispose()
{
Database.Schema = this.oldSchema;
}
}
public static class Database
{
public static string Host { get; set; }
public static string Schema { get; set; }
public static string Username { get; set; }
public static string Password { get; set; }
internal static string CorrectFields(string fields)
{
string final = string.Empty;
string[] tokens = fields.Replace(",", " ").Replace(";", " ").Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int processed = 0;
foreach (string field in tokens)
{
final += field;
processed++;
if (processed < tokens.Length)
{
final += ", ";
}
}
return final;
}
internal static string ConnectionString
{
get
{
return string.Format("server={0}; database={1}; uid={2}; password={3}; convertzerodatetime=yes;",
Database.Host,
Database.Schema,
Database.Username,
Database.Password);
}
}
internal static void Execute(string nonQuery, params object[] args)
{
MySqlHelper.ExecuteNonQuery(Database.ConnectionString, string.Format(nonQuery, args));
}
public static string DefaultSchema
{
get
{
string name = Assembly.GetEntryAssembly().GetName().Name;
switch (name)
{
case "WvsCenter":
return "wvsmaple-center";
case "WvsLogin":
return "wvsmaple-login";
default:
return "wvsmaple-game";
}
}
}
public static void Test()
{
using (MySqlConnection connection = new MySqlConnection(Database.ConnectionString))
{
connection.Open();
Log.Inform("Able to connect to database '{0}'.", connection.Database);
connection.Close();
}
}
public static void Analyze()
{
using (Database.TemporarySchema("information_schema"))
{
Meta.Initialize();
}
}
public static void Delete(string table, string constraints, params object[] args)
{
Database.Execute("DELETE FROM {0} WHERE {1}", table, string.Format(constraints, args));
}
public static bool Exists(string table, string constraints, params object[] args)
{
using (MySqlDataReader reader = MySqlHelper.ExecuteReader(Database.ConnectionString, string.Format("SELECT * FROM {0} WHERE {1}", table, string.Format(constraints, args))))
{
return reader.HasRows;
}
}
public static dynamic Fetch(string table, string field, string constraints, params object[] args)
{
object value = new Datum(table).PopulateWith(field, constraints, args).Dictionary[field];
if (value is DBNull)
{
return null;
}
else if (value is byte && Meta.IsBool(table, field))
{
return (byte)value > 0;
}
else
{
return value;
}
}
public static void ExecuteScript(string host, string username, string password, string query, params object[] args)
{
using (MySqlConnection connection = new MySqlConnection(string.Format("SERVER={0}; UID={1}; PASSWORD={2};", host, username, password)))
{
connection.Open();
new MySqlScript(connection, string.Format(query, args)).Execute();
connection.Close();
}
}
public static void ExecuteFile(string host, string username, string password, string path)
{
using (MySqlConnection connection = new MySqlConnection(string.Format("SERVER={0}; UID={1}; PASSWORD={2};", host, username, password)))
{
connection.Open();
using (TextReader reader = new StreamReader(path))
{
new MySqlScript(connection, reader.ReadToEnd()).Execute();
}
connection.Close();
}
}
public static TemporaryConnection TemporaryConnection(string host, string schema, string username, string password)
{
return new TemporaryConnection(host, schema, username, password);
}
public static TemporarySchema TemporarySchema(string schema)
{
return new TemporarySchema(schema);
}
}
}