Skip to content

Commit a7876ca

Browse files
authored
feat: Add VortexFormatFactory to the datafusion integration (#2159)
A piece of the `FileFormat` API, used to if we want to create a DataFusion session and execute DDL statements like: ```sql CREATE EXTERNAL TABLE tbl STORED AS VORTEX LOCATION '/path/to/data';" ```
1 parent 207c9a9 commit a7876ca

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

vortex-datafusion/src/persistent/format.rs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ use std::sync::Arc;
44
use arrow_schema::{Schema, SchemaRef};
55
use async_trait::async_trait;
66
use datafusion::datasource::file_format::file_compression_type::FileCompressionType;
7-
use datafusion::datasource::file_format::{FileFormat, FilePushdownSupport};
7+
use datafusion::datasource::file_format::{FileFormat, FileFormatFactory, FilePushdownSupport};
88
use datafusion::datasource::physical_plan::{FileScanConfig, FileSinkConfig};
99
use datafusion::execution::SessionState;
1010
use datafusion_common::parsers::CompressionTypeVariant;
1111
use datafusion_common::stats::Precision;
1212
use datafusion_common::{
13-
not_impl_err, ColumnStatistics, DataFusionError, Result as DFResult, ScalarValue, Statistics,
13+
not_impl_err, ColumnStatistics, DataFusionError, GetExt, Result as DFResult, ScalarValue,
14+
Statistics,
1415
};
1516
use datafusion_expr::Expr;
1617
use datafusion_physical_expr::{LexRequirement, PhysicalExpr};
@@ -57,6 +58,35 @@ impl Default for VortexFormatOptions {
5758
}
5859
}
5960

61+
/// Minimal factory to create [`VortexFormat`] instances.
62+
#[derive(Debug, Default)]
63+
pub struct VortexFormatFactory {}
64+
65+
impl GetExt for VortexFormatFactory {
66+
fn get_ext(&self) -> String {
67+
VORTEX_FILE_EXTENSION.to_string()
68+
}
69+
}
70+
71+
impl FileFormatFactory for VortexFormatFactory {
72+
#[allow(clippy::disallowed_types)]
73+
fn create(
74+
&self,
75+
_state: &SessionState,
76+
_format_options: &std::collections::HashMap<String, String>,
77+
) -> DFResult<Arc<dyn FileFormat>> {
78+
Ok(self.default())
79+
}
80+
81+
fn default(&self) -> Arc<dyn FileFormat> {
82+
Arc::new(VortexFormat::default())
83+
}
84+
85+
fn as_any(&self) -> &dyn Any {
86+
self
87+
}
88+
}
89+
6090
impl Default for VortexFormat {
6191
fn default() -> Self {
6292
let opts = VortexFormatOptions::default();

0 commit comments

Comments
 (0)