Skip to content

Commit 8786f31

Browse files
authored
Merge pull request #672 from ydb-platform/rename_indexes_feat
Rename indexes feat
2 parents ae2c132 + 6253aa2 commit 8786f31

File tree

5 files changed

+110
-0
lines changed

5 files changed

+110
-0
lines changed

tests/aio/test_table_client.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,42 @@ async def test_copy_table(self, driver: ydb.aio.Driver):
8989
copied_description = await client.describe_table(table_name + "_copy")
9090

9191
assert description.columns == copied_description.columns
92+
93+
@pytest.mark.asyncio
94+
async def test_rename_index(self, driver: ydb.aio.Driver):
95+
client = driver.table_client
96+
table_name = "/local/testtableclient"
97+
try:
98+
await client.drop_table(table_name)
99+
except ydb.SchemeError:
100+
pass
101+
102+
description = (
103+
ydb.TableDescription()
104+
.with_primary_keys("key1", "key2")
105+
.with_columns(
106+
ydb.Column("key1", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
107+
ydb.Column("key2", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
108+
ydb.Column("value", ydb.OptionalType(ydb.PrimitiveType.Utf8)),
109+
)
110+
.with_index(ydb.TableIndex("index1").with_index_columns("key1"))
111+
.with_index(ydb.TableIndex("index2").with_index_columns("key1"))
112+
)
113+
114+
await client.create_table(table_name, description)
115+
116+
await client.alter_table(table_name, rename_indexes=[ydb.RenameIndexItem("index1", "index1_1")])
117+
118+
description = await client.describe_table(table_name)
119+
names = [index.name for index in description.indexes]
120+
assert len(names) == 2
121+
for name in ["index1_1", "index2"]:
122+
assert name in names
123+
124+
await client.alter_table(
125+
table_name, rename_indexes=[ydb.RenameIndexItem("index1_1", "index2", replace_destination=True)]
126+
)
127+
128+
description = await client.describe_table(table_name)
129+
assert len(description.indexes) == 1
130+
assert description.indexes[0].name == "index2"

tests/table/test_table_client.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,41 @@ def test_describe_table_creation_time(self, driver_sync: ydb.Driver):
130130
assert desc_after.table_stats is not None
131131

132132
assert desc_before.table_stats.creation_time == desc_after.table_stats.creation_time
133+
134+
def test_rename_index(self, driver_sync: ydb.Driver):
135+
client = driver_sync.table_client
136+
table_name = "/local/testtableclient"
137+
try:
138+
client.drop_table(table_name)
139+
except ydb.SchemeError:
140+
pass
141+
142+
description = (
143+
ydb.TableDescription()
144+
.with_primary_keys("key1", "key2")
145+
.with_columns(
146+
ydb.Column("key1", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
147+
ydb.Column("key2", ydb.OptionalType(ydb.PrimitiveType.Uint64)),
148+
ydb.Column("value", ydb.OptionalType(ydb.PrimitiveType.Utf8)),
149+
)
150+
.with_index(ydb.TableIndex("index1").with_index_columns("key1"))
151+
.with_index(ydb.TableIndex("index2").with_index_columns("key1"))
152+
)
153+
154+
client.create_table(table_name, description)
155+
156+
client.alter_table(table_name, rename_indexes=[ydb.RenameIndexItem("index1", "index1_1")])
157+
158+
description = client.describe_table(table_name)
159+
names = [index.name for index in description.indexes]
160+
assert len(names) == 2
161+
for name in ["index1_1", "index2"]:
162+
assert name in names
163+
164+
client.alter_table(
165+
table_name, rename_indexes=[ydb.RenameIndexItem("index1_1", "index2", replace_destination=True)]
166+
)
167+
168+
description = client.describe_table(table_name)
169+
assert len(description.indexes) == 1
170+
assert description.indexes[0].name == "index2"

ydb/_session_impl.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ def alter_table_request_factory(
268268
alter_partitioning_settings,
269269
set_key_bloom_filter,
270270
set_read_replicas_settings,
271+
rename_indexes,
271272
):
272273
request = session_state.attach_request(_apis.ydb_table.AlterTableRequest(path=path))
273274
if add_columns is not None:
@@ -316,6 +317,10 @@ def alter_table_request_factory(
316317
if set_read_replicas_settings is not None:
317318
request.set_read_replicas_settings.MergeFrom(set_read_replicas_settings.to_pb())
318319

320+
if rename_indexes is not None:
321+
for rename_index in rename_indexes:
322+
request.rename_indexes.add().MergeFrom(rename_index.to_pb())
323+
319324
return request
320325

321326

ydb/aio/table.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ async def alter_table(
105105
alter_partitioning_settings=None,
106106
set_key_bloom_filter=None,
107107
set_read_replicas_settings=None,
108+
rename_indexes=None,
108109
): # pylint: disable=W0236,R0913,R0914
109110
return await super().alter_table(
110111
path,
@@ -123,6 +124,7 @@ async def alter_table(
123124
alter_partitioning_settings,
124125
set_key_bloom_filter,
125126
set_read_replicas_settings,
127+
rename_indexes,
126128
)
127129

128130
def transaction(self, tx_mode=None, *, allow_split_transactions=None):
@@ -250,6 +252,7 @@ async def alter_table(
250252
alter_partitioning_settings: Optional["ydb.PartitioningSettings"] = None,
251253
set_key_bloom_filter: Optional["ydb.FeatureFlag"] = None,
252254
set_read_replicas_settings: Optional["ydb.ReadReplicasSettings"] = None,
255+
rename_indexes: Optional[List["ydb.RenameIndexItem"]] = None,
253256
) -> "ydb.Operation":
254257
"""
255258
Alter a YDB table.
@@ -269,6 +272,7 @@ async def alter_table(
269272
:param set_compaction_policy: Compaction policy
270273
:param alter_partitioning_settings: ydb.PartitioningSettings to alter
271274
:param set_key_bloom_filter: ydb.FeatureFlag to set key bloom filter
275+
:param rename_indexes: List of ydb.RenameIndexItem to rename
272276
273277
:return: Operation or YDB error otherwise.
274278
"""
@@ -293,6 +297,7 @@ async def callee(session: Session):
293297
alter_partitioning_settings=alter_partitioning_settings,
294298
set_key_bloom_filter=set_key_bloom_filter,
295299
set_read_replicas_settings=set_read_replicas_settings,
300+
rename_indexes=rename_indexes,
296301
)
297302

298303
return await self._pool.retry_operation(callee)

ydb/table.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
import abc
3+
from dataclasses import dataclass
34
import ydb
45
from abc import abstractmethod
56
import logging
@@ -327,6 +328,20 @@ def to_pb(self):
327328
return self._pb
328329

329330

331+
@dataclass
332+
class RenameIndexItem:
333+
source_name: str
334+
destination_name: str
335+
replace_destination: bool = False
336+
337+
def to_pb(self):
338+
return _apis.ydb_table.RenameIndexItem(
339+
source_name=self.source_name,
340+
destination_name=self.destination_name,
341+
replace_destination=self.replace_destination,
342+
)
343+
344+
330345
class ReplicationPolicy(object):
331346
def __init__(self):
332347
self._pb = _apis.ydb_table.ReplicationPolicy()
@@ -1124,6 +1139,7 @@ def alter_table(
11241139
alter_partitioning_settings=None,
11251140
set_key_bloom_filter=None,
11261141
set_read_replicas_settings=None,
1142+
rename_indexes=None,
11271143
):
11281144
pass
11291145

@@ -1321,6 +1337,7 @@ def alter_table(
13211337
alter_partitioning_settings: Optional["ydb.PartitioningSettings"] = None,
13221338
set_key_bloom_filter: Optional["ydb.FeatureFlag"] = None,
13231339
set_read_replicas_settings: Optional["ydb.ReadReplicasSettings"] = None,
1340+
rename_indexes: Optional[List["ydb.RenameIndexItem"]] = None,
13241341
) -> "ydb.Operation":
13251342
"""
13261343
Alter a YDB table.
@@ -1340,6 +1357,7 @@ def alter_table(
13401357
:param set_compaction_policy: Compaction policy
13411358
:param alter_partitioning_settings: ydb.PartitioningSettings to alter
13421359
:param set_key_bloom_filter: ydb.FeatureFlag to set key bloom filter
1360+
:param rename_indexes: List of ydb.RenameIndexItem to rename
13431361
13441362
:return: Operation or YDB error otherwise.
13451363
"""
@@ -1364,6 +1382,7 @@ def callee(session: Session):
13641382
alter_partitioning_settings=alter_partitioning_settings,
13651383
set_key_bloom_filter=set_key_bloom_filter,
13661384
set_read_replicas_settings=set_read_replicas_settings,
1385+
rename_indexes=rename_indexes,
13671386
)
13681387

13691388
return self._pool.retry_operation_sync(callee)
@@ -1857,6 +1876,7 @@ def alter_table(
18571876
alter_partitioning_settings=None,
18581877
set_key_bloom_filter=None,
18591878
set_read_replicas_settings=None,
1879+
rename_indexes=None,
18601880
):
18611881
return self._driver(
18621882
_session_impl.alter_table_request_factory(
@@ -1876,6 +1896,7 @@ def alter_table(
18761896
alter_partitioning_settings,
18771897
set_key_bloom_filter,
18781898
set_read_replicas_settings,
1899+
rename_indexes,
18791900
),
18801901
_apis.TableService.Stub,
18811902
_apis.TableService.AlterTable,
@@ -2088,6 +2109,7 @@ def async_alter_table(
20882109
alter_partitioning_settings=None,
20892110
set_key_bloom_filter=None,
20902111
set_read_replicas_settings=None,
2112+
rename_indexes=None,
20912113
):
20922114
return self._driver.future(
20932115
_session_impl.alter_table_request_factory(
@@ -2107,6 +2129,7 @@ def async_alter_table(
21072129
alter_partitioning_settings,
21082130
set_key_bloom_filter,
21092131
set_read_replicas_settings,
2132+
rename_indexes,
21102133
),
21112134
_apis.TableService.Stub,
21122135
_apis.TableService.AlterTable,

0 commit comments

Comments
 (0)