red-arrow-duckdb 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4e0bd37b9d6cdeb79f8b82668d0b074e1c4fa5acecbb88582fca04655373367
4
- data.tar.gz: b9d5fdc73e4eb4a09ef5f46ea80b05750a3c75593fc4d8ead8c3f56991d70483
3
+ metadata.gz: 63fb3f7af8e84c386b1dcec7309b967d507ec85a65355471167c15426a5cf2f3
4
+ data.tar.gz: 9ae59ace06c47648b5fd4fa14723773de03f80c1f51f121e1b8fa3b225d1c56a
5
5
  SHA512:
6
- metadata.gz: 65a8a8c0c9474a230dfee8a1a7731701d4d3ecdc22ef87b87d90ec5c2c91bd9cc2cb7ddd2dfe79f912ebb08d6db86888d5395709ea48fae6a77c531561b40e1a
7
- data.tar.gz: 1e69ff5db5ca882c607ca20a024d63f096e893080779c4bcd2c43e96f5f2f98ac0f2cc2e77e7cdcd093a2739911c720686d4cffa27904c38841ddeb0dcf855f9
6
+ metadata.gz: b63175c712cce70c9a48f2becb6581ff05ac5d153257bd740a178626222508f3f74c5bdab9e3618bc977e0b605fc79aa181c81cce8cfeaa33671d2ccf07bf763
7
+ data.tar.gz: 350c3eb4925cc5bd76af437c977f0cc8959c3ed91fcb4f119cb85c1c6f43a8709cb166dd993e53e9088edd4747b5950b875f0cc3548b03e512813c43b023e207
data/doc/text/news.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # News
2
2
 
3
+ ## 1.0.3 - 2024-10-11
4
+
5
+ ### Improvements
6
+
7
+ * Added support for DuckDB 1.1.0
8
+ * GH-4
9
+ * Patch by Sten Larsson
10
+
11
+ ### Thanks
12
+
13
+ * Sten Larsson
14
+
3
15
  ## 1.0.2 - 2022-03-06
4
16
 
5
17
  ### Improvements
@@ -24,7 +24,8 @@
24
24
  #include <duckdb.hpp>
25
25
  #ifndef DUCKDB_AMALGAMATION
26
26
  # include <duckdb.h>
27
- # include <duckdb/common/arrow_wrapper.hpp>
27
+ # include <duckdb/common/arrow/arrow_wrapper.hpp>
28
+ # include <duckdb/function/table/arrow.hpp>
28
29
  # include <duckdb/function/table_function.hpp>
29
30
  # include <duckdb/main/connection.hpp>
30
31
  # include <duckdb/planner/filter/conjunction_filter.hpp>
@@ -162,14 +163,11 @@ namespace {
162
163
  }
163
164
 
164
165
  arrow::compute::Expression
165
- convert_filters(std::unordered_map<
166
- idx_t,
167
- std::unique_ptr<duckdb::TableFilter>
168
- > &filters,
166
+ convert_filters(duckdb::TableFilterSet *filter_set,
169
167
  std::unordered_map<idx_t, std::string> &column_names)
170
168
  {
171
169
  std::vector<arrow::compute::Expression> expressions;
172
- for (auto it = filters.begin(); it != filters.end(); ++it) {
170
+ for (auto it = filter_set->filters.begin(); it != filter_set->filters.end(); ++it) {
173
171
  expressions.emplace_back(
174
172
  std::move(convert_filter(it->second.get(), column_names[it->first])));
175
173
  }
@@ -178,11 +176,7 @@ namespace {
178
176
 
179
177
  arrow::Result<std::unique_ptr<duckdb::ArrowArrayStreamWrapper>>
180
178
  arrow_table_produce_internal(uintptr_t data,
181
- std::pair<
182
- std::unordered_map<idx_t, std::string>,
183
- std::vector<std::string>
184
- > &project_columns,
185
- duckdb::TableFilterCollection *filters)
179
+ duckdb::ArrowStreamParameters &parameters)
186
180
  {
187
181
  auto garrow_table = GARROW_TABLE(reinterpret_cast<gpointer>(data));
188
182
  auto arrow_table = garrow_table_get_raw(garrow_table);
@@ -190,20 +184,22 @@ namespace {
190
184
  std::make_shared<arrow::dataset::InMemoryDataset>(arrow_table);
191
185
  ARROW_ASSIGN_OR_RAISE(auto scanner_builder, dataset->NewScan());
192
186
  bool have_filter =
193
- filters &&
194
- filters->table_filters &&
195
- !filters->table_filters->filters.empty();
187
+ parameters.filters &&
188
+ !parameters.filters->filters.empty();
196
189
  if (have_filter) {
197
190
  ARROW_RETURN_NOT_OK(
198
- scanner_builder->Filter(convert_filters(filters->table_filters->filters,
199
- project_columns.first)));
191
+ scanner_builder->Filter(
192
+ convert_filters(parameters.filters,
193
+ parameters.projected_columns.projection_map)));
200
194
  }
201
- if (!project_columns.second.empty()) {
202
- ARROW_RETURN_NOT_OK(scanner_builder->Project(project_columns.second));
195
+ if (!parameters.projected_columns.columns.empty()) {
196
+ ARROW_RETURN_NOT_OK(
197
+ scanner_builder->Project(
198
+ parameters.projected_columns.columns));
203
199
  }
204
200
  ARROW_ASSIGN_OR_RAISE(auto scanner, scanner_builder->Finish());
205
201
  ARROW_ASSIGN_OR_RAISE(auto reader, scanner->ToRecordBatchReader());
206
- auto stream_wrapper = duckdb::make_unique<duckdb::ArrowArrayStreamWrapper>();
202
+ auto stream_wrapper = duckdb::make_uniq<duckdb::ArrowArrayStreamWrapper>();
207
203
  ARROW_RETURN_NOT_OK(
208
204
  arrow::ExportRecordBatchReader(reader,
209
205
  &(stream_wrapper->arrow_array_stream)));
@@ -212,14 +208,9 @@ namespace {
212
208
 
213
209
  std::unique_ptr<duckdb::ArrowArrayStreamWrapper>
214
210
  arrow_table_produce(uintptr_t data,
215
- std::pair<
216
- std::unordered_map<idx_t, std::string>,
217
- std::vector<std::string>
218
- > &project_columns,
219
- duckdb::TableFilterCollection *filters)
211
+ duckdb::ArrowStreamParameters &parameters)
220
212
  {
221
- auto stream_wrapper_result =
222
- arrow_table_produce_internal(data, project_columns, filters);
213
+ auto stream_wrapper_result = arrow_table_produce_internal(data, parameters);
223
214
  if (!stream_wrapper_result.ok()) {
224
215
  throw std::runtime_error(
225
216
  std::string("[arrow][produce] failed to produce: ") +
@@ -227,6 +218,20 @@ namespace {
227
218
  }
228
219
  return std::move(*stream_wrapper_result);
229
220
  }
221
+
222
+ void
223
+ arrow_table_get_schema(uintptr_t data, duckdb::ArrowSchemaWrapper &schema)
224
+ {
225
+ auto garrow_table = GARROW_TABLE(reinterpret_cast<gpointer>(data));
226
+ auto arrow_table = garrow_table_get_raw(garrow_table);
227
+ auto export_schema_status = arrow::ExportSchema(*(arrow_table->schema()),
228
+ reinterpret_cast<ArrowSchema *>(&schema));
229
+ if (!export_schema_status.ok()) {
230
+ throw std::runtime_error(
231
+ std::string("[arrow][get_schema] failed to export schema: ") +
232
+ export_schema_status.ToString());
233
+ }
234
+ }
230
235
  }
231
236
 
232
237
  namespace arrow_duckdb {
@@ -245,14 +250,13 @@ namespace arrow_duckdb {
245
250
  {
246
251
  auto c_name = StringValueCStr(name);
247
252
  auto garrow_table = RVAL2GOBJ(arrow_table);
248
- const idx_t rows_per_tuple = 1000000;
249
253
  reinterpret_cast<duckdb::Connection *>(connection)
250
254
  ->TableFunction(
251
255
  "arrow_scan",
252
256
  {
253
257
  duckdb::Value::POINTER(reinterpret_cast<uintptr_t>(garrow_table)),
254
258
  duckdb::Value::POINTER(reinterpret_cast<uintptr_t>(arrow_table_produce)),
255
- duckdb::Value::UBIGINT(rows_per_tuple)
259
+ duckdb::Value::POINTER(reinterpret_cast<uintptr_t>(arrow_table_get_schema)),
256
260
  })
257
261
  ->CreateView(c_name, true, true);
258
262
  }
@@ -20,7 +20,9 @@
20
20
 
21
21
  #include <rbgobject.h>
22
22
 
23
+ extern "C" {
23
24
  #include <ruby-duckdb.h>
25
+ }
24
26
 
25
27
  #include "arrow-duckdb-registration.hpp"
26
28
 
@@ -99,7 +101,7 @@ namespace {
99
101
  result_ensure_gschema(Result *result)
100
102
  {
101
103
  ArrowSchema c_abi_schema;
102
- duckdb_arrow_schema schema = &c_abi_schema;
104
+ auto schema = reinterpret_cast<duckdb_arrow_schema>(&c_abi_schema);
103
105
  auto state = duckdb_query_arrow_schema(result->arrow, &schema);
104
106
  if (state == DuckDBError) {
105
107
  free(result->error_message);
@@ -121,7 +123,7 @@ namespace {
121
123
  result_fetch_internal(VALUE self, Result *result)
122
124
  {
123
125
  ArrowArray c_abi_array = {};
124
- duckdb_arrow_array array = &c_abi_array;
126
+ auto array = reinterpret_cast<duckdb_arrow_array>(&c_abi_array);
125
127
  auto state = duckdb_query_arrow_array(result->arrow, &array);
126
128
  if (state == DuckDBError) {
127
129
  free(result->error_message);
@@ -219,8 +221,7 @@ namespace {
219
221
  VALUE
220
222
  query_sql_arrow(VALUE self, VALUE sql)
221
223
  {
222
- rubyDuckDBConnection *ctx;
223
- Data_Get_Struct(self, rubyDuckDBConnection, ctx);
224
+ auto ctx = get_struct_connection(self);
224
225
 
225
226
  if (!(ctx->con)) {
226
227
  rb_raise(eDuckDBError, "Database connection closed");
@@ -253,8 +254,7 @@ namespace {
253
254
  VALUE
254
255
  query_unregister_arrow(VALUE self, VALUE name)
255
256
  {
256
- rubyDuckDBConnection *ctx;
257
- Data_Get_Struct(self, rubyDuckDBConnection, ctx);
257
+ auto ctx = get_struct_connection(self);
258
258
 
259
259
  if (!(ctx->con)) {
260
260
  rb_raise(eDuckDBError, "Database connection closed");
@@ -293,8 +293,7 @@ namespace {
293
293
  VALUE
294
294
  query_register_arrow(VALUE self, VALUE name, VALUE arrow_table)
295
295
  {
296
- rubyDuckDBConnection *ctx;
297
- Data_Get_Struct(self, rubyDuckDBConnection, ctx);
296
+ auto ctx = get_struct_connection(self);
298
297
 
299
298
  if (!(ctx->con)) {
300
299
  rb_raise(eDuckDBError, "Database connection closed");
@@ -329,8 +328,7 @@ namespace {
329
328
  VALUE
330
329
  prepared_statement_execute_arrow(VALUE self)
331
330
  {
332
- rubyDuckDBPreparedStatement *ctx;
333
- Data_Get_Struct(self, rubyDuckDBPreparedStatement, ctx);
331
+ auto ctx = get_struct_prepared_statement(self);
334
332
 
335
333
  ID id_new;
336
334
  CONST_ID(id_new, "new");
@@ -16,7 +16,7 @@ require "extpp"
16
16
  require "mkmf-gnome"
17
17
  require "native-package-installer"
18
18
 
19
- checking_for(checking_message("Homebrew")) do
19
+ homebrew = checking_for(checking_message("Homebrew")) do
20
20
  case NativePackageInstaller::Platform.detect
21
21
  when NativePackageInstaller::Platform::Homebrew
22
22
  openssl_prefix = `brew --prefix openssl`.chomp
@@ -40,6 +40,10 @@ unless have_library("duckdb")
40
40
  install_missing_native_package(debian: "libduckdb-dev",
41
41
  redhat: "duckdb-devel",
42
42
  homebrew: "duckdb") or exit(false)
43
+ if homebrew
44
+ $INCFLAGS << " -I" << File.join(`brew --prefix duckdb`.chomp, "include")
45
+ $LIBPATH |= [File.join(`brew --prefix duckdb`.chomp, "lib")]
46
+ end
43
47
  have_library("duckdb") or exit(false)
44
48
  end
45
49
 
@@ -1,4 +1,4 @@
1
- # Copyright 2021 Sutou Kouhei <kou@clear-code.com>
1
+ # Copyright 2021-2022 Sutou Kouhei <kou@clear-code.com>
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module ArrowDuckDB
16
- VERSION = "1.0.2"
16
+ VERSION = "1.0.3"
17
17
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-arrow-duckdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sutou Kouhei
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-03-05 00:00:00.000000000 Z
10
+ date: 2024-10-10 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: duckdb
@@ -104,7 +103,6 @@ homepage: https://github.com/red-data-tools/red-arrow-duckdb
104
103
  licenses:
105
104
  - Apache-2.0
106
105
  metadata: {}
107
- post_install_message:
108
106
  rdoc_options: []
109
107
  require_paths:
110
108
  - lib
@@ -119,8 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
117
  - !ruby/object:Gem::Version
120
118
  version: '0'
121
119
  requirements: []
122
- rubygems_version: 3.4.0.dev
123
- signing_key:
120
+ rubygems_version: 3.6.0.dev
124
121
  specification_version: 4
125
122
  summary: Red Arrow DuckDB is a library that provides Apache Arrow support to ruby-duckdb.
126
123
  test_files: []