@@ -2227,6 +2227,160 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) {
22272227 }
22282228 }
22292229
2230+ Y_UNIT_TEST (ManyFlushes) {
2231+ NKikimrConfig::TAppConfig appConfig;
2232+ auto serverSettings = TKikimrSettings ().SetAppConfig (appConfig);
2233+ TKikimrRunner kikimr (serverSettings);
2234+ auto db = kikimr.GetTableClient ();
2235+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
2236+
2237+ CreateTestTable (session);
2238+
2239+ {
2240+ auto result = session.ExecuteDataQuery (R"(
2241+ --!syntax_v1
2242+
2243+ SELECT * FROM TestImmediateEffects;
2244+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES
2245+ (3u, "Three"),
2246+ (4u, "Four");
2247+
2248+ SELECT * FROM TestImmediateEffects;
2249+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2250+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2251+ CompareYson (R"( [
2252+ [[1u];["One"]];
2253+ [[2u];["Two"]]
2254+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
2255+ CompareYson (R"( [
2256+ [[1u];["One"]];
2257+ [[2u];["Two"]];
2258+ [[3u];["Three"]];
2259+ [[4u];["Four"]]
2260+ ])" , FormatResultSetYson (result.GetResultSet (1 )));
2261+ }
2262+
2263+ { // multiple effects
2264+ auto result = session.ExecuteDataQuery (R"(
2265+ --!syntax_v1
2266+
2267+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (5u, "Five");
2268+ SELECT * FROM TestImmediateEffects;
2269+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (6u, "Six");
2270+ SELECT * FROM TestImmediateEffects;
2271+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (7u, "Seven");
2272+ SELECT * FROM TestImmediateEffects;
2273+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2274+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2275+ CompareYson (R"( [
2276+ [[1u];["One"]];
2277+ [[2u];["Two"]];
2278+ [[3u];["Three"]];
2279+ [[4u];["Four"]];
2280+ [[5u];["Five"]]
2281+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
2282+ CompareYson (R"( [
2283+ [[1u];["One"]];
2284+ [[2u];["Two"]];
2285+ [[3u];["Three"]];
2286+ [[4u];["Four"]];
2287+ [[5u];["Five"]];
2288+ [[6u];["Six"]]
2289+ ])" , FormatResultSetYson (result.GetResultSet (1 )));
2290+ CompareYson (R"( [
2291+ [[1u];["One"]];
2292+ [[2u];["Two"]];
2293+ [[3u];["Three"]];
2294+ [[4u];["Four"]];
2295+ [[5u];["Five"]];
2296+ [[6u];["Six"]];
2297+ [[7u];["Seven"]]
2298+ ])" , FormatResultSetYson (result.GetResultSet (2 )));
2299+ }
2300+ }
2301+
2302+ Y_UNIT_TEST (Interactive) {
2303+ NKikimrConfig::TAppConfig appConfig;
2304+ auto serverSettings = TKikimrSettings ().SetAppConfig (appConfig);
2305+ TKikimrRunner kikimr (serverSettings);
2306+ auto db = kikimr.GetTableClient ();
2307+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
2308+
2309+ CreateTestTable (session);
2310+
2311+ {
2312+ auto result = session.ExecuteDataQuery (R"(
2313+ --!syntax_v1
2314+
2315+ SELECT * FROM TestImmediateEffects;
2316+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES
2317+ (3u, "Three"),
2318+ (4u, "Four");
2319+
2320+ SELECT * FROM TestImmediateEffects;
2321+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2322+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2323+ CompareYson (R"( [
2324+ [[1u];["One"]];
2325+ [[2u];["Two"]]
2326+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
2327+ CompareYson (R"( [
2328+ [[1u];["One"]];
2329+ [[2u];["Two"]];
2330+ [[3u];["Three"]];
2331+ [[4u];["Four"]]
2332+ ])" , FormatResultSetYson (result.GetResultSet (1 )));
2333+ }
2334+
2335+ {
2336+ auto result = session.ExecuteDataQuery (R"(
2337+ --!syntax_v1
2338+
2339+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (5u, "Five");
2340+ )" , TTxControl::BeginTx ()).ExtractValueSync ();
2341+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2342+
2343+ auto tx = result.GetTransaction ();
2344+
2345+ result = session.ExecuteDataQuery (R"(
2346+ --!syntax_v1
2347+
2348+ SELECT * FROM TestImmediateEffects;
2349+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (6u, "Six");
2350+ SELECT * FROM TestImmediateEffects;
2351+ UPSERT INTO TestImmediateEffects (Key, Value) VALUES (7u, "Seven");
2352+ SELECT * FROM TestImmediateEffects;
2353+ )" , TTxControl::Tx (*tx)).ExtractValueSync ();
2354+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2355+ CompareYson (R"( [
2356+ [[1u];["One"]];
2357+ [[2u];["Two"]];
2358+ [[3u];["Three"]];
2359+ [[4u];["Four"]];
2360+ [[5u];["Five"]]
2361+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
2362+ CompareYson (R"( [
2363+ [[1u];["One"]];
2364+ [[2u];["Two"]];
2365+ [[3u];["Three"]];
2366+ [[4u];["Four"]];
2367+ [[5u];["Five"]];
2368+ [[6u];["Six"]]
2369+ ])" , FormatResultSetYson (result.GetResultSet (1 )));
2370+ CompareYson (R"( [
2371+ [[1u];["One"]];
2372+ [[2u];["Two"]];
2373+ [[3u];["Three"]];
2374+ [[4u];["Four"]];
2375+ [[5u];["Five"]];
2376+ [[6u];["Six"]];
2377+ [[7u];["Seven"]]
2378+ ])" , FormatResultSetYson (result.GetResultSet (2 )));
2379+
2380+ auto commitResult = tx->Commit ().ExtractValueSync ();
2381+ UNIT_ASSERT (commitResult.IsSuccess ());
2382+ }
2383+ }
22302384}
22312385
22322386} // namespace NKqp
0 commit comments