@@ -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