using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace TShockAPI.DB { public class SqlTable { public List Columns { get; protected set; } public string Name { get; protected set; } public SqlTable(string name, params SqlColumn[] columns) : this(name, new List(columns)) { } public SqlTable(string name, List columns) { Name = name; Columns = columns; } } public class SqlTableCreator { IDbConnection database; IQueryBuilder creator; public SqlTableCreator(IDbConnection db, IQueryBuilder provider) { database = db; creator = provider; } public void EnsureExists(SqlTable table) { var columns = GetColumns(table); if (columns.Count > 0) { if (table.Columns.All(c => columns.Contains(c.Name))) { } } else { database.Query(creator.CreateTable(table)); } } public List GetColumns(SqlTable table) { var ret = new List(); var name = database.GetSqlType(); if (name == SqlType.Sqlite) { using (var reader = database.QueryReader("PRAGMA table_info({0})".SFormat(table.Name))) { while (reader.Read()) ret.Add(reader.Get("name")); } } else if (name == SqlType.Mysql) { throw new NotImplementedException(); } else { throw new NotSupportedException(); } return ret; } } }