Skip to content

Commit 2f55d5d

Browse files
authored
Merge pull request #121 from carlopi/patches
Apply patch from duckdb/duckdb#8430 and update duckdb to latest main
2 parents f07879f + 0b8fb3e commit 2f55d5d

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

duckdb

Submodule duckdb updated 807 files

spatial/src/spatial/gdal/functions/st_read.cpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ struct GdalScanFunctionData : public TableFunctionData {
9494
vector<string> layer_creation_options;
9595
unique_ptr<SpatialFilter> spatial_filter;
9696
GDALDatasetUniquePtr dataset;
97-
unordered_map<idx_t, unique_ptr<ArrowConvertData>> arrow_convert_data;
9897
idx_t max_threads;
9998
// before they are renamed
10099
vector<string> all_names;
101100
vector<LogicalType> all_types;
102101
atomic<idx_t> lines_read;
102+
ArrowTableType arrow_table;
103103
};
104104

105105
struct GdalScanLocalState : ArrowScanLocalState {
@@ -351,16 +351,19 @@ unique_ptr<FunctionData> GdalTableFunction::Bind(ClientContext &context, TableFu
351351
':', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', ':', 'n', 'a',
352352
'm', 'e', '\a', '\0', '\0', '\0', 'o', 'g', 'c', '.', 'w', 'k', 'b'};
353353

354+
auto arrow_type = GetArrowLogicalType(attribute);
354355
if (attribute.metadata != nullptr && strncmp(attribute.metadata, ogc_flag, sizeof(ogc_flag)) == 0) {
355356
// This is a WKB geometry blob
356-
GetArrowLogicalType(attribute, result->arrow_convert_data, col_idx);
357+
result->arrow_table.AddColumn(col_idx, std::move(arrow_type));
357358
return_types.emplace_back(core::GeoTypes::WKB_BLOB());
358359
} else if (attribute.dictionary) {
359-
result->arrow_convert_data[col_idx] =
360-
make_uniq<ArrowConvertData>(GetArrowLogicalType(attribute, result->arrow_convert_data, col_idx));
361-
return_types.emplace_back(GetArrowLogicalType(*attribute.dictionary, result->arrow_convert_data, col_idx));
360+
auto dictionary_type = GetArrowLogicalType(attribute);
361+
return_types.emplace_back(dictionary_type->GetDuckType());
362+
arrow_type->SetDictionary(std::move(dictionary_type));
363+
result->arrow_table.AddColumn(col_idx, std::move(arrow_type));
362364
} else {
363-
return_types.emplace_back(GetArrowLogicalType(attribute, result->arrow_convert_data, col_idx));
365+
return_types.emplace_back(arrow_type->GetDuckType());
366+
result->arrow_table.AddColumn(col_idx, std::move(arrow_type));
364367
}
365368

366369
// keep these around for projection/filter pushdown later
@@ -492,12 +495,12 @@ void GdalTableFunction::Scan(ClientContext &context, TableFunctionInput &input,
492495
if (global_state.CanRemoveFilterColumns()) {
493496
state.all_columns.Reset();
494497
state.all_columns.SetCardinality(output_size);
495-
ArrowToDuckDB(state, data.arrow_convert_data, state.all_columns, data.lines_read - output_size, false);
498+
ArrowToDuckDB(state, data.arrow_table.GetColumns(), state.all_columns, data.lines_read - output_size, false);
496499
output.ReferenceColumns(state.all_columns, global_state.projection_ids);
497500
} else {
498501
output.SetCardinality(output_size);
499502

500-
ArrowToDuckDB(state, data.arrow_convert_data, output, data.lines_read - output_size, false);
503+
ArrowToDuckDB(state, data.arrow_table.GetColumns(), output, data.lines_read - output_size, false);
501504
}
502505

503506
output.Verify();

0 commit comments

Comments
 (0)