Skip to content

deps(ibis): upgrade ibis 10.8.0 and duckdb 1.3.2#1317

Merged
douenergy merged 5 commits intoCanner:mainfrom
goldmedal:feat/upgrade-ibis-10.8.0
Sep 16, 2025
Merged

deps(ibis): upgrade ibis 10.8.0 and duckdb 1.3.2#1317
douenergy merged 5 commits intoCanner:mainfrom
goldmedal:feat/upgrade-ibis-10.8.0

Conversation

@goldmedal
Copy link
Contributor

@goldmedal goldmedal commented Sep 12, 2025

Description

Summary by CodeRabbit

  • Chores
    • Updated core dependencies for improved stability and compatibility:
      • ibis-framework upgraded (adds wider database connector support)
      • sqlglot, anyio, duckdb, oracledb, uvicorn, datafusion updated
    • No changes to public interfaces; upgrades focused on performance, reliability, and broader backend connectivity.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 12, 2025

Warning

Rate limit exceeded

@goldmedal has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 14 minutes and 9 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 7854322 and 11d4c56.

📒 Files selected for processing (3)
  • ibis-server/tests/routers/v2/connector/test_local_file.py (2 hunks)
  • ibis-server/tests/routers/v2/connector/test_minio_file.py (2 hunks)
  • ibis-server/tests/routers/v2/connector/test_trino.py (2 hunks)

Walkthrough

Dependency updates in ibis-server/pyproject.toml: ibis-framework git ref moved from canner/10.6.1canner/10.8.1 and its extras list expanded; sqlglot constraint changed to >=27.8.0,<28.0.0; and several packages bumped (anyio, duckdb, oracledb, uvicorn, datafusion). No code or public API changes.

Changes

Cohort / File(s) Summary of Changes
Dependency version updates
ibis-server/pyproject.toml
Updated ibis-framework git branch canner/10.6.1canner/10.8.1 and expanded extras from ["athena","bigquery","clickhouse"] to include ["mssql","mysql","oracle","postgres","snowflake","trino"]; changed sqlglot >=23.4,<26.5>=27.8.0,<28.0.0; bumped anyio 4.9.0 → 4.10.0; duckdb 1.2.1 → 1.3.2; oracledb 3.0.0 → 3.3.0; uvicorn ^0.34.0 → ^0.35.0; updated datafusion constraint to ^47.0.0, <49.0.0. No other edits.

Sequence Diagram(s)

(omitted) — changes are dependency/version updates only; no runtime control-flow modifications to diagram.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • douenergy

Pre-merge checks (3 passed)

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
Title Check ✅ Passed The title is concise, uses the "deps(ibis)" scope, and directly describes the primary dependency changes (upgrading ibis and duckdb), so it is related to the changeset and easy to scan. It is clear and avoids noisy elements or vague wording. However, it omits the datafusion upgrade present in the PR and there is a small version inconsistency between the title (ibis 10.8.0) and the pyproject/branch reference (canner/10.8.1), which could confuse reviewers.

Poem

I twitch my whiskers at version bliss,
New pins and bumps—no code amiss.
I hop through deps, a tidy queue,
From DuckDB to DataFusion too.
With silky ears I stamp “all set!” 🥕

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

@github-actions github-actions bot added ibis dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
Copy link
Contributor

@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: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 42a4779 and d635aa7.

⛔ Files ignored due to path filters (1)
  • ibis-server/poetry.lock is excluded by !**/*.lock
📒 Files selected for processing (1)
  • ibis-server/pyproject.toml (2 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: goldmedal
PR: Canner/wren-engine#1301
File: ibis-server/pyproject.toml:83-83
Timestamp: 2025-08-29T05:49:45.513Z
Learning: Polars dependency in ibis-server/pyproject.toml is correctly placed in dev dependencies because it's only used by helper tools in the tools/data_source/ directory, not in the main production application runtime.
📚 Learning: 2025-08-29T05:49:45.513Z
Learnt from: goldmedal
PR: Canner/wren-engine#1301
File: ibis-server/pyproject.toml:83-83
Timestamp: 2025-08-29T05:49:45.513Z
Learning: Polars dependency in ibis-server/pyproject.toml is correctly placed in dev dependencies because it's only used by helper tools in the tools/data_source/ directory, not in the main production application runtime.

Applied to files:

  • ibis-server/pyproject.toml
⏰ 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). (1)
  • GitHub Check: ci
🔇 Additional comments (8)
ibis-server/pyproject.toml (8)

37-37: anyio 4.10.0 looks good with FastAPI/HTTPX here.

No obvious compat issues with fastapi 0.116.x and httpx 0.28.x.


44-44: uvicorn ^0.35.0 upgrade LGTM.

Pairs fine with FastAPI 0.116.x; no breaking flags expected for typical run() usage.


83-83: Retained: polars stays in dev group (good).

Matches prior decision that polars is tooling-only.


49-49: DataFusion ^49: verify API changes (SessionContext/UDFs) and Arrow version alignment

  • Direct import/use found: ibis-server/app/util.py — get_datafusion_context creates datafusion.SessionConfig and datafusion.SessionContext.
  • wren_core.SessionContext is used widely (wren-core-py/tests/test_modeling_core.py, ibis-server/tools/*, ibis-server/app/mdl/core.py); confirm wren_core and its Python bindings are compatible with DataFusion 49.
  • Repo search did not show register_udf/create_dataframe/DataFrame(...) calls; still verify for indirect/embedded uses inside wren_core.
  • Could not run tests in the sandbox (pytest: command not found). Run full test suite locally or in CI against DataFusion 49 and confirm Arrow ABI/version alignment. If unsure, pin as an interim safety measure:
    -datafusion = "^49.0.0"
    +datafusion = "49.0.*"

40-40: Confirm Oracle client mode (thin vs thick)

oracledb = "3.3.0" in ibis-server/pyproject.toml. Repo scan found no init_oracle_client() calls or cx_Oracle/oracledb imports — only an oracledb mention in a comment at ibis-server/app/model/metadata/oracle.py:88. Confirm you intend to use oracledb "thin" mode at runtime, or add the Oracle Instant Client to CI images if you need "thick" mode.


38-38: DuckDB 1.3.2 — sanity-check Ibis DuckDB backend and extension-loading

Run targeted verification: pytest -q -k duckdb (local/CI) — tests couldn't be run here (pytest not found). Repo uses DuckDB widely; confirm no regressions in query translation, extension init, or exported APIs.

  • Inspect/run tests for: ibis-server/app/model/connector.py, ibis-server/app/model/metadata/object_storage.py, ibis-server/app/query_cache/init.py, ibis-server/app/routers/v3/connector.py, ibis-server/app/model/utils.py, and ibis-server/tests/* referencing "duckdb".
  • Focus checks: duckdb.connect behavior, init_duckdb_{s3,minio,gcs} and .attach handling, duckdb.read_csv semantics, DuckDBPyConnection API and exported exceptions/imports.
  • Action: run duckdb-marked tests and smoke-test connector flows; if failures appear, pin to the previous DuckDB version and add tests asserting expected translation/extension behavior.

13-23: Pin ibis git dep to an immutable commit and align PR description (10.8.0 vs 10.8.1)

  • Branch refs are mutable; use a tag or commit SHA for reproducible builds.
  • PR says “upgrade ibis to 10.8.0” but pyproject points at branch "canner/10.8.1" — confirm intended target and update PR text or dep.
  • I checked: sqlglot PR #5368 (Postgres ROUND fix) merged 2025-07-07; I found no evidence that Canner's canner/10.8.1 includes that change — confirm the chosen ref contains the ROUND fix before pinning.

Suggested change (apply after you pick the exact ref):

-ibis-framework = { git = "https://github.com/Canner/ibis.git", branch = "canner/10.8.1", extras = [
+ibis-framework = { git = "https://github.com/Canner/ibis.git", rev = "<commit-or-tag-for-canner/10.8.x>", extras = [

9-49: Action: regenerate Poetry lock, rebuild images, and run DB-marked test suites (manual verification required)

Sandbox verification failed: poetry missing (/bin/bash: line 3: poetry: command not found). Run the commands below locally and paste results.

  • Regenerate Poetry lock and rebuild images to validate resolver output and wheel availability (notably sqlglotrs, duckdb).
  • Run DB-marked suites (postgres, trino, oracle, snowflake, mssql, mysql) to catch backend-specific regressions.

Suggested commands:

#!/bin/bash
set -euo pipefail
poetry lock --no-update
poetry export -f requirements.txt --with-credentials -o /tmp/reqs.txt
python - <<'PY'
import importlib
mods = ["ibis","sqlglot","duckdb","oracledb","uvicorn","datafusion"]
for m in mods:
    importlib.import_module(m)
print("Imports OK")
PY
pytest -q -m "postgres or trino or oracle or snowflake or mssql or mysql"

@goldmedal goldmedal changed the title deps(ibis): upgrade ibis, datafusion and duckdb version deps(ibis): upgrade ibis and duckdb version Sep 12, 2025
@goldmedal
Copy link
Contributor Author

Faced some issues when upgrading DataFusion to 49.0.0. ecebc53 downgrades it back to 47.0.0

FAILED tests/routers/v2/connector/test_bigquery.py::test_interval - Exception: DataFusion error: NotImplemented("Unsupported CAST from Interval(MonthDayNano) to Utf8View")
FAILED tests/routers/v2/connector/test_bigquery.py::test_avg_interval - Exception: DataFusion error: NotImplemented("Unsupported CAST from Interval(MonthDayNano) to Utf8View")
FAILED tests/routers/v2/connector/test_bigquery.py::test_custom_datatypes_no_overrides - Exception: DataFusion error: NotImplemented("Unsupported CAST from Interval(MonthDayNano) to Utf8View")

@goldmedal goldmedal requested a review from douenergy September 12, 2025 08:27
@goldmedal goldmedal changed the title deps(ibis): upgrade ibis and duckdb version deps(ibis): upgrade ibis 10.8.0 and duckdb 1.3.2 Sep 12, 2025
@douenergy douenergy merged commit 8dc8584 into Canner:main Sep 16, 2025
5 checks passed
@goldmedal goldmedal deleted the feat/upgrade-ibis-10.8.0 branch September 16, 2025 08:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file ibis python Pull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants