Skip to content

Commit e820a40

Browse files
authored
CTAS path test (#17277)
1 parent 68489d0 commit e820a40

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

ydb/core/kqp/ut/query/kqp_query_ut.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2496,6 +2496,90 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
24962496
UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(), "Invalid type for column: Value.", result.GetIssues().ToString());
24972497
}
24982498
}
2499+
2500+
Y_UNIT_TEST_TWIN(CreateAsSelectPath, UseTablePathPrefix) {
2501+
const auto dirPath = UseTablePathPrefix ? "" : "/Root/test/";
2502+
const auto pragma = UseTablePathPrefix ? "PRAGMA TablePathPrefix(\"/Root/test\");" : "";
2503+
2504+
NKikimrConfig::TAppConfig appConfig;
2505+
appConfig.MutableTableServiceConfig()->SetEnableOlapSink(true);
2506+
appConfig.MutableTableServiceConfig()->SetEnableOltpSink(true);
2507+
appConfig.MutableTableServiceConfig()->SetEnableCreateTableAs(true);
2508+
appConfig.MutableTableServiceConfig()->SetEnablePerStatementQueryExecution(true);
2509+
auto settings = TKikimrSettings()
2510+
.SetAppConfig(appConfig)
2511+
.SetWithSampleTables(false)
2512+
.SetEnableTempTables(true)
2513+
.SetAuthToken("user0@builtin");;
2514+
TKikimrRunner kikimr(settings);
2515+
2516+
{
2517+
auto driverConfig = TDriverConfig()
2518+
.SetEndpoint(kikimr.GetEndpoint())
2519+
.SetAuthToken("root@builtin");
2520+
auto driver = TDriver(driverConfig);
2521+
auto schemeClient = NYdb::NScheme::TSchemeClient(driver);
2522+
2523+
{
2524+
auto result = schemeClient.MakeDirectory("/Root/test").ExtractValueSync();
2525+
AssertSuccessResult(result);
2526+
}
2527+
{
2528+
NYdb::NScheme::TPermissions permissions("user0@builtin",
2529+
{"ydb.generic.read", "ydb.generic.write"}
2530+
);
2531+
auto result = schemeClient.ModifyPermissions("/Root/test",
2532+
NYdb::NScheme::TModifyPermissionsSettings().AddGrantPermissions(permissions)
2533+
).ExtractValueSync();
2534+
AssertSuccessResult(result);
2535+
}
2536+
}
2537+
2538+
const TString query = std::format(R"(
2539+
{1}
2540+
CREATE TABLE `{0}Source` (
2541+
Col1 Uint64 NOT NULL,
2542+
Col2 Int32,
2543+
PRIMARY KEY (Col1)
2544+
);
2545+
)", dirPath, pragma);
2546+
2547+
auto client = kikimr.GetQueryClient();
2548+
auto result = client.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
2549+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
2550+
2551+
{
2552+
auto prepareResult = client.ExecuteQuery(std::format(R"(
2553+
{1}
2554+
REPLACE INTO `{0}Source` (Col1, Col2) VALUES
2555+
(1u, 1), (100u, 100), (10u, 10);
2556+
)", dirPath, pragma), NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync();
2557+
UNIT_ASSERT_C(prepareResult.IsSuccess(), prepareResult.GetIssues().ToString());
2558+
}
2559+
2560+
{
2561+
auto prepareResult = client.ExecuteQuery(std::format(R"(
2562+
{1}
2563+
CREATE TABLE `{0}Destination1` (
2564+
PRIMARY KEY (Col1)
2565+
)
2566+
AS SELECT Col2 As Col1, Col1 As Col2
2567+
FROM `{0}Source`;
2568+
)", dirPath, pragma), NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
2569+
UNIT_ASSERT_C(prepareResult.IsSuccess(), prepareResult.GetIssues().ToString());
2570+
}
2571+
2572+
{
2573+
auto it = client.StreamExecuteQuery(std::format(R"(
2574+
{1}
2575+
SELECT Col1, Col2 FROM `{0}Destination1`;
2576+
)", dirPath, pragma), NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync();
2577+
UNIT_ASSERT_VALUES_EQUAL_C(it.GetStatus(), EStatus::SUCCESS, it.GetIssues().ToString());
2578+
TString output = StreamResultToYson(it);
2579+
CompareYson(output, R"([[[1];[1u]];[[10];[10u]];[[100];[100u]]])");
2580+
}
2581+
}
2582+
24992583
}
25002584

25012585
} // namespace NKqp

0 commit comments

Comments
 (0)