using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using GB5Shared.Query.Framework.SchemaIntrospection; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.SchemaIntrospection; using GB5Shared.QueryExecutor; using GB5Shared.Validation; using static GB5Shared.GB5Constant.Constant; namespace GB5Shared.SchemaIntrospection { /// /// "Own DB" path of the Analytics Catalog Wizard (Phase 1) — introspects the SAME database /// the current request is already connected to via IQueryExecutor. No connection string /// involved; branches on LoginDTO.DatabaseType to pick SQL Server vs PostgreSQL SQL. /// public class SchemaIntrospectionDAL : ISchemaIntrospectionDAL { private readonly IQueryExecutor _queryExecutor; private readonly IValidation _validation; public SchemaIntrospectionDAL(IQueryExecutor queryExecutor, IValidation validation) { _queryExecutor = queryExecutor; _validation = validation; } public async Task> GetOwnDbColumnsAsync(LoginDTO login, CancellationToken ct) { try { string sql = login.DatabaseType == DBType.PostGre ? SchemaIntrospectionQB.GET_OWN_DB_COLUMNS_POSTGRES : SchemaIntrospectionQB.GET_OWN_DB_COLUMNS_SQLSERVER; return await _queryExecutor.QueryAsync( login, sql, null!, cancellationToken: ct).ConfigureAwait(false); } catch (Exception ex) { string error = await _validation.HandleException(ex, "Error retrieving own-DB schema columns").ConfigureAwait(false); throw new Exception(error); } } public async Task> GetOwnDbForeignKeysAsync(LoginDTO login, CancellationToken ct) { try { string sql = login.DatabaseType == DBType.PostGre ? SchemaIntrospectionQB.GET_OWN_DB_FOREIGNKEYS_POSTGRES : SchemaIntrospectionQB.GET_OWN_DB_FOREIGNKEYS_SQLSERVER; return await _queryExecutor.QueryAsync( login, sql, null!, cancellationToken: ct).ConfigureAwait(false); } catch (Exception ex) { string error = await _validation.HandleException(ex, "Error retrieving own-DB foreign keys").ConfigureAwait(false); throw new Exception(error); } } } }