Skip to content

12.0.0

Latest

Choose a tag to compare

@ibis-project-bot ibis-project-bot released this 07 Feb 14:30
· 1 commit to main since this release

12.0.0 (2026-02-07)

⚠ BREAKING CHANGES

  • pyspark: PySpark <3.5 is no longer supported
  • officially drop support for 3.9, bump all dependencies
  • datatypes: infer decimal precision and scale

Features

  • api: implement upsert() using MERGE INTO (#11624) (9126733), closes #5391
  • api: support Table.cast(my_col=int) (9e209f3)
  • databricks: support json literals (f46a58f)
  • datafusion: add compilation rule for Strftime (6fa8411)
  • deps: enable compatibility with pandas 3.0.0 (#11873) (34a36be)
  • materialize: add new backend for Materialize streaming database (#11893) (35fcce0)
  • officially drop support for 3.9, bump all dependencies (aa16d08)
  • pyspark: support pyspark 4.0 (e9c35e6)
  • singlestoredb: add SingleStoreDB backend (#11595) (a83cfef)
  • support JSON literal values (#11728) (38b19c7), closes #11727
  • typing: improve typing of ibis.common.collections (e3aba92)
  • typing: make dtype() and schema() more typesafe (#11856) (116886f)
  • typing: make more arguments positional-only (610c450)
  • typing: make types more precise for many common Values (#11771) (2eb772a)

Bug Fixes

  • add order_by to first and last (7ead787), closes #11656
  • add upper _method_overrides in decompile (e7956f4), closes #11717
  • bigquery: relax decimal upper bounds (d05751b)
  • biquery: use qualified table name for upserts (120b2d8)
  • citation: fix CITATION.cff [skip ci] (305526a)
  • datatypes: infer decimal precision and scale (ed346e6)
  • datatypes: make decimal casts more permissive (ba087d2)
  • deps: pin dep on sqlglot to <28 (3e9156e)
  • deps: sqlglot 28.0 incompatibilities (#11839) (ab21efd)
  • docs: typo in Ibis description in why.qmd (#11816) (402c37d)
  • duckdb: create a single table from Python data object (7f82e5e), closes #11709
  • exasol: update Exasol Docker image tag to 2025.1.8 (#11806) (2414952), closes #11703
  • flink: don't pass unsupported "position" flag to regexp_replace (34f39cc)
  • mssql: use sge.National to support unicode in information_schema (#11877) (a254ccb)
  • mysql: use getuser() and empty password string by default (#11904) (ba0218f)
  • polars: handle cross joins without passing join keys (d3c3bad), closes #11764
  • polars: support asof_join with no predicates (3fc9b64)
  • postgres: fix postgres asof joins to consider predicates correctly (064bd2d)
  • remove bogus leading ' from Struct repr (d7083c2)
  • return a tuple, not generator, from Table.bind() (cfc8b08)
  • sqlite: create a single table from Python object (4e6ddcf)
  • sqlite: precision loss in divide (c77e1bd)
  • support Backend == "some non backend object" (a5e7c22)
  • trino: add explicit type when compiling sge.Struct fields (fc49498)
  • type Value.name() as returning Self, not Value (d28b18d)
  • typing: add bool as accepted type for Table.filter (2853a4c)
  • typing: adjust a few small type errors (b2e3100)
  • typing: adjust typing of ibis.and_, or_, asc, and desc (#11845) (1f1c48b)
  • typing: improve a few internal types (426acc4)
  • window: support scalar values in WindowFunction.group_by (5028d8e)

Documentation

  • bigquery: add note on schema to insert() (a528450)
  • improve docstrings for as_scalar() and as_table() (e4f8762)
  • update the total count of available backends (#11895) (b2cc31e)

Refactors

  • move _binop() util function to be near ir.Value, not ir.Expr (484776f)
  • rename child to parent in SQLStringView (35a1cfa)
  • rename SortKey.expr to SortKey.arg and View.child to View.parent (03bf112)
  • rename View to AliasedRelation (375678b)
  • set order_by at creation time (9406b49)
  • swap ad-hoc TYPE_MAPPERS[key] to get_type_mapper(key) (926f589)
  • tpc: clean up some queries (9431fa9)
  • use Orderable abc for reductions with an order_by (#11868) (58e87cb)