using InABox.Core; namespace InABox.Database { public delegate void LogEvent(LogType type, string message); public interface IProvider { string URL { get; set; } Type[] Types { get; set; } Dictionary GetSchema(); void CreateSchema(params Type[] types); void UpgradeSchema(params Type[] types); void SaveSchema(Dictionary schema); void ForceRecreateViews(); void Start(); IEnumerable List(Filter? filter = null, Columns? columns = null, SortOrder? sort = null) where T : Entity, new(); CoreTable Query(Filter? filter = null, Columns? columns = null, SortOrder? sort = null, int top = int.MaxValue, bool log = false, bool distinct = false) where T : Entity, new(); /// /// Same as , but only for deleted items /// /// /// /// /// /// /// /// CoreTable QueryDeleted(Deletion deletion, Filter? filter = null, Columns? columns = null, SortOrder? sort = null, int top = int.MaxValue, bool deleted = false) where T : Entity, new(); T[] Load(Filter? filter = null, SortOrder? sort = null) where T : Entity, new(); void Save(T entity) where T : Entity; void Save(IEnumerable entities) where T : Entity; void Delete(T entity, string userID) where T : Entity, new(); void Delete(IEnumerable entities, string userID) where T : Entity, new(); void Purge(T entity) where T : Entity; void Purge(IEnumerable entities) where T : Entity; void Purge(Deletion deletion); void Recover(Deletion deletion); List GetDeletionTypes(Deletion deletion); event LogEvent OnLog; } }