Skip to content

Conversation

@suketa
Copy link
Owner

@suketa suketa commented Nov 1, 2025

Summary by CodeRabbit

  • New Features

    • Introduces query-based appender for efficient data operations
    • Expands logical type system with comprehensive type support (integers, floats, timestamps, strings, blobs, and more)
    • Adds ValueImpl and ScalarFunction classes for advanced functionality
  • Chores

    • Minimum Ruby version requirement updated to 3.2.0

@coderabbitai
Copy link

coderabbitai bot commented Nov 1, 2025

Walkthrough

This PR releases version 1.4.1.0, introducing new methods appender_from_query and Appender.create_query, new classes ValueImpl and ScalarFunction, expanded LogicalType with numerous type constants and a new constructor, and raises the minimum Ruby version requirement to 3.2.0.

Changes

Cohort / File(s) Summary
Version Release
CHANGELOG.md, lib/duckdb/version.rb
Adds release entry for v1.4.1.0 (2025-11-01) documenting new public API: methods appender_from_query and Appender.create_query, new classes ValueImpl and ScalarFunction with set_name support, LogicalType.new(type_id) constructor, and expanded LogicalType constants (boolean, tinyint, smallint, integer, bigint, utinyint, usmallint, uinteger, ubigint, float, double, timestamp, date, time, interval, hugeint, uhughint, varchar, blob, timestamp_s, timestamp_ms, timestamp_ns, bit, time_tz, timestamp_tz)
Dependency Updates
duckdb.gemspec
Bumps minimum Ruby version requirement from >= 3.1.0 to >= 3.2.0

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

  • Changes are primarily version metadata, changelog documentation, and straightforward dependency bump
  • No complex logic, implementation details, or functional code modifications present in diff

Possibly related PRs

Poem

🐰 A version hops forth, now 1.4.1 bright,
New types and methods shine in the light,
Appenders dance free with queries in hand,
Ruby 3.2 stands firm in the land,
Duck(db) keeps evolving, ever in flight! 🚀

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "prepare release 1.4.1.0" directly and accurately describes the main purpose of the changeset. The primary changes involve updating the version constant to 1.4.1.0, adding a release entry to the CHANGELOG, and bumping the Ruby version requirement—all of which are standard release preparation steps. The title is concise, specific, and clearly communicates the version being prepared without unnecessary verbosity or vague language.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch prepare_release

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
CHANGELOG.md (1)

7-33: Add "Breaking changes" section documenting Ruby 3.2.0 minimum requirement.

The CHANGELOG lacks a "Breaking changes" section for 1.4.1.0, but the accompanying gemspec change raises the minimum Ruby version from 3.1.0 to 3.2.0. This is a significant breaking change that should be clearly documented to inform users upgrading from 1.3.1.0.

Consider adding a "Breaking changes" subsection to the 1.4.1.0 release entry:

 # 1.4.1.0 - 2025-11-01
 - add DuckDB::Connection#appender_from_query.
 - add DuckDB::Appender.create_query.
+
+## Breaking changes
+- Minimum Ruby version requirement raised to 3.2.0 (from 3.1.0).
+
 - add `DuckDB::LogicalType.boolean`, `DuckDB::LogicalType.tinyint`, ...
🧹 Nitpick comments (1)
CHANGELOG.md (1)

30-32: Under-construction warning for new classes could be more prominent.

The release notes mention that ValueImpl and ScalarFunction are "under construction" and should not be used directly, but this warning appears late in the release notes. Consider moving or emphasizing these caveats earlier to ensure users see them before attempting to use these new classes.

Consider restructuring the release notes to highlight experimental APIs earlier:

 # 1.4.1.0 - 2025-11-01
+
+⚠️ **Experimental APIs (under construction):**
+- `DuckDB::ValueImpl` — do not use directly; API may change.
+- `DuckDB::ScalarFunction` and `DuckDB::ScalarFunction#set_name` — API under development.
+
 - add DuckDB::Connection#appender_from_query.
 - add DuckDB::Appender.create_query.

Alternatively, place the experimental notices directly adjacent to their introductions.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ddbb70b and 40211f4.

⛔ Files ignored due to path filters (1)
  • Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • CHANGELOG.md (1 hunks)
  • duckdb.gemspec (1 hunks)
  • lib/duckdb/version.rb (1 hunks)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: suketa
Repo: suketa/ruby-duckdb PR: 0
File: :0-0
Timestamp: 2025-01-24T22:37:32.786Z
Learning: In Ruby-DuckDB C extensions, when initializing resources like prepared statements, store them directly in the context structure instead of using temporary variables to prevent memory leaks, especially when exceptions might be thrown.
📚 Learning: 2025-01-24T22:18:24.630Z
Learnt from: suketa
Repo: suketa/ruby-duckdb PR: 0
File: :0-0
Timestamp: 2025-01-24T22:18:24.630Z
Learning: When using ruby-asan (AddressSanitizer), avoid letting DuckDB throw C++ exceptions by checking conditions (like table existence) beforehand and raising Ruby exceptions directly to prevent ASAN from intercepting the C++ exceptions.

Applied to files:

  • lib/duckdb/version.rb
  • duckdb.gemspec
📚 Learning: 2025-01-24T22:37:32.786Z
Learnt from: suketa
Repo: suketa/ruby-duckdb PR: 0
File: :0-0
Timestamp: 2025-01-24T22:37:32.786Z
Learning: In Ruby-DuckDB C extensions, when initializing resources like prepared statements, store them directly in the context structure instead of using temporary variables to prevent memory leaks, especially when exceptions might be thrown.

Applied to files:

  • lib/duckdb/version.rb
📚 Learning: 2025-01-26T00:37:44.001Z
Learnt from: suketa
Repo: suketa/ruby-duckdb PR: 871
File: ext/duckdb/appender.c:170-178
Timestamp: 2025-01-26T00:37:44.001Z
Learning: In ruby-duckdb's DuckDB::Appender#append_uint8, values larger than uint8 max (255) are silently truncated to maintain backward compatibility, following C's implicit truncation behavior. Range checking is intentionally omitted to avoid breaking changes.

Applied to files:

  • lib/duckdb/version.rb
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (18)
  • GitHub Check: test (3.5.0-preview1, 1.4.1)
  • GitHub Check: test (head, 1.3.2)
  • GitHub Check: test (3.5.0-preview1, 1.3.2)
  • GitHub Check: test (head, 1.4.1)
  • GitHub Check: test (3.4.7, 1.3.2)
  • GitHub Check: test (3.4.7, 1.4.1)
  • GitHub Check: test (3.3.10, 1.4.1)
  • GitHub Check: test (3.2.9, 1.3.2)
  • GitHub Check: test (mingw, 1.4.1)
  • GitHub Check: test (mingw, 1.3.2)
  • GitHub Check: test (3.4.7, 1.3.2)
  • GitHub Check: test (head, 1.4.1)
  • GitHub Check: test (head, 1.3.2)
  • GitHub Check: test (3.3.10, 1.4.1)
  • GitHub Check: test (3.3.10, 1.3.2)
  • GitHub Check: test (3.2.9, 1.4.1)
  • GitHub Check: test (3.4.7, 1.4.1)
  • GitHub Check: test (3.2.9, 1.3.2)
🔇 Additional comments (3)
lib/duckdb/version.rb (1)

6-6: Version constant updated correctly.

Version bump from 1.3.1.0 to 1.4.1.0 is consistent with the release date and gemspec configuration.

CHANGELOG.md (1)

10-27: Comprehensive LogicalType constants and method additions.

The extensive list of new LogicalType constants and snake_case/Pascal-case variants (lines 10–27) is well-documented. The addition of DuckDB::LogicalType.new(type_id) constructor (line 33) and TIMESTAMP_NS infinity support (line 28) round out the public API expansion nicely.

duckdb.gemspec (1)

30-30: Ruby 3.2.0 minimum requirement is properly documented as a breaking change.

The CHANGELOG.md already explicitly documents this breaking change at line 53 under version 1.2.2.0: "- drop Ruby 3.1." This clearly communicates the compatibility shift to users and aligns with the gemspec change. No further action is required.

@suketa suketa merged commit 34c18dc into main Nov 1, 2025
38 checks passed
@suketa suketa deleted the prepare_release branch November 1, 2025 12:44
@coderabbitai coderabbitai bot mentioned this pull request Dec 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants