public static void Ctor_GivenNullIdentifierDefaults_ThrowsArgumentNullException() { var connection = Mock.Of <ISchematicConnection>(); var pragma = new ConnectionPragma(connection); Assert.That(() => new SqliteRelationalDatabase(connection, null, pragma), Throws.ArgumentNullException); }
/// <summary> /// Gets all database views. /// </summary> /// <param name="cancellationToken">A cancellation token.</param> /// <returns>A collection of database views.</returns> public virtual async IAsyncEnumerable <IDatabaseView> GetAllViews([EnumeratorCancellation] CancellationToken cancellationToken = default) { var dbNamesQuery = await ConnectionPragma.DatabaseListAsync(cancellationToken).ConfigureAwait(false); var dbNames = dbNamesQuery .OrderBy(d => d.seq) .Select(d => d.name) .ToList(); var qualifiedViewNames = new List <Identifier>(); foreach (var dbName in dbNames) { var sql = ViewsQuery(dbName); var queryResult = await DbConnection.QueryAsync <string>(sql, cancellationToken).ConfigureAwait(false); var viewNames = queryResult .Where(name => !IsReservedTableName(name)) .Select(name => Identifier.CreateQualifiedIdentifier(dbName, name)); qualifiedViewNames.AddRange(viewNames); } var orderedViewNames = qualifiedViewNames .OrderBy(v => v.Schema) .ThenBy(v => v.LocalName); foreach (var viewName in orderedViewNames) { yield return(await LoadViewAsyncCore(viewName, cancellationToken).ConfigureAwait(false)); } }
private async Task <Option <IDatabaseView> > GetViewAsyncCore(Identifier viewName, CancellationToken cancellationToken) { if (viewName.Schema != null) { return(await LoadView(viewName, cancellationToken) .ToOption() .ConfigureAwait(false)); } var dbNamesResult = await ConnectionPragma.DatabaseListAsync(cancellationToken).ConfigureAwait(false); var dbNames = dbNamesResult.OrderBy(l => l.seq).Select(l => l.name).ToList(); foreach (var dbName in dbNames) { var qualifiedViewName = Identifier.CreateQualifiedIdentifier(dbName, viewName.LocalName); var view = LoadView(qualifiedViewName, cancellationToken); var viewIsSome = await view.IsSome.ConfigureAwait(false); if (viewIsSome) { return(await view.ToOption().ConfigureAwait(false)); } } return(Option <IDatabaseView> .None); }
private async Task <Option <Identifier> > GetResolvedViewNameAsyncCore(Identifier viewName, CancellationToken cancellationToken) { if (viewName.Schema != null) { var sql = ViewNameQuery(viewName.Schema); var viewLocalName = await DbConnection.ExecuteScalarAsync <string>( sql, new { ViewName = viewName.LocalName }, cancellationToken ).ConfigureAwait(false); if (viewLocalName != null) { var dbList = await ConnectionPragma.DatabaseListAsync(cancellationToken).ConfigureAwait(false); var viewSchemaName = dbList .OrderBy(s => s.seq) .Select(s => s.name) .FirstOrDefault(s => string.Equals(s, viewName.Schema, StringComparison.OrdinalIgnoreCase)); if (viewSchemaName == null) { throw new InvalidOperationException("Unable to find a database matching the given schema name: " + viewName.Schema); } return(Option <Identifier> .Some(Identifier.CreateQualifiedIdentifier(viewSchemaName, viewLocalName))); } } var dbNamesResult = await ConnectionPragma.DatabaseListAsync(cancellationToken).ConfigureAwait(false); var dbNames = dbNamesResult .OrderBy(l => l.seq) .Select(l => l.name) .ToList(); foreach (var dbName in dbNames) { var sql = ViewNameQuery(dbName); var viewLocalName = await DbConnection.ExecuteScalarAsync <string>( sql, new { ViewName = viewName.LocalName }, cancellationToken ).ConfigureAwait(false); if (viewLocalName != null) { return(Option <Identifier> .Some(Identifier.CreateQualifiedIdentifier(dbName, viewLocalName))); } } return(Option <Identifier> .None); }