/// <summary>
 /// Initializes a new instance of the <see cref="RelationalDatabase"/> class.
 /// </summary>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">An identifier resolver to use when an object cannot be found using the given name.</param>
 /// <param name="tables">A collection of database tables.</param>
 /// <param name="views">A collection of database views.</param>
 /// <param name="sequences">A collection of database sequences.</param>
 /// <param name="synonyms">A collection of database synonyms.</param>
 /// <param name="routines">A collection of database routines.</param>
 /// <exception cref="ArgumentNullException"><paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
 public RelationalDatabase(
     IIdentifierDefaults identifierDefaults,
     IIdentifierResolutionStrategy identifierResolver,
     IEnumerable <IRelationalDatabaseTable> tables,
     IEnumerable <IDatabaseView> views,
     IEnumerable <IDatabaseSequence> sequences,
     IEnumerable <IDatabaseSynonym> synonyms,
     IEnumerable <IDatabaseRoutine> routines
     )
 {
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
     Tables             = tables?.ToList() ?? throw new ArgumentNullException(nameof(tables));
     Views     = views?.ToList() ?? throw new ArgumentNullException(nameof(views));
     Sequences = sequences?.ToList() ?? throw new ArgumentNullException(nameof(sequences));
     Synonyms  = synonyms?.ToList() ?? throw new ArgumentNullException(nameof(synonyms));
     Routines  = routines?.ToList() ?? throw new ArgumentNullException(nameof(routines));
 }
Beispiel #2
0
        // TODO: update this so that it deserialises in async way
        public Task <IRelationalDatabase> DeserializeAsync(string input, IIdentifierResolutionStrategy identifierResolver, CancellationToken cancellationToken = default)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            var dto = JsonSerializer.Deserialize <Dto.RelationalDatabase>(input, _settings.Value);

            dto.IdentifierResolver = identifierResolver;
            var db = Mapper.Map <Dto.RelationalDatabase, RelationalDatabase>(dto);

            return(Task.FromResult <IRelationalDatabase>(db));
        }
Beispiel #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OracleDatabaseViewProvider"/> class.
        /// </summary>
        /// <param name="connection">A schematic connection.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public OracleDatabaseViewProvider(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (identifierDefaults == null)
            {
                throw new ArgumentNullException(nameof(identifierDefaults));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            QueryViewProvider        = new OracleDatabaseQueryViewProvider(connection, identifierDefaults, identifierResolver);
            MaterializedViewProvider = new OracleDatabaseMaterializedViewProvider(connection, identifierDefaults, identifierResolver);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PostgreSqlViewCommentProvider"/> class.
        /// </summary>
        /// <param name="connection">A database connection factory.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public PostgreSqlViewCommentProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (identifierDefaults == null)
            {
                throw new ArgumentNullException(nameof(identifierDefaults));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            QueryViewCommentProvider        = new PostgreSqlQueryViewCommentProvider(connection, identifierDefaults, identifierResolver);
            MaterializedViewCommentProvider = new PostgreSqlMaterializedViewCommentProvider(connection, identifierDefaults, identifierResolver);
        }
Beispiel #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OracleMaterializedViewCommentProvider"/> class.
 /// </summary>
 /// <param name="connection">A database connection factory.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">An identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
 public OracleMaterializedViewCommentProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
 {
     Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }
Beispiel #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostgreSqlSequenceCommentProvider"/> class.
 /// </summary>
 /// <param name="connection">A database connection factory.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">An identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
 public PostgreSqlSequenceCommentProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
 {
     Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }
Beispiel #7
0
        /// <summary>
        /// Gets a check constraint lookup.
        /// </summary>
        /// <param name="table">A database table.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <returns>A lookup keyed by check constraint names, whose values are the associated check constraints.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="table"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
        public static IReadOnlyDictionary <Identifier, IDatabaseCheckConstraint> GetCheckLookup(this IRelationalDatabaseTable table, IIdentifierResolutionStrategy identifierResolver)
        {
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            var lookup = GetCheckLookup(table);

            return(new IdentifierResolvingDictionary <IDatabaseCheckConstraint>(lookup, identifierResolver));
        }
        private static async Task <IRelationalDatabase> SnapshotAsyncCore(IRelationalDatabase database, IIdentifierResolutionStrategy identifierResolver, CancellationToken cancellationToken)
        {
            var tablesTask    = database.GetAllTables(cancellationToken).ToListAsync(cancellationToken).AsTask();
            var viewsTask     = database.GetAllViews(cancellationToken).ToListAsync(cancellationToken).AsTask();
            var sequencesTask = database.GetAllSequences(cancellationToken).ToListAsync(cancellationToken).AsTask();
            var synonymsTask  = database.GetAllSynonyms(cancellationToken).ToListAsync(cancellationToken).AsTask();
            var routinesTask  = database.GetAllRoutines(cancellationToken).ToListAsync(cancellationToken).AsTask();

            await Task.WhenAll(new Task[] { tablesTask, viewsTask, sequencesTask, synonymsTask, routinesTask }).ConfigureAwait(false);

            var tables = await tablesTask.ConfigureAwait(false);

            var views = await viewsTask.ConfigureAwait(false);

            var sequences = await sequencesTask.ConfigureAwait(false);

            var synonyms = await synonymsTask.ConfigureAwait(false);

            var routines = await routinesTask.ConfigureAwait(false);

            return(new RelationalDatabase(
                       database.IdentifierDefaults,
                       identifierResolver,
                       tables,
                       views,
                       sequences,
                       synonyms,
                       routines
                       ));
        }
Beispiel #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostgreSqlRelationalDatabaseTableProvider"/> class.
 /// </summary>
 /// <param name="connection">A schematic connection.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">A database identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
 public PostgreSqlRelationalDatabaseTableProvider(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
     : base(connection, identifierDefaults, identifierResolver)
 {
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="PostgreSqlRelationalDatabase"/> class.
        /// </summary>
        /// <param name="connection">A schematic connection.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public PostgreSqlRelationalDatabase(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));

            _tableProvider    = new PostgreSqlRelationalDatabaseTableProvider(connection, identifierDefaults, identifierResolver);
            _viewProvider     = new PostgreSqlDatabaseViewProvider(connection, identifierDefaults, identifierResolver);
            _sequenceProvider = new PostgreSqlDatabaseSequenceProvider(connection, identifierDefaults, identifierResolver);
            _routineProvider  = new PostgreSqlDatabaseRoutineProvider(connection.DbConnection, identifierDefaults, identifierResolver);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="PostgreSqlDatabaseSequenceProvider"/> class.
        /// </summary>
        /// <param name="connection">A schematic connection.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public PostgreSqlDatabaseSequenceProvider(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
            IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
            IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));

            _sequenceProvider = new AsyncLazy <Option <IDatabaseSequenceProvider> >(LoadVersionedSequenceProvider);
        }
Beispiel #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IdentifierResolvingDictionary{TValue}"/> class.
 /// </summary>
 /// <param name="dictionary">A dictionary.</param>
 /// <param name="identifierResolver">An identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="dictionary"/> or <paramref name="identifierResolver"/> is <c>null</c></exception>
 public IdentifierResolvingDictionary(IReadOnlyDictionary <Identifier, TValue> dictionary, IIdentifierResolutionStrategy identifierResolver)
 {
     _dictionary         = dictionary ?? throw new ArgumentNullException(nameof(dictionary));
     _identifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="OracleDatabasePackageProvider"/> class.
 /// </summary>
 /// <param name="connection">A database connection factory.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">Database identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
 public OracleDatabasePackageProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
 {
     Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="OracleDatabaseQueryViewProvider"/> class.
 /// </summary>
 /// <param name="connection">A schematic connection.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">An identifier resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
 public OracleDatabaseQueryViewProvider(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
 {
     Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="PostgreSqlDatabaseCommentProvider"/> class.
        /// </summary>
        /// <param name="connection">A database connection factory.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public PostgreSqlDatabaseCommentProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (identifierDefaults == null)
            {
                throw new ArgumentNullException(nameof(identifierDefaults));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            _tableCommentProvider    = new PostgreSqlTableCommentProvider(connection, identifierDefaults, identifierResolver);
            _viewCommentProvider     = new PostgreSqlViewCommentProvider(connection, identifierDefaults, identifierResolver);
            _sequenceCommentProvider = new PostgreSqlSequenceCommentProvider(connection, identifierDefaults, identifierResolver);
            _routineCommentProvider  = new PostgreSqlRoutineCommentProvider(connection, identifierDefaults, identifierResolver);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PostgreSqlDatabaseSequenceProvider"/> class.
 /// </summary>
 /// <param name="connection">A database connection factory.</param>
 /// <param name="identifierDefaults">Database identifier defaults.</param>
 /// <param name="identifierResolver">An identifier resolver.</param>
 public PostgreSqlDatabaseSequenceProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
     : base(connection, identifierDefaults, identifierResolver)
 {
 }
Beispiel #17
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OracleDatabaseRoutineProvider"/> class.
        /// </summary>
        /// <param name="connection">A database connection factory.</param>
        /// <param name="identifierDefaults">Database identifier defaults.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
        public OracleDatabaseRoutineProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (identifierDefaults == null)
            {
                throw new ArgumentNullException(nameof(identifierDefaults));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            SimpleRoutineProvider = new OracleDatabaseSimpleRoutineProvider(connection, identifierDefaults, identifierResolver);
            PackageProvider       = new OracleDatabasePackageProvider(connection, identifierDefaults, identifierResolver);
        }
        /// <summary>
        /// Gets a database column lookup.
        /// </summary>
        /// <param name="view">A database view.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <returns>A lookup keyed by column names, whose values are the associated columns.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="view"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
        public static IReadOnlyDictionary <Identifier, IDatabaseColumn> GetColumnLookup(this IDatabaseView view, IIdentifierResolutionStrategy identifierResolver)
        {
            if (view == null)
            {
                throw new ArgumentNullException(nameof(view));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            var lookup = GetColumnLookup(view);

            return(new IdentifierResolvingDictionary <IDatabaseColumn>(lookup, identifierResolver));
        }
        /// <summary>
        /// Snapshots a relational database. Preserves the same behaviour, but enables querying in-memory, avoiding further database calls.
        /// </summary>
        /// <param name="database">A relational database.</param>
        /// <param name="identifierResolver">An identifier resolver to use when an object cannot be found using the given name.</param>
        /// <param name="cancellationToken">A cancellation token.</param>
        /// <returns>A relational database with the same data as <paramref name="database"/>, but serialized into an in-memory copy.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="database"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
        public static Task <IRelationalDatabase> SnapshotAsync(IRelationalDatabase database, IIdentifierResolutionStrategy identifierResolver, CancellationToken cancellationToken = default)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            return(SnapshotAsyncCore(database, identifierResolver, cancellationToken));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="OracleDatabaseCommentProvider"/> class.
        /// </summary>
        /// <param name="connection">A database connection.</param>
        /// <param name="identifierDefaults">Identifier defaults for the associated database.</param>
        /// <param name="identifierResolver">An identifier resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception>
        public OracleDatabaseCommentProvider(IDbConnectionFactory connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (identifierDefaults == null)
            {
                throw new ArgumentNullException(nameof(identifierDefaults));
            }
            if (identifierResolver == null)
            {
                throw new ArgumentNullException(nameof(identifierResolver));
            }

            _tableCommentProvider = new OracleTableCommentProvider(connection, identifierDefaults, identifierResolver);
            _viewCommentProvider  = new OracleViewCommentProvider(connection, identifierDefaults, identifierResolver);
        }
Beispiel #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostgreSqlDatabaseMaterializedViewProvider"/> class.
 /// </summary>
 /// <param name="connection">A database connection.</param>
 /// <param name="identifierDefaults">Identifier defaults for the associated database.</param>
 /// <param name="identifierResolver">An identifier resolver that enables non-strict name resolution.</param>
 /// <exception cref="ArgumentNullException"><paramref name="connection"/> or <paramref name="identifierDefaults"/> or <paramref name="identifierResolver"/> are <c>null</c>.</exception>
 public PostgreSqlDatabaseMaterializedViewProvider(ISchematicConnection connection, IIdentifierDefaults identifierDefaults, IIdentifierResolutionStrategy identifierResolver)
 {
     Connection         = connection ?? throw new ArgumentNullException(nameof(connection));
     IdentifierDefaults = identifierDefaults ?? throw new ArgumentNullException(nameof(identifierDefaults));
     IdentifierResolver = identifierResolver ?? throw new ArgumentNullException(nameof(identifierResolver));
 }