@@ -6034,6 +6034,142 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
6034
6034
UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6035
6035
}
6036
6036
}
6037
+
6038
+ Y_UNIT_TEST (TableSinkHtapInsert) {
6039
+ NKikimrConfig::TAppConfig appConfig;
6040
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
6041
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (true );
6042
+ appConfig.MutableTableServiceConfig ()->SetEnableHtapTx (true );
6043
+ auto settings = TKikimrSettings ()
6044
+ .SetAppConfig (appConfig)
6045
+ .SetWithSampleTables (false );
6046
+ TKikimrRunner kikimr (settings);
6047
+ Tests::NCommon::TLoggerInit (kikimr).Initialize ();
6048
+
6049
+ auto session = kikimr.GetTableClient ().CreateSession ().GetValueSync ().GetSession ();
6050
+
6051
+ const TString query = R"(
6052
+ CREATE TABLE `/Root/ColumnShard` (
6053
+ Col1 Uint32 NOT NULL,
6054
+ Col2 String NOT NULL,
6055
+ PRIMARY KEY (Col1)
6056
+ )
6057
+ PARTITION BY HASH(Col1)
6058
+ WITH (STORE = COLUMN, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 64);
6059
+
6060
+ CREATE TABLE `/Root/DataShard` (
6061
+ Col1 Uint32 NOT NULL,
6062
+ Col2 String NOT NULL,
6063
+ PRIMARY KEY (Col1)
6064
+ )
6065
+ WITH (UNIFORM_PARTITIONS = 64, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 64);
6066
+ )" ;
6067
+
6068
+ auto result = session.ExecuteSchemeQuery (query).GetValueSync ();
6069
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
6070
+
6071
+ auto client = kikimr.GetQueryClient ();
6072
+
6073
+ {
6074
+ auto result = client.ExecuteQuery (R"(
6075
+ INSERT INTO `/Root/DataShard` (Col1, Col2) VALUES
6076
+ (10u, "test1");
6077
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6078
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6079
+ }
6080
+
6081
+ {
6082
+ auto session = client.GetSession ().GetValueSync ().GetSession ();
6083
+ auto result = session.ExecuteQuery (R"(
6084
+ INSERT INTO `/Root/ColumnShard` (Col1, Col2) VALUES
6085
+ (1u, "test1"), (2u, "test2"), (4294967280u, "test3"), (4294967286u, "test");
6086
+ )" , NYdb::NQuery::TTxControl::BeginTx ()).ExtractValueSync ();
6087
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6088
+
6089
+ auto tx = result.GetTransaction ();
6090
+ UNIT_ASSERT (tx);
6091
+
6092
+ // non-volatile tx commit
6093
+ auto result2 = session.ExecuteQuery (R"(
6094
+ INSERT INTO `/Root/DataShard` (Col1, Col2) VALUES
6095
+ (10u, "test1"), (20u, "test2"), (4294967280u, "test3"), (4294967286u, "test");
6096
+ )" , NYdb::NQuery::TTxControl::Tx (*tx).CommitTx ()).ExtractValueSync ();
6097
+ UNIT_ASSERT_VALUES_EQUAL_C (result2.GetStatus (), EStatus::PRECONDITION_FAILED, result2.GetIssues ().ToString ());
6098
+ }
6099
+
6100
+ {
6101
+ auto result = client.ExecuteQuery (R"(
6102
+ SELECT COUNT(*) FROM `/Root/DataShard`;
6103
+ SELECT COUNT(*) FROM `/Root/ColumnShard`;
6104
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6105
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6106
+ CompareYson (R"( [[1u]])" , FormatResultSetYson (result.GetResultSet (0 )));
6107
+ CompareYson (R"( [[0u]])" , FormatResultSetYson (result.GetResultSet (1 )));
6108
+ }
6109
+ }
6110
+
6111
+ Y_UNIT_TEST (NonVolatileTxInsert) {
6112
+ NKikimrConfig::TAppConfig appConfig;
6113
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
6114
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (true );
6115
+ appConfig.MutableTableServiceConfig ()->SetEnableHtapTx (true );
6116
+ appConfig.MutableFeatureFlags ()->SetEnableDataShardVolatileTransactions (false );
6117
+ auto settings = TKikimrSettings ()
6118
+ .SetAppConfig (appConfig)
6119
+ .SetWithSampleTables (false );
6120
+ TKikimrRunner kikimr (settings);
6121
+ Tests::NCommon::TLoggerInit (kikimr).Initialize ();
6122
+
6123
+ auto session = kikimr.GetTableClient ().CreateSession ().GetValueSync ().GetSession ();
6124
+
6125
+ const TString query = R"(
6126
+ CREATE TABLE `/Root/DataShard` (
6127
+ Col1 Uint32 NOT NULL,
6128
+ Col2 String NOT NULL,
6129
+ PRIMARY KEY (Col1)
6130
+ )
6131
+ WITH (UNIFORM_PARTITIONS = 64, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 64);
6132
+ )" ;
6133
+
6134
+ auto result = session.ExecuteSchemeQuery (query).GetValueSync ();
6135
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
6136
+
6137
+ auto client = kikimr.GetQueryClient ();
6138
+
6139
+ {
6140
+ auto result = client.ExecuteQuery (R"(
6141
+ INSERT INTO `/Root/DataShard` (Col1, Col2) VALUES
6142
+ (10u, "test1");
6143
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6144
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6145
+ }
6146
+
6147
+ {
6148
+ // non-volatile tx commit
6149
+ auto result = client.ExecuteQuery (R"(
6150
+ INSERT INTO `/Root/DataShard` (Col1, Col2) VALUES
6151
+ (10u, "test1"), (20u, "test2"), (4294967280u, "test3"), (4294967286u, "test");
6152
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6153
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::PRECONDITION_FAILED, result.GetIssues ().ToString ());
6154
+ }
6155
+
6156
+ {
6157
+ auto result = client.ExecuteQuery (R"(
6158
+ SELECT COUNT(*) FROM `/Root/DataShard`;
6159
+ UPSERT INTO `/Root/DataShard` (Col1, Col2) VALUES
6160
+ (10u, "test1"), (20u, "test2"), (4294967280u, "test3"), (4294967286u, "test");
6161
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6162
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6163
+ }
6164
+
6165
+ {
6166
+ auto result = client.ExecuteQuery (R"(
6167
+ SELECT COUNT(*) FROM `/Root/DataShard`;
6168
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
6169
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
6170
+ CompareYson (R"( [[4u]])" , FormatResultSetYson (result.GetResultSet (0 )));
6171
+ }
6172
+ }
6037
6173
}
6038
6174
6039
6175
} // namespace NKqp
0 commit comments