using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Dbas.Data; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Data { //======================================================================= public abstract class SbmDbDataItem : DbDataItem { //------------------------------------------------------------------- // Definitions. /// /// Database information - object supplied by main application. /// NB Application may have multiple databases with schema differences. /// Each instance of a DbDataItem must be database specific. /// public class SbmDatabaseInfo : IDatabaseInfo { // Data members. private readonly List tables; private static readonly String defaultSchemaName = "dbo"; // Construction. public SbmDatabaseInfo(String databaseName, List tables) { this.DatabaseName = databaseName; this.tables = tables; } // Properties. public String DatabaseName { get; } public String Context { get { return StringUtil.OnEmpty(DatabaseName, "UnknownDb"); } } // Database schema. public DbDfnTable GetTableDefinition(String schemaName, String tableName) { foreach (DbDfnTable table in tables.FindAll(item => item.Name.EqualsCI(tableName))) { if (StringUtil.OnEmpty(table.Schema, defaultSchemaName).EqualsCI(StringUtil.OnEmpty(schemaName, defaultSchemaName))) return table; } return null; } public bool TableExists(String schemaName, String tableName) { return GetTableDefinition(schemaName, tableName) != null; } public bool ColumnExists(String schemaName, String tableName, String columnName) { DbDfnTable table = GetTableDefinition(schemaName, tableName); if (table == null) return false; return table.HasColumnByName(columnName); } public List GetColumnsForTable(String schemaName, String tableName) { DbDfnTable table = GetTableDefinition(schemaName, tableName); if (table != null) return table.Columns; return new List(); } } //------------------------------------------------------------------- // Construction. protected SbmDbDataItem(IDatabaseInfo dbInfo) : base(dbInfo) { } //------------------------------------------------------------------- } //======================================================================= }