Skip to content

Commit 472de7f

Browse files
committed
Disable OLAP support for BATCH operations, add tests for ON and OLAP (#18293)
1 parent 09fe1c0 commit 472de7f

File tree

3 files changed

+133
-1
lines changed

3 files changed

+133
-1
lines changed

ydb/core/kqp/session_actor/kqp_session_actor.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,12 @@ class TKqpSessionActor : public TActorBootstrapped<TKqpSessionActor> {
11811181
if (Settings.TableService.GetEnableOltpSink() && isBatchQuery) {
11821182
if (!Settings.TableService.GetEnableBatchUpdates()) {
11831183
ReplyQueryError(Ydb::StatusIds::PRECONDITION_FAILED,
1184-
"Batch updates and deletes are disabled at current time.");
1184+
"BATCH operations are disabled by EnableBatchUpdates flag.");
1185+
}
1186+
1187+
if (QueryState->TxCtx->HasOlapTable) {
1188+
ReplyQueryError(Ydb::StatusIds::PRECONDITION_FAILED,
1189+
"BATCH operations are not supported for column tables at the current time.");
11851190
}
11861191

11871192
ExecutePartitioned(tx);

ydb/core/kqp/ut/batch_operations/kqp_batch_delete_ut.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,69 @@ Y_UNIT_TEST_SUITE(KqpBatchDelete) {
335335
}
336336
}
337337

338+
Y_UNIT_TEST(DeleteOn) {
339+
TKikimrRunner kikimr(GetAppConfig());
340+
auto db = kikimr.GetQueryClient();
341+
auto session = db.GetSession().GetValueSync().GetSession();
342+
343+
{
344+
auto query = Q_(R"(
345+
BATCH DELETE FROM Test
346+
ON (Group, Name)
347+
VALUES (1u, "Anna");
348+
)");
349+
350+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
351+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::GENERIC_ERROR);
352+
UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(), "BATCH DELETE is unsupported with ON", result.GetIssues().ToString());
353+
}
354+
}
355+
356+
Y_UNIT_TEST(ColumnTable) {
357+
TKikimrRunner kikimr(GetAppConfig());
358+
auto db = kikimr.GetQueryClient();
359+
auto session = db.GetSession().GetValueSync().GetSession();
360+
361+
{
362+
auto query = Q_(R"(
363+
CREATE TABLE TestOlap (
364+
Key Int32 NOT NULL,
365+
Value String,
366+
PRIMARY KEY (Key)
367+
) WITH (
368+
STORE = COLUMN
369+
);
370+
)");
371+
372+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
373+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
374+
}
375+
376+
{
377+
auto query = Q_(R"(
378+
INSERT INTO TestOlap (Key, Value) VALUES
379+
(1, "1"),
380+
(2, "2"),
381+
(3, "3");
382+
)");
383+
384+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
385+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
386+
}
387+
388+
{
389+
auto query = Q_(R"(
390+
BATCH DELETE FROM TestOlap
391+
WHERE Key < 3;
392+
)");
393+
394+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
395+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::PRECONDITION_FAILED);
396+
UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(),
397+
"BATCH operations are not supported for column tables at the current time.", result.GetIssues().ToString());
398+
}
399+
}
400+
338401
Y_UNIT_TEST(HasTxControl) {
339402
TKikimrRunner kikimr(GetAppConfig());
340403
auto db = kikimr.GetQueryClient();

ydb/core/kqp/ut/batch_operations/kqp_batch_update_ut.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,70 @@ Y_UNIT_TEST_SUITE(KqpBatchUpdate) {
439439
}
440440
}
441441

442+
Y_UNIT_TEST(UpdateOn) {
443+
TKikimrRunner kikimr(GetAppConfig());
444+
auto db = kikimr.GetQueryClient();
445+
auto session = db.GetSession().GetValueSync().GetSession();
446+
447+
{
448+
auto query = Q_(R"(
449+
BATCH UPDATE Test
450+
ON (Amount, Comment)
451+
VALUES (100ul, "None");
452+
)");
453+
454+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
455+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::GENERIC_ERROR);
456+
UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(), "BATCH UPDATE is unsupported with ON", result.GetIssues().ToString());
457+
}
458+
}
459+
460+
Y_UNIT_TEST(ColumnTable) {
461+
TKikimrRunner kikimr(GetAppConfig());
462+
auto db = kikimr.GetQueryClient();
463+
auto session = db.GetSession().GetValueSync().GetSession();
464+
465+
{
466+
auto query = Q_(R"(
467+
CREATE TABLE TestOlap (
468+
Key Int32 NOT NULL,
469+
Value String,
470+
PRIMARY KEY (Key)
471+
) WITH (
472+
STORE = COLUMN
473+
);
474+
)");
475+
476+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
477+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
478+
}
479+
480+
{
481+
auto query = Q_(R"(
482+
INSERT INTO TestOlap (Key, Value) VALUES
483+
(1, "1"),
484+
(2, "2"),
485+
(3, "3");
486+
)");
487+
488+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
489+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
490+
}
491+
492+
{
493+
auto query = Q_(R"(
494+
BATCH UPDATE TestOlap
495+
SET Value = "None"
496+
WHERE Key < 3;
497+
)");
498+
499+
auto result = session.ExecuteQuery(query, TTxControl::NoTx()).ExtractValueSync();
500+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::PRECONDITION_FAILED);
501+
UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(),
502+
"BATCH operations are not supported for column tables at the current time.", result.GetIssues().ToString());
503+
}
504+
}
505+
442506
Y_UNIT_TEST(HasTxControl) {
443507
TKikimrRunner kikimr(GetAppConfig());
444508
auto db = kikimr.GetQueryClient();

0 commit comments

Comments
 (0)