@@ -2433,6 +2433,49 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
2433
2433
createAndCheck(999, 99);
2434
2434
}
2435
2435
2436
+ Y_UNIT_TEST(CreateTableWithPgColumn) {
2437
+ TKikimrRunner kikimr;
2438
+ auto db = kikimr.GetTableClient();
2439
+ auto session = db.CreateSession().GetValueSync().GetSession();
2440
+
2441
+ auto createAndCheck = [&](const TString& typeName) {
2442
+ TString tableName = TStringBuilder() << "/Root/TableWithPgColumn_" << typeName;
2443
+ auto createQuery = TStringBuilder() << Sprintf(R"(
2444
+ CREATE TABLE `%s` (
2445
+ Key Uint64,
2446
+ Value %s,
2447
+ PRIMARY KEY (Key)
2448
+ );)", tableName.c_str(), typeName.c_str());
2449
+ auto createResult = session.ExecuteSchemeQuery(createQuery).GetValueSync();
2450
+
2451
+ UNIT_ASSERT_VALUES_EQUAL_C(createResult.GetStatus(), EStatus::SUCCESS, createResult.GetIssues().ToString());
2452
+
2453
+ TDescribeTableResult describe = session.DescribeTable(tableName).GetValueSync();
2454
+ UNIT_ASSERT_EQUAL_C(describe.GetStatus(), EStatus::SUCCESS, describe.GetIssues().ToString());
2455
+ auto tableDesc = describe.GetTableDescription();
2456
+ TVector<TTableColumn> columns = tableDesc.GetTableColumns();
2457
+ UNIT_ASSERT_VALUES_EQUAL(columns.size(), 2);
2458
+ TType valueType = columns[1].Type;
2459
+ TTypeParser parser(valueType);
2460
+ auto kind = parser.GetKind();
2461
+ UNIT_ASSERT_EQUAL(kind, TTypeParser::ETypeKind::Pg);
2462
+ const auto& pgType = parser.GetPg();
2463
+ UNIT_ASSERT_VALUES_EQUAL(pgType.TypeName, typeName);
2464
+ };
2465
+
2466
+ createAndCheck("pgbool");
2467
+ createAndCheck("pgint2");
2468
+ createAndCheck("pgint4");
2469
+ createAndCheck("pgint8");
2470
+ createAndCheck("pgnumeric");
2471
+ createAndCheck("pgfloat4");
2472
+ createAndCheck("pgfloat8");
2473
+ createAndCheck("pgtext");
2474
+ createAndCheck("pgjson");
2475
+ createAndCheck("pgtimestamp");
2476
+ createAndCheck("pgvarchar");
2477
+ }
2478
+
2436
2479
void AlterTableAddIndex(EIndexTypeSql type) {
2437
2480
NKikimrConfig::TFeatureFlags featureFlags;
2438
2481
featureFlags.SetEnableVectorIndex(true);
@@ -3136,6 +3179,72 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
3136
3179
checkColumn(6, 35, 10);
3137
3180
}
3138
3181
3182
+ Y_UNIT_TEST(AlterTableWithPgColumn) {
3183
+ TKikimrRunner kikimr;
3184
+ auto db = kikimr.GetTableClient();
3185
+ auto session = db.CreateSession().GetValueSync().GetSession();
3186
+ TString tableName = "/Root/TableWithPgColumn";
3187
+ {
3188
+ auto query = TStringBuilder() << R"(
3189
+ CREATE TABLE `)" << tableName << R"(` (
3190
+ Key Uint64,
3191
+ Value String,
3192
+ PRIMARY KEY (Key)
3193
+ );)";
3194
+ auto result = session.ExecuteSchemeQuery(query).GetValueSync();
3195
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
3196
+ }
3197
+
3198
+ auto addColumn = [&] (const TString& typeName) {
3199
+ TString columnName = TStringBuilder() << "Column_" << typeName;
3200
+ auto query = TStringBuilder() << Sprintf(R"(
3201
+ ALTER TABLE `%s`
3202
+ ADD COLUMN %s %s
3203
+ )", tableName.c_str(), columnName.c_str(), typeName.c_str());
3204
+ auto result = session.ExecuteSchemeQuery(query).GetValueSync();
3205
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
3206
+ };
3207
+
3208
+ addColumn("pgbool");
3209
+ addColumn("pgint2");
3210
+ addColumn("pgint4");
3211
+ addColumn("pgint8");
3212
+ addColumn("pgnumeric");
3213
+ addColumn("pgfloat4");
3214
+ addColumn("pgfloat8");
3215
+ addColumn("pgtext");
3216
+ addColumn("pgjson");
3217
+ addColumn("pgtimestamp");
3218
+ addColumn("pgvarchar");
3219
+
3220
+ TDescribeTableResult describe = session.DescribeTable(tableName).GetValueSync();
3221
+ UNIT_ASSERT_EQUAL_C(describe.GetStatus(), EStatus::SUCCESS, describe.GetIssues().ToString());
3222
+ auto tableDesc = describe.GetTableDescription();
3223
+ TVector<TTableColumn> columns = tableDesc.GetTableColumns();
3224
+ UNIT_ASSERT_VALUES_EQUAL(columns.size(), 13);
3225
+
3226
+ auto checkColumn = [&] (ui64 columnIdx, const TString& typeName) {
3227
+ TType valueType = columns[columnIdx].Type;
3228
+ TTypeParser parser(valueType);
3229
+ auto kind = parser.GetKind();
3230
+ UNIT_ASSERT_VALUES_EQUAL(kind, TTypeParser::ETypeKind::Pg);
3231
+ const auto& pgType = parser.GetPg();
3232
+ UNIT_ASSERT_VALUES_EQUAL(pgType.TypeName, typeName);
3233
+ };
3234
+
3235
+ checkColumn(2, "pgbool");
3236
+ checkColumn(3, "pgint2");
3237
+ checkColumn(4, "pgint4");
3238
+ checkColumn(5, "pgint8");
3239
+ checkColumn(6, "pgnumeric");
3240
+ checkColumn(7, "pgfloat4");
3241
+ checkColumn(8, "pgfloat8");
3242
+ checkColumn(9, "pgtext");
3243
+ checkColumn(10, "pgjson");
3244
+ checkColumn(11, "pgtimestamp");
3245
+ checkColumn(12, "pgvarchar");
3246
+ }
3247
+
3139
3248
Y_UNIT_TEST(CreateUserWithPassword) {
3140
3249
TKikimrRunner kikimr;
3141
3250
auto db = kikimr.GetTableClient();
0 commit comments