@@ -1160,6 +1160,98 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
1160
1160
});
1161
1161
}
1162
1162
1163
+ Y_UNIT_TEST (DdlSecret) {
1164
+ NKikimrConfig::TAppConfig appConfig;
1165
+ appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
1166
+ auto setting = NKikimrKqp::TKqpSetting ();
1167
+ auto serverSettings = TKikimrSettings ()
1168
+ .SetAppConfig (appConfig)
1169
+ .SetKqpSettings ({setting});
1170
+
1171
+ TKikimrRunner kikimr (serverSettings);
1172
+ auto db = kikimr.GetQueryClient ();
1173
+
1174
+ enum EEx {
1175
+ Empty,
1176
+ IfExists,
1177
+ IfNotExists,
1178
+ };
1179
+
1180
+ auto executeSql = [&](const TString& sql, bool expectSuccess) {
1181
+ Cerr << " Execute SQL:\n " << sql << Endl;
1182
+
1183
+ auto result = db.ExecuteQuery (sql, TTxControl::NoTx ()).ExtractValueSync ();
1184
+ if (expectSuccess) {
1185
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1186
+ } else {
1187
+ UNIT_ASSERT_VALUES_UNEQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1188
+ }
1189
+ UNIT_ASSERT (result.GetResultSets ().empty ());
1190
+ };
1191
+
1192
+ auto checkCreate = [&](bool expectSuccess, EEx exMode, int nameSuffix) {
1193
+ UNIT_ASSERT_UNEQUAL (exMode, EEx::IfExists);
1194
+ const TString ifNotExistsStatement = exMode == EEx::IfNotExists ? " IF NOT EXISTS" : " " ;
1195
+ const TString sql = fmt::format (R"sql(
1196
+ CREATE OBJECT {if_not_exists} my_secret_{name_suffix} (TYPE SECRET) WITH (value="qwerty");
1197
+ )sql" ,
1198
+ " if_not_exists" _a = ifNotExistsStatement,
1199
+ " name_suffix" _a = nameSuffix
1200
+ );
1201
+
1202
+ executeSql (sql, expectSuccess);
1203
+ };
1204
+
1205
+ auto checkAlter = [&](bool expectSuccess, int nameSuffix) {
1206
+ const TString sql = fmt::format (R"sql(
1207
+ ALTER OBJECT my_secret_{name_suffix} (TYPE SECRET) SET value = "abcde";
1208
+ )sql" ,
1209
+ " name_suffix" _a = nameSuffix
1210
+ );
1211
+
1212
+ executeSql (sql, expectSuccess);
1213
+ };
1214
+
1215
+ auto checkUpsert = [&](bool expectSuccess, int nameSuffix) {
1216
+ const TString sql = fmt::format (R"sql(
1217
+ UPSERT OBJECT my_secret_{name_suffix} (TYPE SECRET) WITH value = "edcba";
1218
+ )sql" ,
1219
+ " name_suffix" _a = nameSuffix
1220
+ );
1221
+
1222
+ executeSql (sql, expectSuccess);
1223
+ };
1224
+
1225
+ auto checkDrop = [&](bool expectSuccess, EEx exMode, int nameSuffix) {
1226
+ UNIT_ASSERT_UNEQUAL (exMode, EEx::IfNotExists);
1227
+ const TString ifExistsStatement = exMode == EEx::IfExists ? " IF EXISTS" : " " ;
1228
+ const TString sql = fmt::format (R"sql(
1229
+ DROP OBJECT {if_exists} my_secret_{name_suffix} (TYPE SECRET);
1230
+ )sql" ,
1231
+ " if_exists" _a = ifExistsStatement,
1232
+ " name_suffix" _a = nameSuffix
1233
+ );
1234
+
1235
+ executeSql (sql, expectSuccess);
1236
+ };
1237
+
1238
+ checkCreate (true , EEx::Empty, 0 );
1239
+ checkCreate (false , EEx::Empty, 0 );
1240
+ checkAlter (true , 0 );
1241
+ checkAlter (false , 2 ); // not exists
1242
+ checkDrop (true , EEx::Empty, 0 );
1243
+ checkDrop (true , EEx::Empty, 0 ); // we don't check object existence
1244
+
1245
+ checkCreate (true , EEx::IfNotExists, 1 );
1246
+ checkCreate (true , EEx::IfNotExists, 1 );
1247
+ checkDrop (true , EEx::IfExists, 1 );
1248
+ checkDrop (true , EEx::IfExists, 1 );
1249
+
1250
+ checkUpsert (true , 2 );
1251
+ checkCreate (false , EEx::Empty, 2 ); // already exists
1252
+ checkUpsert (true , 2 );
1253
+ }
1254
+
1163
1255
Y_UNIT_TEST (DdlCache) {
1164
1256
NKikimrConfig::TAppConfig appConfig;
1165
1257
appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
0 commit comments