Skip to content

Commit cb04f07

Browse files
authored
Merge pull request #60 Add rename operation from Quantulion/rename_operation_add
2 parents 0248490 + 44e4479 commit cb04f07

File tree

2 files changed

+132
-0
lines changed

2 files changed

+132
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using Ydb.Sdk.Client;
2+
using Ydb.Table;
3+
using Ydb.Table.V1;
4+
5+
namespace Ydb.Sdk.Services.Table;
6+
7+
public class RenameTableItem
8+
{
9+
public string SourcePath { get; }
10+
public string DestinationPath { get; }
11+
public bool ReplaceDestination { get; }
12+
13+
public RenameTableItem(string sourcePath, string destinationPath, bool replaceDestination)
14+
{
15+
SourcePath = sourcePath;
16+
DestinationPath = destinationPath;
17+
ReplaceDestination = replaceDestination;
18+
}
19+
20+
public Ydb.Table.RenameTableItem GetProto(TableClient tableClient)
21+
{
22+
return new Ydb.Table.RenameTableItem
23+
{
24+
SourcePath = tableClient.MakeTablePath(SourcePath),
25+
DestinationPath = tableClient.MakeTablePath(DestinationPath),
26+
ReplaceDestination = ReplaceDestination
27+
};
28+
}
29+
}
30+
31+
public class RenameTablesSettings : OperationRequestSettings
32+
{
33+
}
34+
35+
public class RenameTablesResponse : ResponseBase
36+
{
37+
internal RenameTablesResponse(Status status) : base(status)
38+
{
39+
}
40+
}
41+
42+
public partial class TableClient
43+
{
44+
public async Task<RenameTablesResponse> RenameTables(IEnumerable<RenameTableItem> tableItems,
45+
RenameTablesSettings? settings = null)
46+
{
47+
settings ??= new RenameTablesSettings();
48+
var request = new RenameTablesRequest
49+
{
50+
OperationParams = MakeOperationParams(settings)
51+
};
52+
request.Tables.AddRange(tableItems.Select(item => item.GetProto(this)));
53+
54+
try
55+
{
56+
var response = await Driver.UnaryCall(
57+
method: TableService.RenameTablesMethod,
58+
request: request,
59+
settings: settings);
60+
61+
var status = UnpackOperation(response.Data.Operation);
62+
return new RenameTablesResponse(status);
63+
}
64+
catch (Driver.TransportException e)
65+
{
66+
return new RenameTablesResponse(e.Status);
67+
}
68+
}
69+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.Extensions.Logging.Abstractions;
3+
using Xunit;
4+
using Ydb.Sdk.Services.Table;
5+
6+
namespace Ydb.Sdk.Tests.Table;
7+
8+
[Trait("Category", "Integration")]
9+
public sealed class TestRenameTables
10+
{
11+
private readonly ILoggerFactory _loggerFactory;
12+
13+
private readonly DriverConfig _driverConfig = new(
14+
endpoint: "grpc://localhost:2136",
15+
database: "/local"
16+
);
17+
18+
public TestRenameTables()
19+
{
20+
_loggerFactory = Utils.GetLoggerFactory() ?? NullLoggerFactory.Instance;
21+
}
22+
23+
[Fact]
24+
public async Task RenameNotExisting()
25+
{
26+
await using var driver = await Driver.CreateInitialized(_driverConfig, _loggerFactory);
27+
using var tableClient = new TableClient(driver);
28+
29+
var renameTableItem = new RenameTableItem("source", "dest", false);
30+
31+
var response = await tableClient.RenameTables(new[] { renameTableItem });
32+
Assert.Equal(StatusCode.SchemeError, response.Status.StatusCode);
33+
}
34+
35+
[Fact]
36+
public async Task RenameTables()
37+
{
38+
await using var driver = await Driver.CreateInitialized(_driverConfig, _loggerFactory);
39+
using var tableClient = new TableClient(driver);
40+
41+
var pairs = new List<(string, string)>();
42+
for (var i = 0; i < 5; i++)
43+
{
44+
pairs.Add(($"t{Guid.NewGuid():n}", $"t{Guid.NewGuid():n}"));
45+
}
46+
47+
var items = new List<RenameTableItem>();
48+
foreach (var (source, dest) in pairs)
49+
{
50+
await Utils.CreateSimpleTable(tableClient, source);
51+
items.Add(new RenameTableItem(source, dest, false));
52+
}
53+
54+
var response = await tableClient.RenameTables(items);
55+
response.EnsureSuccess();
56+
57+
58+
foreach (var (_, dest) in pairs)
59+
{
60+
await Utils.DropTable(tableClient, dest);
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)