Skip to content

Commit c60278f

Browse files
committed
Rename indexes feat
1 parent ae2c132 commit c60278f

File tree

5 files changed

+109
-0
lines changed

5 files changed

+109
-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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,20 @@ def to_pb(self):
327327
return self._pb
328328

329329

330+
class RenameIndexItem:
331+
def __init__(self, source_name: str, destination_name: str, replace_destination: bool = False):
332+
self._source_name = source_name
333+
self._destination_name = destination_name
334+
self._replace_destination = replace_destination
335+
336+
def to_pb(self):
337+
return _apis.ydb_table.RenameIndexItem(
338+
source_name=self._source_name,
339+
destination_name=self._destination_name,
340+
replace_destination=self._replace_destination,
341+
)
342+
343+
330344
class ReplicationPolicy(object):
331345
def __init__(self):
332346
self._pb = _apis.ydb_table.ReplicationPolicy()
@@ -1124,6 +1138,7 @@ def alter_table(
11241138
alter_partitioning_settings=None,
11251139
set_key_bloom_filter=None,
11261140
set_read_replicas_settings=None,
1141+
rename_indexes=None,
11271142
):
11281143
pass
11291144

@@ -1321,6 +1336,7 @@ def alter_table(
13211336
alter_partitioning_settings: Optional["ydb.PartitioningSettings"] = None,
13221337
set_key_bloom_filter: Optional["ydb.FeatureFlag"] = None,
13231338
set_read_replicas_settings: Optional["ydb.ReadReplicasSettings"] = None,
1339+
rename_indexes: Optional[List["ydb.RenameIndexItem"]] = None,
13241340
) -> "ydb.Operation":
13251341
"""
13261342
Alter a YDB table.
@@ -1340,6 +1356,7 @@ def alter_table(
13401356
:param set_compaction_policy: Compaction policy
13411357
:param alter_partitioning_settings: ydb.PartitioningSettings to alter
13421358
:param set_key_bloom_filter: ydb.FeatureFlag to set key bloom filter
1359+
:param rename_indexes: List of ydb.RenameIndexItem to rename
13431360
13441361
:return: Operation or YDB error otherwise.
13451362
"""
@@ -1364,6 +1381,7 @@ def callee(session: Session):
13641381
alter_partitioning_settings=alter_partitioning_settings,
13651382
set_key_bloom_filter=set_key_bloom_filter,
13661383
set_read_replicas_settings=set_read_replicas_settings,
1384+
rename_indexes=rename_indexes,
13671385
)
13681386

13691387
return self._pool.retry_operation_sync(callee)
@@ -1857,6 +1875,7 @@ def alter_table(
18571875
alter_partitioning_settings=None,
18581876
set_key_bloom_filter=None,
18591877
set_read_replicas_settings=None,
1878+
rename_indexes=None,
18601879
):
18611880
return self._driver(
18621881
_session_impl.alter_table_request_factory(
@@ -1876,6 +1895,7 @@ def alter_table(
18761895
alter_partitioning_settings,
18771896
set_key_bloom_filter,
18781897
set_read_replicas_settings,
1898+
rename_indexes,
18791899
),
18801900
_apis.TableService.Stub,
18811901
_apis.TableService.AlterTable,
@@ -2088,6 +2108,7 @@ def async_alter_table(
20882108
alter_partitioning_settings=None,
20892109
set_key_bloom_filter=None,
20902110
set_read_replicas_settings=None,
2111+
rename_indexes=None,
20912112
):
20922113
return self._driver.future(
20932114
_session_impl.alter_table_request_factory(
@@ -2107,6 +2128,7 @@ def async_alter_table(
21072128
alter_partitioning_settings,
21082129
set_key_bloom_filter,
21092130
set_read_replicas_settings,
2131+
rename_indexes,
21102132
),
21112133
_apis.TableService.Stub,
21122134
_apis.TableService.AlterTable,

0 commit comments

Comments
 (0)