forked from AzureCosmosDB/data-migration-desktop-tool
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAzureTableAPIDataSourceExtension.cs
41 lines (35 loc) · 1.71 KB
/
AzureTableAPIDataSourceExtension.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.ComponentModel.Composition;
using System.Runtime.CompilerServices;
using Azure;
using Azure.Data.Tables;
using Cosmos.DataTransfer.AzureTableAPIExtension.Data;
using Cosmos.DataTransfer.AzureTableAPIExtension.Settings;
using Cosmos.DataTransfer.Interfaces;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Cosmos.DataTransfer.AzureTableAPIExtension
{
[Export(typeof(IDataSourceExtension))]
public class AzureTableAPIDataSourceExtension : IDataSourceExtensionWithSettings
{
public string DisplayName => "AzureTableAPI";
public async IAsyncEnumerable<IDataItem> ReadAsync(IConfiguration config, ILogger logger, [EnumeratorCancellation] CancellationToken cancellationToken = default)
{
var settings = config.Get<AzureTableAPIDataSourceSettings>();
settings.Validate();
var serviceClient = new TableServiceClient(settings.ConnectionString);
var tableClient = serviceClient.GetTableClient(settings.Table);
var queryResults = !string.IsNullOrWhiteSpace(settings.QueryFilter)
? tableClient.QueryAsync<TableEntity>(filter: settings.QueryFilter, cancellationToken: cancellationToken)
: tableClient.QueryAsync<TableEntity>(cancellationToken: cancellationToken);
await foreach (var entity in queryResults.WithCancellation(cancellationToken))
{
yield return new AzureTableAPIDataItem(entity, settings.PartitionKeyFieldName, settings.RowKeyFieldName);
}
}
public IEnumerable<IDataExtensionSettings> GetSettings()
{
yield return new AzureTableAPIDataSourceSettings();
}
}
}