diff --git a/DataViewer/DataSource.cpp b/DataViewer/DataSource.cpp
index e1b220c0..d35db2e2 100644
--- a/DataViewer/DataSource.cpp
+++ b/DataViewer/DataSource.cpp
@@ -51,6 +51,7 @@ bool IDataSource::IsWritable(GdaConst::DataSourceType ds_type)
ds_type == GdaConst::ds_mysql ||
ds_type == GdaConst::ds_oci ||
ds_type == GdaConst::ds_parquet ||
+ ds_type == GdaConst::ds_arrow ||
ds_type == GdaConst::ds_postgresql )
return true;
return false;
@@ -144,6 +145,8 @@ wxString IDataSource::GetDataTypeNameByExt(wxString ext)
ds_format = "ODS";
else if(ext.CmpNoCase("parquet")==0)
ds_format = "Parquet";
+ else if(ext.CmpNoCase("arrow")==0)
+ ds_format = "Arrow";
//else
// ds_format = "Unknown";
@@ -196,6 +199,7 @@ IDataSource* IDataSource::CreateDataSource(wxString data_type_name,
type == GdaConst::ds_xls ||
type == GdaConst::ds_xlsx ||
type == GdaConst::ds_parquet ||
+ type == GdaConst::ds_arrow ||
type == GdaConst::ds_geo_json )
{
// using xxx to create DataSource instance
@@ -254,6 +258,7 @@ IDataSource* IDataSource::CreateDataSource(wxString ds_json)
type == GdaConst::ds_xls ||
type == GdaConst::ds_xlsx ||
type == GdaConst::ds_parquet ||
+ type == GdaConst::ds_arrow ||
type == GdaConst::ds_geo_json )
{
json_spirit::Value json_ds_path;
diff --git a/DialogTools/DatasourceDlg.cpp b/DialogTools/DatasourceDlg.cpp
index 41ebb384..db978ce7 100644
--- a/DialogTools/DatasourceDlg.cpp
+++ b/DialogTools/DatasourceDlg.cpp
@@ -54,6 +54,7 @@ void DatasourceDlg::Init()
// create file type dataset pop-up menu dynamically
ds_names.Add("GeoParquet (*.parquet)|*.parquet");
ds_names.Add("ESRI Shapefile (*.shp)|*.shp");
+ ds_names.Add("GeoArrow (*.arrow)|*.arrow");
ds_names.Add("ESRI File Geodatabase (*.gdb)|*.gdb");
ds_names.Add("GeoJSON (*.geojson;*.json)|*.geojson;*.json");
ds_names.Add("GeoPackage (*.gpkg)|*.gpkg");
diff --git a/GdaConst.cpp b/GdaConst.cpp
index a7f05631..b6b196e9 100644
--- a/GdaConst.cpp
+++ b/GdaConst.cpp
@@ -773,6 +773,17 @@ void GdaConst::init()
datasrc_field_illegal_regex[ds_dbf] = db_field_name_illegal_regex;
datasrc_field_casesensitive[ds_dbf] = false;
+ datasrc_str_to_type["Arrow"] = ds_arrow;
+ datasrc_type_to_prefix[ds_arrow] = "";
+ datasrc_type_to_fullname[ds_arrow] = "Arrow";
+ // share the same with DBF
+ datasrc_table_lens[ds_arrow] = 128;
+ datasrc_field_lens[ds_arrow] = 10;
+ datasrc_field_warning[ds_arrow] = default_field_warning;
+ datasrc_field_regex[ds_arrow] = db_field_name_regex;
+ datasrc_field_illegal_regex[ds_arrow] = db_field_name_illegal_regex;
+ datasrc_field_casesensitive[ds_arrow] = false;
+
datasrc_str_to_type["Parquet"] = ds_parquet;
datasrc_type_to_prefix[ds_parquet] = "";
datasrc_type_to_fullname[ds_parquet] = "Parquet";
diff --git a/GdaConst.h b/GdaConst.h
index 03dffc38..a10a49ab 100644
--- a/GdaConst.h
+++ b/GdaConst.h
@@ -74,7 +74,7 @@ class GdaConst {
ds_csv, ds_dbf, ds_geo_json, ds_gml, ds_kml,
ds_mapinfo, ds_mysql, ds_ms_sql, ds_oci, ds_odbc, ds_postgresql,
ds_shapefile, ds_sqlite, ds_gpkg, ds_wfs, ds_xls, ds_xlsx, ds_osm,
- ds_ods, ds_cartodb, ds_parquet, ds_unknown };
+ ds_ods, ds_cartodb, ds_parquet, ds_arrow, ds_unknown };
static std::map datasrc_str_to_type;
static std::map datasrc_type_to_str;