public async Task <Stream> OpenReadAsync(SqlItem item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } if (item.Id == Guid.Empty) { throw new UnauthorizedAccessException(); } using (var reader = await SqlExtensions.ExecuteReaderAsync(ConnectionString, "SELECT Data FROM Item WHERE Id = @id", new { id = item.Id }, Logger).ConfigureAwait(false)) { if (!reader.Read()) { return(null); } if (await reader.IsDBNullAsync(0)) { return(null); } // it's a pitty GetFieldValueAsync<Stream> doesn't work... https://github.com/dotnet/runtime/issues/28596#issuecomment-484614943 return(reader.GetSqlBytes(0).Stream); } }
private async Task <bool> ExistsNameAsync(Guid parentId, string name) { using (var reader = await SqlExtensions.ExecuteReaderAsync(ConnectionString, "SELECT 1 FROM Item WHERE ParentId = @id AND Name=@name", new { id = parentId, name }, Logger).ConfigureAwait(false)) { return(await reader.ReadAsync()); } }
public async IAsyncEnumerable <IFileSystemEvent> EnumerateChangesAsync(DateTime startTime) { using (var reader = await SqlExtensions.ExecuteReaderAsync(ConnectionString, "SELECT Id, ItemId, ParentId, Type, CreationTimeUtc, OldName FROM Change WHERE CreationTimeUtc > @startTime", new { startTime = startTime.ToUniversalTime() }, Logger).ConfigureAwait(false)) { while (reader.Read()) { yield return(new Event(reader)); } } }
private async Task <SqlItem> GetSqlItemAsync(Guid parentId, string name) { using (var reader = await SqlExtensions.ExecuteReaderAsync(ConnectionString, "SELECT Id, ParentId, Name, LastAccessTimeUtc, CreationTimeUtc, LastWriteTimeUtc, Attributes, DATALENGTH(Data) AS Length FROM Item WHERE ParentId = @id AND Name=@name", new { id = parentId, name }, Logger).ConfigureAwait(false)) { if (reader.Read()) { return(NewItem(reader)); } return(null); } }
public async IAsyncEnumerable <SqlItem> EnumerateAsync(SqlItem parentItem, EnumerateOptions options = null) { options ??= new EnumerateOptions(); string and; if (options.IncludeFiles) { if (options.IncludeFolders) { and = null; } else { and = " AND (Attributes & " + (int)FileAttributes.Directory + ") = 0"; } } else { if (options.IncludeFolders) { and = " AND (Attributes & " + (int)FileAttributes.Directory + ") <> 0"; } else { yield break; } } if (!options.IncludeHidden) { and += " AND (Attributes & " + (int)FileAttributes.Hidden + ") = 0"; } using (var reader = await SqlExtensions.ExecuteReaderAsync(ConnectionString, "SELECT Id, ParentId, Name, LastAccessTimeUtc, CreationTimeUtc, LastWriteTimeUtc, Attributes, DATALENGTH(Data) AS Length FROM Item WHERE ParentId = @id AND Id <> '00000000-0000-0000-0000-000000000000'" + and, new { id = parentItem.Id }, Logger).ConfigureAwait(false)) { while (reader.Read()) { yield return(NewItem(reader)); } } }