Skip to content

Commit 515c4df

Browse files
committed
Add rename operation
1 parent 0248490 commit 515c4df

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-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: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#nullable enable
2+
3+
using Microsoft.Extensions.Logging;
4+
using Microsoft.Extensions.Logging.Abstractions;
5+
using Xunit;
6+
using Ydb.Sdk.Services.Table;
7+
8+
namespace Ydb.Sdk.Tests.Table;
9+
10+
[Trait("Category", "Integration")]
11+
public sealed class TestRenameTables
12+
{
13+
private readonly ILoggerFactory _loggerFactory;
14+
15+
private readonly DriverConfig _driverConfig = new(
16+
endpoint: "grpc://localhost:2136",
17+
database: "/local"
18+
);
19+
20+
public TestRenameTables()
21+
{
22+
_loggerFactory = Utils.GetLoggerFactory() ?? NullLoggerFactory.Instance;
23+
}
24+
25+
[Fact]
26+
public async Task RenameNotExisting()
27+
{
28+
await using var driver = await Driver.CreateInitialized(_driverConfig, _loggerFactory);
29+
using var tableClient = new TableClient(driver);
30+
31+
var renameTableItem = new RenameTableItem("source", "dest", false);
32+
33+
var response = await tableClient.RenameTables(new[] { renameTableItem });
34+
Assert.Equal(StatusCode.SchemeError, response.Status.StatusCode);
35+
}
36+
37+
[Fact]
38+
public async Task RenameTables()
39+
{
40+
await using var driver = await Driver.CreateInitialized(_driverConfig, _loggerFactory);
41+
using var tableClient = new TableClient(driver);
42+
43+
var pairs = new List<(string, string)>();
44+
for (var i = 0; i < 5; i++)
45+
{
46+
pairs.Add(($"t{Guid.NewGuid():n}", $"t{Guid.NewGuid():n}"));
47+
}
48+
49+
var items = new List<RenameTableItem>();
50+
foreach (var (source, dest) in pairs)
51+
{
52+
await Utils.CreateSimpleTable(tableClient, source);
53+
items.Add(new RenameTableItem(source, dest, false));
54+
}
55+
56+
var response = await tableClient.RenameTables(items);
57+
response.EnsureSuccess();
58+
59+
60+
foreach (var (_, dest) in pairs)
61+
{
62+
await Utils.DropTable(tableClient, dest);
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)