@@ -943,6 +943,82 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
943943 UNIT_ASSERT_EQUAL (GetObjectKeys (writeBucket).size (), 3 );
944944 }
945945
946+ Y_UNIT_TEST (InsertIntoBucketValuesCast) {
947+ const TString writeDataSourceName = " /Root/write_data_source" ;
948+ const TString writeTableName = " /Root/write_binding" ;
949+ const TString writeBucket = " test_bucket_values_cast" ;
950+ const TString writeObject = " test_object_write/" ;
951+ {
952+ Aws::S3::S3Client s3Client = MakeS3Client ();
953+ CreateBucket (writeBucket, s3Client);
954+ }
955+
956+ auto kikimr = NTestUtils::MakeKikimrRunner ();
957+
958+ auto tc = kikimr->GetTableClient ();
959+ auto session = tc.CreateSession ().GetValueSync ().GetSession ();
960+ {
961+ const TString query = fmt::format (R"(
962+ CREATE EXTERNAL DATA SOURCE `{write_source}` WITH (
963+ SOURCE_TYPE="ObjectStorage",
964+ LOCATION="{write_location}",
965+ AUTH_METHOD="NONE"
966+ );
967+ CREATE EXTERNAL TABLE `{write_table}` (
968+ key Uint64 NOT NULL,
969+ value String NOT NULL
970+ ) WITH (
971+ DATA_SOURCE="{write_source}",
972+ LOCATION="{write_object}",
973+ FORMAT="tsv_with_names"
974+ );
975+ )" ,
976+ " write_source" _a = writeDataSourceName,
977+ " write_table" _a = writeTableName,
978+ " write_location" _a = GetBucketLocation (writeBucket),
979+ " write_object" _a = writeObject);
980+
981+ const auto result = session.ExecuteSchemeQuery (query).GetValueSync ();
982+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), NYdb::EStatus::SUCCESS, result.GetIssues ().ToOneLineString ());
983+ }
984+
985+ auto db = kikimr->GetQueryClient ();
986+ {
987+ const TString query = fmt::format (R"(
988+ INSERT INTO `{write_table}`
989+ (key, value)
990+ VALUES
991+ (1, "#######"),
992+ (4294967295u, "#######");
993+
994+ INSERT INTO `{write_source}`.`{write_object}` WITH (FORMAT = "tsv_with_names")
995+ (key, value)
996+ VALUES
997+ (1, "#######"),
998+ (4294967295u, "#######");
999+
1000+ INSERT INTO `{write_table}` SELECT * FROM AS_TABLE([
1001+ <|key: 1, value: "#####"|>,
1002+ <|key: 4294967295u, value: "#####"|>
1003+ ]);
1004+
1005+ INSERT INTO `{write_source}`.`{write_object}` WITH (FORMAT = "tsv_with_names")
1006+ SELECT * FROM AS_TABLE([
1007+ <|key: 1, value: "#####"|>,
1008+ <|key: 4294967295u, value: "#####"|>
1009+ ]);
1010+ )" ,
1011+ " write_source" _a = writeDataSourceName,
1012+ " write_table" _a = writeTableName,
1013+ " write_object" _a = writeObject);
1014+
1015+ const auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
1016+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), NYdb::EStatus::SUCCESS, result.GetIssues ().ToOneLineString ());
1017+ }
1018+
1019+ UNIT_ASSERT_EQUAL (GetObjectKeys (writeBucket).size (), 4 );
1020+ }
1021+
9461022 Y_UNIT_TEST (UpdateExternalTable) {
9471023 const TString readDataSourceName = " /Root/read_data_source" ;
9481024 const TString readTableName = " /Root/read_binding" ;
0 commit comments