duckdb 1.1.3.0 → 1.2.0.0
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 +4 -4
- data/.github/workflows/make_documents.yml +34 -0
- data/.github/workflows/test_on_macos.yml +2 -2
- data/.github/workflows/test_on_ubuntu.yml +2 -2
- data/.github/workflows/test_on_windows.yml +2 -2
- data/.gitignore +1 -0
- data/.rdoc_options +22 -0
- data/CHANGELOG.md +49 -0
- data/Dockerfile +20 -9
- data/Gemfile.lock +23 -11
- data/README.md +17 -3
- data/duckdb.gemspec +1 -0
- data/ext/duckdb/appender.c +113 -78
- data/ext/duckdb/blob.c +3 -0
- data/ext/duckdb/column.c +33 -3
- data/ext/duckdb/config.c +3 -0
- data/ext/duckdb/connection.c +6 -0
- data/ext/duckdb/database.c +6 -0
- data/ext/duckdb/duckdb.c +1 -0
- data/ext/duckdb/error.c +3 -0
- data/ext/duckdb/extconf.rb +0 -3
- data/ext/duckdb/extracted_statements.c +3 -0
- data/ext/duckdb/logical_type.c +187 -0
- data/ext/duckdb/logical_type.h +13 -0
- data/ext/duckdb/pending_result.c +5 -0
- data/ext/duckdb/prepared_statement.c +46 -8
- data/ext/duckdb/result.c +16 -44
- data/ext/duckdb/ruby-duckdb.h +2 -0
- data/lib/duckdb/appender.rb +211 -48
- data/lib/duckdb/column.rb +0 -2
- data/lib/duckdb/connection.rb +1 -12
- data/lib/duckdb/database.rb +1 -6
- data/lib/duckdb/interval.rb +12 -10
- data/lib/duckdb/library_version.rb +2 -0
- data/lib/duckdb/logical_type.rb +22 -0
- data/lib/duckdb/pending_result.rb +1 -1
- data/lib/duckdb/result.rb +16 -16
- data/lib/duckdb/version.rb +1 -1
- data/lib/duckdb.rb +1 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ed07310471afbddcd5b4facd1720eeae0868af7d2682754a30361bafdf45b5a
|
4
|
+
data.tar.gz: 984fd1ac1d47a72c0d20a2b1225656baf8838a47c70c3edc54d58bde0490cf25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e85e65243f72ac9d1d8bab1ec44a18b7ac31dccba3cfd12dc81c075f44ea79592b7357dde7f30b4276fda2eee769aa93986ca216061ea2aa497a7e7038872df
|
7
|
+
data.tar.gz: ee8db3baf4385b71e4c4d4765200baacef1df273702281e33809d2b4037bc25b4bae008e0501c178f615ba22f5a1b99021a22d15d5982054dbe675a769ca1cd8
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: Deploy RDoc to GitHub Pages
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
deploy:
|
10
|
+
name: Build and Deploy RDoc
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
# リポジトリをクローン
|
15
|
+
- name: Checkout code
|
16
|
+
uses: actions/checkout@v3
|
17
|
+
|
18
|
+
# Ruby をセットアップ
|
19
|
+
- name: Set up Ruby
|
20
|
+
uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: 3.4
|
23
|
+
|
24
|
+
# RDoc ドキュメントを生成
|
25
|
+
- name: Generate RDoc
|
26
|
+
run: rdoc -o docs
|
27
|
+
|
28
|
+
# GitHub Pages 用にデプロイ
|
29
|
+
- name: Deploy to GitHub Pages
|
30
|
+
uses: peaceiris/actions-gh-pages@v3
|
31
|
+
with:
|
32
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
33
|
+
publish_branch: gh-pages
|
34
|
+
publish_dir: ./docs
|
@@ -15,8 +15,8 @@ jobs:
|
|
15
15
|
runs-on: macos-latest
|
16
16
|
strategy:
|
17
17
|
matrix:
|
18
|
-
ruby: ['3.1.6', '3.2.6', '3.3.6', '3.4.
|
19
|
-
duckdb: ['1.1.3', '1.1.1', '1.0.0']
|
18
|
+
ruby: ['3.1.6', '3.2.6', '3.3.6', '3.4.2', 'head']
|
19
|
+
duckdb: ['1.2.0', '1.1.3', '1.1.1', '1.0.0']
|
20
20
|
|
21
21
|
steps:
|
22
22
|
- uses: actions/checkout@v4
|
@@ -15,8 +15,8 @@ jobs:
|
|
15
15
|
runs-on: ubuntu-latest
|
16
16
|
strategy:
|
17
17
|
matrix:
|
18
|
-
ruby: ['3.1.6', '3.2.6', '3.3.6', '3.4.
|
19
|
-
duckdb: ['1.1.3', '1.1.1', '1.0.0']
|
18
|
+
ruby: ['3.1.6', '3.2.6', '3.3.6', '3.4.2', 'head']
|
19
|
+
duckdb: ['1.2.0', '1.1.3', '1.1.1', '1.0.0']
|
20
20
|
|
21
21
|
steps:
|
22
22
|
- uses: actions/checkout@v4
|
@@ -15,8 +15,8 @@ jobs:
|
|
15
15
|
runs-on: windows-latest
|
16
16
|
strategy:
|
17
17
|
matrix:
|
18
|
-
ruby: ['3.1.6', '3.2.
|
19
|
-
duckdb: ['1.1.3', '1.1.1', '1.0.0']
|
18
|
+
ruby: ['3.1.6', '3.2.6', '3.3.6', '3.4.1', 'ucrt', 'mingw', 'mswin', 'head']
|
19
|
+
duckdb: ['1.2.0', '1.1.3', '1.1.1', '1.0.0']
|
20
20
|
|
21
21
|
steps:
|
22
22
|
- uses: actions/checkout@v4
|
data/.gitignore
CHANGED
data/.rdoc_options
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
encoding: UTF-8
|
3
|
+
static_path: []
|
4
|
+
rdoc_include: []
|
5
|
+
charset: UTF-8
|
6
|
+
exclude:
|
7
|
+
- "~\\z"
|
8
|
+
- "\\.orig\\z"
|
9
|
+
- "\\.rej\\z"
|
10
|
+
- "\\.bak\\z"
|
11
|
+
- "\\.gemspec\\z"
|
12
|
+
- "ext/duckdb/extconf.rb"
|
13
|
+
- "Gemfile"
|
14
|
+
- "Gemfile.lock"
|
15
|
+
- "Rakefile"
|
16
|
+
- "getduckdb.sh"
|
17
|
+
- "rdoc.log"
|
18
|
+
- "tmp"
|
19
|
+
- "mkmf.log"
|
20
|
+
- "Dockerfile"
|
21
|
+
- "bin"
|
22
|
+
main_page: "README.md"
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,55 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
# Unreleased
|
5
5
|
|
6
|
+
# 1.2.0.0 - 2025-02-24
|
7
|
+
- bump duckdb to 1.2.0.
|
8
|
+
- add `DuckDB::LogicalType` class(Thanks to @otegami).
|
9
|
+
- `DuckDB::LogicalType` class is under construction. `DuckDB::LogicalType#type`, `DuckDB::LogicalType#width`,
|
10
|
+
`DuckDB::LogicalType#scale`, `DuckDB::LogicalType#child_type`, `DuckDB::LogicalType#size`,
|
11
|
+
`DuckDB::LogicalType#key_type`, and `DuckDB::LogicalType#value_type` are available.
|
12
|
+
- add `DuckDB::Appender#error_message`.
|
13
|
+
- fix error message when `DuckDB::Appender#flush`, `DuckDB::Appender#close`, `DuckDB::Appender#end_row`,
|
14
|
+
`DuckDB::Appender#append_bool`, `DuckDB::Appender#append_int8`, `DuckDB::Appender#append_int16`,
|
15
|
+
`DuckDB::Appender#append_int32`, `DuckDB::Appender#append_int64`, `DuckDB::Appender#append_uint8` failed.
|
16
|
+
- `DuckDB::Appender#begin_row` does nothing. Only returns self. `DuckDB::Appender#end_row` is only required.
|
17
|
+
- bump ruby in CI. use 3.4.2 on MacOS and Ubuntu, 3.4.1 on Windows.
|
18
|
+
|
19
|
+
## Breaking changes
|
20
|
+
- `DuckDB::Result#row_count`, `DuckDB::Result#row_size` are deprecated.
|
21
|
+
- `DuckDB::Result#use_chunk_each?`, `DuckDB::Result#use_chunk_each=` are deprecated.
|
22
|
+
- `DuckDB::Result#chunk_each` is deprecated.
|
23
|
+
- `DuckDB::Result#each` only works at first time because duckdb_chunk_each C-API is deprecated.
|
24
|
+
Calling `DuckDB::Result#each` twice or more does not work.
|
25
|
+
```ruby
|
26
|
+
result = con.query('SELECT * FROM table')
|
27
|
+
result.each do |record|
|
28
|
+
p record # <= this works fine.
|
29
|
+
end
|
30
|
+
# calling each again does not work.
|
31
|
+
result.each do |record|
|
32
|
+
p record # <= this will not work
|
33
|
+
end
|
34
|
+
```
|
35
|
+
If you prefer to use `DuckDB::Result#each` multiple times, set `DuckDB::Result.use_chunk_each = true`.
|
36
|
+
But this behavior will be removed in the future release.
|
37
|
+
```ruby
|
38
|
+
DuckDB::Result.use_chunk_each = true
|
39
|
+
result = con.query('SELECT * FROM table')
|
40
|
+
result.each do |record|
|
41
|
+
p record # <= this works fine.
|
42
|
+
end
|
43
|
+
# calling each again works.
|
44
|
+
result.each do |record|
|
45
|
+
p record # <= this works fine.
|
46
|
+
end
|
47
|
+
```
|
48
|
+
- `DuckDB::Result#streaming?` will be deprecated.
|
49
|
+
|
50
|
+
# 1.1.3.1 - 2024-11-27
|
51
|
+
- fix to `DuckDB::Connection#query` with multiple SQL statements. Calling PreparedStatement#destroy after each statement executed.
|
52
|
+
- install valgrind in docker development environment.
|
53
|
+
- add `DuckDB::Appender#append_default`.
|
54
|
+
|
6
55
|
# 1.1.3.0 - 2024-11-10
|
7
56
|
- add `DuckDB::PreparedStatement#bind_decimal`. (Thanks to @otegami)
|
8
57
|
- bump duckdb to 1.1.3.
|
data/Dockerfile
CHANGED
@@ -1,21 +1,32 @@
|
|
1
|
-
ARG RUBY_VERSION=3.
|
1
|
+
ARG RUBY_VERSION=3.4.2
|
2
2
|
FROM ruby:${RUBY_VERSION}
|
3
3
|
|
4
|
-
ARG DUCKDB_VERSION=1.
|
4
|
+
ARG DUCKDB_VERSION=1.2.0
|
5
|
+
ARG VALGRIND_VERSION=3.21.0
|
5
6
|
|
6
7
|
RUN apt update -qq && \
|
7
|
-
apt install -y build-essential curl git wget
|
8
|
+
apt install -y build-essential curl git wget libc6-dbg
|
8
9
|
|
9
10
|
COPY getduckdb.sh .
|
10
11
|
RUN ./getduckdb.sh
|
11
12
|
|
12
|
-
RUN unzip duckdb.zip -d libduckdb
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
RUN unzip duckdb.zip -d libduckdb && \
|
14
|
+
mv libduckdb/duckdb.* /usr/local/include && \
|
15
|
+
mv libduckdb/libduckdb.so /usr/local/lib && \
|
16
|
+
ldconfig /usr/local/lib
|
17
|
+
|
18
|
+
RUN mkdir valgrind-tmp && \
|
19
|
+
cd valgrind-tmp && \
|
20
|
+
wget https://sourceware.org/pub/valgrind/valgrind-${VALGRIND_VERSION}.tar.bz2 && \
|
21
|
+
tar xf valgrind-${VALGRIND_VERSION}.tar.bz2 && \
|
22
|
+
cd valgrind-${VALGRIND_VERSION} && \
|
23
|
+
./configure && \
|
24
|
+
make -s && \
|
25
|
+
make -s install && \
|
26
|
+
cd .. && \
|
27
|
+
rm -rf /valgrind-tmp
|
16
28
|
|
17
29
|
COPY . /root/ruby-duckdb
|
18
30
|
WORKDIR /root/ruby-duckdb
|
19
31
|
RUN git config --global --add safe.directory /root/ruby-duckdb
|
20
|
-
RUN bundle install
|
21
|
-
RUN rake build
|
32
|
+
RUN bundle install && rake build
|
data/Gemfile.lock
CHANGED
@@ -1,31 +1,43 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
duckdb (1.
|
4
|
+
duckdb (1.2.0.0)
|
5
5
|
bigdecimal (>= 3.1.4)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
benchmark-ips (2.14.0)
|
11
|
-
bigdecimal (3.1.
|
12
|
-
mini_portile2 (2.8.
|
13
|
-
minitest (5.25.
|
14
|
-
nokogiri (1.
|
11
|
+
bigdecimal (3.1.9)
|
12
|
+
mini_portile2 (2.8.8)
|
13
|
+
minitest (5.25.4)
|
14
|
+
nokogiri (1.18.3)
|
15
15
|
mini_portile2 (~> 2.8.2)
|
16
16
|
racc (~> 1.4)
|
17
|
-
nokogiri (1.
|
17
|
+
nokogiri (1.18.3-aarch64-linux-gnu)
|
18
|
+
racc (~> 1.4)
|
19
|
+
nokogiri (1.18.3-arm-linux-gnu)
|
20
|
+
racc (~> 1.4)
|
21
|
+
nokogiri (1.18.3-arm64-darwin)
|
22
|
+
racc (~> 1.4)
|
23
|
+
nokogiri (1.18.3-x86_64-darwin)
|
24
|
+
racc (~> 1.4)
|
25
|
+
nokogiri (1.18.3-x86_64-linux-gnu)
|
18
26
|
racc (~> 1.4)
|
19
27
|
racc (1.8.1)
|
20
28
|
rake (13.2.1)
|
21
|
-
rake-compiler (1.2.
|
29
|
+
rake-compiler (1.2.9)
|
22
30
|
rake
|
23
|
-
ruby_memcheck (3.0.
|
31
|
+
ruby_memcheck (3.0.1)
|
24
32
|
nokogiri
|
25
|
-
stackprof (0.2.
|
33
|
+
stackprof (0.2.27)
|
26
34
|
|
27
35
|
PLATFORMS
|
28
|
-
|
36
|
+
aarch64-linux
|
37
|
+
arm-linux
|
38
|
+
arm64-darwin
|
39
|
+
x86-linux
|
40
|
+
x86_64-darwin
|
29
41
|
x86_64-linux
|
30
42
|
|
31
43
|
DEPENDENCIES
|
@@ -39,4 +51,4 @@ DEPENDENCIES
|
|
39
51
|
stackprof
|
40
52
|
|
41
53
|
BUNDLED WITH
|
42
|
-
2.5.
|
54
|
+
2.5.22
|
data/README.md
CHANGED
@@ -46,7 +46,7 @@ brew install duckdb
|
|
46
46
|
|
47
47
|
Using [Ruby + Devkit](https://rubyinstaller.org/downloads/) is recommended.
|
48
48
|
|
49
|
-
1. Download libduckdb-windows-amd64.zip from [DuckDB](https://github.com/duckdb/duckdb/releases) and
|
49
|
+
1. Download libduckdb-windows-amd64.zip from [DuckDB](https://github.com/duckdb/duckdb/releases) and extract it.
|
50
50
|
2. Copy `duckdb.dll` into `C:\Windows\System32`
|
51
51
|
|
52
52
|
## How to install
|
@@ -65,6 +65,8 @@ gem install duckdb -- --with-duckdb-include=/duckdb_header_directory --with-duck
|
|
65
65
|
|
66
66
|
## Usage
|
67
67
|
|
68
|
+
The followings are some examples, for more detailed information, please refer to the [documentation](https://suketa.github.io/ruby-duckdb/index.html).
|
69
|
+
|
68
70
|
```ruby
|
69
71
|
require 'duckdb'
|
70
72
|
|
@@ -115,7 +117,7 @@ con.query('SELECT * FROM users WHERE name = $name AND email = $email', name: 'Al
|
|
115
117
|
```
|
116
118
|
### Using prepared statement
|
117
119
|
|
118
|
-
You can use prepared statement.
|
120
|
+
You can use prepared statement. Prepared statement object is created by `Connection#prepare` method or `DuckDB::PreparedStatement.new`.
|
119
121
|
|
120
122
|
```ruby
|
121
123
|
stmt = con.prepare('SELECT * FROM users WHERE name = $name AND email = $email')
|
@@ -125,7 +127,20 @@ stmt = con.prepare('SELECT * FROM users WHERE name = $name AND email = $email')
|
|
125
127
|
# stmt = DuckDB::PreparedStatement.new(con, 'SELECT * FROM users WHERE name = $name AND email = $email')
|
126
128
|
stmt.bind(name: 'Alice', email: 'alice@example.com')
|
127
129
|
result = stmt.execute
|
130
|
+
stmt.destroy
|
131
|
+
```
|
132
|
+
You must call `PreparedStatement#destroy` method after using prepared statement. Otherwise, automatically destroyed
|
133
|
+
when the PreparedStatement object is garbage collected.
|
134
|
+
|
135
|
+
Instead of calling `PreparedStatement#destroy`, you can use block.
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
result = con.prepare('SELECT * FROM users WHERE name = $name AND email = $email') do |stmt|
|
139
|
+
stmt.bind(name: 'Alice', email: 'alice@example.com')
|
140
|
+
stmt.execute
|
141
|
+
end
|
128
142
|
```
|
143
|
+
|
129
144
|
### Using async query
|
130
145
|
|
131
146
|
You can use async query.
|
@@ -205,7 +220,6 @@ def append
|
|
205
220
|
appender = con.appender('users')
|
206
221
|
|
207
222
|
10000.times do
|
208
|
-
appender.begin_row
|
209
223
|
appender.append(1)
|
210
224
|
appender.append('Alice')
|
211
225
|
appender.end_row
|
data/duckdb.gemspec
CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.homepage = 'https://github.com/suketa/ruby-duckdb'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
18
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
18
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
19
20
|
spec.metadata['source_code_uri'] = 'https://github.com/suketa/ruby-duckdb'
|
20
21
|
spec.metadata['changelog_uri'] = 'https://github.com/suketa/ruby-duckdb/blob/master/CHANGELOG.md'
|