@@ -172,6 +172,8 @@ pub struct WriteParams {
172
172
pub object_store_registry : Arc < ObjectStoreRegistry > ,
173
173
174
174
pub session : Option < Arc < Session > > ,
175
+
176
+ pub file_writer_options : Option < FileWriterOptions > ,
175
177
}
176
178
177
179
impl Default for WriteParams {
@@ -191,6 +193,7 @@ impl Default for WriteParams {
191
193
enable_v2_manifest_paths : false ,
192
194
object_store_registry : Arc :: new ( ObjectStoreRegistry :: default ( ) ) ,
193
195
session : None ,
196
+ file_writer_options : None ,
194
197
}
195
198
}
196
199
}
@@ -249,7 +252,7 @@ pub async fn do_write_fragments(
249
252
. boxed ( )
250
253
} ;
251
254
252
- let writer_generator = WriterGenerator :: new ( object_store, base_dir, schema, storage_version) ;
255
+ let writer_generator = WriterGenerator :: new ( object_store, base_dir, schema, storage_version, params . clone ( ) ) ;
253
256
let mut writer: Option < Box < dyn GenericWriter > > = None ;
254
257
let mut num_rows_in_current_file = 0 ;
255
258
let mut fragments = Vec :: new ( ) ;
@@ -506,6 +509,7 @@ pub async fn open_writer(
506
509
schema : & Schema ,
507
510
base_dir : & Path ,
508
511
storage_version : LanceFileVersion ,
512
+ params : Option < & WriteParams > ,
509
513
) -> Result < Box < dyn GenericWriter > > {
510
514
let filename = format ! ( "{}.lance" , Uuid :: new_v4( ) ) ;
511
515
@@ -523,14 +527,17 @@ pub async fn open_writer(
523
527
filename,
524
528
) )
525
529
} else {
530
+ let mut file_write_options = params
531
+ . as_ref ( )
532
+ . and_then ( |wp| wp. file_writer_options . as_ref ( ) )
533
+ . cloned ( )
534
+ . unwrap_or_default ( ) ;
535
+ file_write_options. format_version = Some ( storage_version) ;
526
536
let writer = object_store. create ( & full_path) . await ?;
527
537
let file_writer = v2:: writer:: FileWriter :: try_new (
528
538
writer,
529
539
schema. clone ( ) ,
530
- FileWriterOptions {
531
- format_version : Some ( storage_version) ,
532
- ..Default :: default ( )
533
- } ,
540
+ file_write_options,
534
541
) ?;
535
542
let writer_adapter = V2WriterAdapter {
536
543
writer : file_writer,
@@ -547,6 +554,7 @@ struct WriterGenerator {
547
554
base_dir : Path ,
548
555
schema : Schema ,
549
556
storage_version : LanceFileVersion ,
557
+ params : WriteParams ,
550
558
}
551
559
552
560
impl WriterGenerator {
@@ -555,12 +563,14 @@ impl WriterGenerator {
555
563
base_dir : & Path ,
556
564
schema : & Schema ,
557
565
storage_version : LanceFileVersion ,
566
+ params : WriteParams ,
558
567
) -> Self {
559
568
Self {
560
569
object_store,
561
570
base_dir : base_dir. clone ( ) ,
562
571
schema : schema. clone ( ) ,
563
572
storage_version,
573
+ params,
564
574
}
565
575
}
566
576
@@ -573,6 +583,7 @@ impl WriterGenerator {
573
583
& self . schema ,
574
584
& self . base_dir ,
575
585
self . storage_version ,
586
+ Some ( & self . params )
576
587
)
577
588
. await ?;
578
589
0 commit comments