@@ -33,7 +33,9 @@ namespace paimon::test {
3333TEST (CoreOptionsTest, TestDefaultValue) {
3434 ASSERT_OK_AND_ASSIGN (CoreOptions core_options, CoreOptions::FromMap ({}));
3535 ASSERT_EQ (core_options.GetManifestFormat ()->Identifier (), " avro" );
36- ASSERT_EQ (core_options.GetWriteFileFormat ()->Identifier (), " parquet" );
36+ ASSERT_EQ (core_options.GetFileFormat ()->Identifier (), " parquet" );
37+ ASSERT_EQ (core_options.GetWriteFileFormat (0 )->Identifier (), " parquet" );
38+ ASSERT_EQ (core_options.GetWriteFileFormat (3 )->Identifier (), " parquet" );
3739 ASSERT_TRUE (core_options.GetFileSystem ());
3840 ASSERT_EQ (-1 , core_options.GetBucket ());
3941 ASSERT_EQ (64 * 1024L , core_options.GetPageSize ());
@@ -82,6 +84,10 @@ TEST(CoreOptionsTest, TestDefaultValue) {
8284 ASSERT_EQ (2 * 1024 * 1024 , core_options.DeletionVectorTargetFileSize ());
8385 ASSERT_EQ (ChangelogProducer::NONE , core_options.GetChangelogProducer ());
8486 ASSERT_FALSE (core_options.NeedLookup ());
87+ LookupStrategy expected_lookup_strategy = {/* is_first_row=*/ false ,
88+ /* produce_changelog=*/ false ,
89+ /* deletion_vector=*/ false , /* force_lookup=*/ false };
90+ ASSERT_EQ (expected_lookup_strategy, core_options.GetLookupStrategy ());
8591 ASSERT_TRUE (core_options.GetFieldsSequenceGroups ().empty ());
8692 ASSERT_FALSE (core_options.PartialUpdateRemoveRecordOnDelete ());
8793 ASSERT_TRUE (core_options.GetPartialUpdateRemoveRecordOnSequenceGroup ().empty ());
@@ -185,14 +191,17 @@ TEST(CoreOptionsTest, TestFromMap) {
185191 {Options::LOOKUP_CACHE_BLOOM_FILTER_FPP , " 0.5" },
186192 {Options::LOOKUP_CACHE_SPILL_COMPRESSION , " lz4" },
187193 {Options::SPILL_COMPRESSION_ZSTD_LEVEL , " 2" },
188- {Options::CACHE_PAGE_SIZE , " 6MB" }};
194+ {Options::CACHE_PAGE_SIZE , " 6MB" },
195+ {Options::FILE_FORMAT_PER_LEVEL , " 0:AVRO,3:parquet" }};
189196
190197 ASSERT_OK_AND_ASSIGN (CoreOptions core_options, CoreOptions::FromMap (options));
191198 auto fs = core_options.GetFileSystem ();
192199 ASSERT_TRUE (fs);
193200
194- auto format = core_options.GetWriteFileFormat ();
195- ASSERT_EQ (format->Identifier (), " orc" );
201+ ASSERT_EQ (core_options.GetFileFormat ()->Identifier (), " orc" );
202+ ASSERT_EQ (core_options.GetWriteFileFormat (0 )->Identifier (), " avro" );
203+ ASSERT_EQ (core_options.GetWriteFileFormat (1 )->Identifier (), " orc" );
204+ ASSERT_EQ (core_options.GetWriteFileFormat (3 )->Identifier (), " parquet" );
196205
197206 auto manifest_format = core_options.GetManifestFormat ();
198207 ASSERT_EQ (manifest_format->Identifier (), " avro" );
@@ -235,6 +244,11 @@ TEST(CoreOptionsTest, TestFromMap) {
235244 ASSERT_EQ (4 * 1024 * 1024 , core_options.DeletionVectorTargetFileSize ());
236245 ASSERT_EQ (ChangelogProducer::FULL_COMPACTION , core_options.GetChangelogProducer ());
237246 ASSERT_TRUE (core_options.NeedLookup ());
247+ LookupStrategy expected_lookup_strategy = {/* is_first_row=*/ false ,
248+ /* produce_changelog=*/ false ,
249+ /* deletion_vector=*/ true , /* force_lookup=*/ true };
250+ ASSERT_EQ (expected_lookup_strategy, core_options.GetLookupStrategy ());
251+
238252 std::map<std::string, std::string> seq_grp;
239253 seq_grp[" g_1,g_3" ] = " c,d" ;
240254 ASSERT_EQ (core_options.GetFieldsSequenceGroups (), seq_grp);
@@ -294,6 +308,13 @@ TEST(CoreOptionsTest, TestInvalidCase) {
294308 " invalid changelog producer: invalid" );
295309}
296310
311+ TEST (CoreOptionsTest, TestInvalidFileFormatPerLevel) {
312+ ASSERT_NOK_WITH_MSG (CoreOptions::FromMap ({{Options::FILE_FORMAT_PER_LEVEL , " 0:AVRO:parquet" }}),
313+ " fail to parse key file.format.per.level, value 0:AVRO:parquet" );
314+ ASSERT_NOK_WITH_MSG (CoreOptions::FromMap ({{Options::FILE_FORMAT_PER_LEVEL , " aaa:avro" }}),
315+ " fail to parse level aaa from string to int in file.format.per.level" );
316+ }
317+
297318TEST (CoreOptionsTest, TestCreateExternalPath) {
298319 std::map<std::string, std::string> options = {
299320 {Options::DATA_FILE_EXTERNAL_PATHS ,
0 commit comments