Skip to main content

lance_file/versions/v2_0/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright The Lance Authors
3
4//! Lance v2.0 encoding composition.
5
6use std::sync::Arc;
7
8use bytes::Bytes;
9use lance_core::{Result, datatypes::Schema};
10use lance_encoding::encoder::{ArrayFieldEncodingStrategy, EncodedBatch, FieldEncodingStrategy};
11use lance_io::traits::Writer as ObjectWriter;
12
13use crate::writer::FileWriterOptions;
14
15mod writer;
16
17pub use writer::Writer;
18
19/// Compose the v2.0 field encoding mechanisms.
20pub fn encoding_strategy() -> Arc<dyn FieldEncodingStrategy> {
21    Arc::new(ArrayFieldEncodingStrategy::new())
22}
23
24/// Create a v2.0 writer with an explicit schema.
25pub fn create_writer(
26    object_writer: Box<dyn ObjectWriter>,
27    schema: Schema,
28    options: FileWriterOptions,
29) -> Result<Writer> {
30    Writer::try_new(object_writer, schema, options)
31}
32
33/// Create a v2.0 writer whose schema is inferred from the first batch.
34pub fn create_lazy_writer(
35    object_writer: Box<dyn ObjectWriter>,
36    options: FileWriterOptions,
37) -> Writer {
38    Writer::new_lazy(object_writer, options)
39}
40
41/// Encode a self-described v2.0 batch.
42pub fn encode_self_described_batch(batch: &EncodedBatch) -> Result<Bytes> {
43    writer::concat_lance_footer(batch, true)
44}
45
46/// Encode a mini-lance v2.0 batch.
47pub fn encode_mini_batch(batch: &EncodedBatch) -> Result<Bytes> {
48    writer::concat_lance_footer(batch, false)
49}