Skip to content

chore(deps): update dependency org.tpolecat:doobie-core to v1.0.0-rc12 (main)#386

Closed
renovate[bot] wants to merge 1 commit intomainfrom
renovate/main-org.tpolecat-doobie-core-1.x
Closed

chore(deps): update dependency org.tpolecat:doobie-core to v1.0.0-rc12 (main)#386
renovate[bot] wants to merge 1 commit intomainfrom
renovate/main-org.tpolecat-doobie-core-1.x

Conversation

@renovate
Copy link

@renovate renovate bot commented Mar 5, 2026

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Update Change OpenSSF
org.tpolecat:doobie-core patch 1.0.0-RC21.0.0-RC12 OpenSSF Scorecard

Release Notes

typelevel/doobie (org.tpolecat:doobie-core)

v1.0.0-RC12

Compare Source

v1.0.0-RC11

Compare Source

What's new
Dependency updates
New Contributors

Full Changelog: typelevel/doobie@v1.0.0-RC10...v1.0.0-RC11

v1.0.0-RC10

Compare Source

This release is a small release, with a minor change and some dependency updates.

Dependency updates

Also thanks to various other project internal improvements from @​xuwei-k and @​sharmaakshay177!

New Contributors

Full Changelog: typelevel/doobie@v1.0.0-RC9...v1.0.0-RC10

v1.0.0-RC9

Compare Source

Fixes & Changes

Documentation

Dependency updates

Internal changes

New Contributors

Full Changelog: typelevel/doobie@v1.0.0-RC8...v1.0.0-RC9

v1.0.0-RC8

Compare Source

This release contains some small improvements/bugfixes

New

  • Allow constructing Read from a list of underlying instances by @​jatcwang in #​2195
  • Feature: Allow customizing individual steps of query execution by @​ulfryk in #​2154
  • Scala 3 OrElse: Remove unncessary by-name parameter #​2194

Bug fixes

Documentation

Full Changelog: typelevel/doobie@v1.0.0-RC7...v1.0.0-RC8

v1.0.0-RC7

Compare Source

[!IMPORTANT]
When upgrading, please skip 1.0.0-RC6. It is considered a broken release due to issues with unexpected implicit prioritization, which we've fixed in RC7.
Apologies to those that updated RC6 when it first came out!

Release notes below include all changes since 1.0.0-RC5.

Notable features / changes

Query Cancellation

Query cancellation has been implemented via calling PreparedStatement#close() on fiber cancellation.

Big thanks to @​TalkingFoxMid and contributions from @​satorg @​armanbilge!

Related PRs: #​2079 #​2088

Opt-in automatic derivation

Automatic derivation has been the (non-configurable) default in Doobie since the start. While convenient, it can lead to long compile times because Read/Write/Get/Put instances are derived every time it is needed.

We have significantly reworked the internals of Read/Write derivation to allow opt-in semi-auto and automatic derivation.

  • import doobie.implicits.* will enable automatic derivation (maintaining source compatibility to ease migration).
  • import doobie.generic.auto.* to explicitly enable automatic derivation. Compared to import doobie.implicits.* this brings just the implicits/givens necessary for automatic derivation
  • Instances for tuples are still automatically derived for convenience
  • To switch to explicitly derived instances, change import doobie.implicits.* to import doobie.syntax.all.* and gradually fix compile errors by deriving instances explicitly (see below):

To derive instances explicitly:

Scala 3:

case class Foo(a: String, b: Int) derives Read

[!IMPORTANT]
For Scala 3, we highly recommend using explicit derivation and avoid any automatic derivation (i.e. no imports of doobie.implicits.* or import doobie.generic.auto.*). Scala 3's implicit search algorithm doesn't seem to follow implicit prioritization the same way as Scala 2 compile, which means its implicit search is very expensive with automatic derivation (Leading to long compile times and "Implicit search problem too large." error for bigger case classes). See #​2214 for more information.

Scala 2+:

case class Foo(a: String, b: Int)

object Foo {
  implicit val read: Read[Foo] = Read.derived
}

As part of this derivatino rework, it is now possible to obtain a Read[Option[A]]/Write[Option[A]] instance
directly from Read[A]/Write[A].

Related PRs:

Better type-checking with JDBC vendor types (For Postgres java.time.* and enums)

In previous releases, doobie typecheck only checks against the integer (enum) returned by java.sql.ResultSetMetaData#getColumnType (java.sql.Types). However this is inadequate for two reasons:

  • java.sql.Types doesn't cover many other possible database-specific types (e.g. JSON column type)
  • JDBC drivers often return the wrong java.sql.Types for legacy reasons

For example, for a TIMESTAMP WITH TIME ZONE column Postgres JDBC driver will report that it has the type java.sql.Types.TIMESTAMP (surprising as java.sql.Types.TIMESTAMP_WITH_TIMEZONE exists).

PostgreSQL Data Type getColumnType() getColumnTypeName()
TIMESTAMP Types.TIMESTAMP "TIMESTAMP"
TIMESTAMP WITH TIME ZONE Types.TIMESTAMP "TIMESTAMPTZ"

This means by just using the result from getColumnType typechecking couldn't differentiate between a TIMESTAMP WITH TIME ZONE column vs TIMESTAMP (WITHOUT TIMEZONE) column - which has serious implications for correctness of your program if one uses the wrong column type!

Fortunately, we can see that getColumnTypeName does differentiate between the two column types.

To help improve typechecking for java.time.* types (and generally), we have made the following changes:

1. Get and Put can now specify vendor column type name

When creating a Get or Put instance, the vendor type name can now be specified so typechecking will check against it.
When constructing instances (e.g. Get.Basic.one(..)) you can pass the expected vendor type to checkedVendorType parameter, or None if you don't need or want to check against the vendor type.

2. Move java.time.* instances into database modules

java.time.* instances are moved to their database-specific modules to handle differences in databases and their drivers.

doobie module import
doobie-postgres doobie.postgres.implicits.*
doobie-mysql doobie.mysql.implicits.*

For other databases that support Java 8 time types, you can continue to use import doobie.implicits.javatimedrivernative.* but there's no check against vendor type names.

3. Make doobie.implicits.javasql instances available by default

doobie.implicits.javasql has now been removed. You can safely remove any import doobie.implicits.javasql.* as these instances are now available without any import.

4. Better typechecked array enum columns (Postgres-only)

If you have a column which is an array of enum type, you should switch to use doobie.postgres.implicits.arrayOfEnum
to define the Meta instance on the application side for better typechecking.

Related PRs:

Logging for streaming and updateMany queries

Query/Update which now allow queries ran through Query#stream and Update#withGeneratedKeys to be logged. As part of this work, doobie.hi.FC module also have 3 new functions: stream, executeWithResultSet and executeWithoutResultSet. Old functions that does not log (such as doobie.hi.FC.updateWithGeneratedKeys) has been deprecated and will be removed by 1.0.

Related PRs:

Other changes

Notable dependency updates

Internal/doc changes

New Contributors

Big thanks to all new and regular contributors!

Full Changelog: typelevel/doobie@v1.0.0-RC5...v1.0.0-RC7

v1.0.0-RC6: 1.0.0-RC6

Compare Source

Warning: We have an issue in this release related to automatic derivation not using explicitly defined instances (See #​2104). Please refrain from using this release and skip to 1.0.0-RC7 when it is out.

Query Cancellation

Query cancellation has been implemented via calling PreparedStatement#close() on fiber cancellation.

Big thanks to @​TalkingFoxMid and contributions from @​satorg @​armanbilge @​jatcwang!

Related PRs: #​2079 #​2088

Opt-in automatic derivation

Automatic derivation has been the (non-configurable) default in Doobie since the start. While convenient, it can lead to long compile times because Read/Write/Get/Put instances are derived every time it is needed.

For those who want shorter compile times, we have now made automatic derivation opt in!

  • import doobie.implicits.* will enable automatic derivation (maintaining source compatibility to ease migration).
  • import doobie.generic.auto.* to explicitly enable automatic derivation. Compared to import doobie.implicits.* this brings just the implicits/givens necessary for automatic derivation
  • Instances for tuples are still automatically derived for convenience
  • To switch to explicitly derived instances, change your import doobie.implicits.* to import doobie.syntax.all.* and gradually fix compile errors by deriving instances explicitly (see below):

To derive instances explicitly:

Scala 3:

case class Foo(a: String, b: Int) derives Read

Scala 2+:

case class Foo(a: String, b: Int)

object Foo {
  implicit val read: Read[Foo] = Read.derived
}

Related PRs:

Better type-checking with JDBC vendor types (For java.time.* and more)

In previous releases, doobie typecheck only checks against the int enum returned by java.sql.ResultSetMetaData#getColumnType (java.sql.Types). However this is inadequate for two reasons:

  • java.sql.Types doesn't cover many other possible database-specific types (e.g. JSON column type)
  • JDBC drivers often return the wrong java.sql.Types, often due to legacy

For example, for a TIMESTAMP WITH TIME ZONE column Postgres JDBC driver will report that it has the type java.sql.Types.TIMESTAMP (surprising as java.sql.Types.TIMESTAMP_WITH_TIMEZONE exists).

PostgreSQL Data Type getColumnType() getColumnTypeName()
TIMESTAMP Types.TIMESTAMP "TIMESTAMP"
TIMESTAMP WITH TIME ZONE Types.TIMESTAMP "TIMESTAMPTZ"

This means by just using the result from getColumnType typechecking couldn't differentiate between a TIMESTAMP WITH TIME ZONE column vs TIMESTAMP (WITHOUT TIMEZONE) column - which has serious implications for correctness of your program if one uses the wrong column type!

Fortunately, we can see that getColumnTypeName does differentiate between the two column types.

To help improve typechecking for java.time.* types (and generally), we have made the following changes:

1. Get and Put can now specify vendor column type name

When creating a Get or Put instance, the vendor type name can now be specified so typechecking will check against it.
When constructing instances (e.g. Get.Basic.one(..)) you can pass the expected vendor type to checkedVendorType parameter, or None if you don't need or want to check against the vendor type.

2. Move java.time.* instances into database modules

java.time.* instances are moved to their database-specific modules to handle differences in databases and their drivers.

doobie module import
doobie-postgres doobie.postgres.implicits.*
doobie-mysql doobie.mysql.implicits.*

For other databases that support Java 8 time types, you can continue to use import doobie.implicits.javatimedrivernative.* but there's no check against vendor type names.

3. Make doobie.implicits.javasql instances available by default

doobie.implicits.javasql has now been removed. You can safely remove any import doobie.implicits.javasql.* as these instances are now available without any import.

Related PRs:

Logging for streaming and updateMany queries

Query/Update which now allow queries ran through Query#stream and Update#withGeneratedKeys to be logged. As part of this work, doobie.hi.FC module also have 3 new functions: stream, executeWithResultSet and executeWithoutResultSet. Old functions that does not log (such as doobie.hi.FC.updateWithGeneratedKeys) has been deprecated and will be removed by 1.0.

Related PRs:

Other notable changes

Dependency updates

Internal/doc changes

New Contributors

Full Changelog: typelevel/doobie@v1.0.0-RC5...v1.0.0-RC6

v1.0.0-RC5: 1.0.0-RC5

Compare Source

What's New

Bug fixes and improvements

New Contributors

Full Changelog: typelevel/doobie@v1.0.0-RC4...v1.0.0-RC5

v1.0.0-RC4

Compare Source

v1.0.0-RC3

Compare Source

Java 11 & major dependency updates

  • The minimum Java version is now 11
  • slf4j version is now 2.x (In order to update to latest HikariCP)
  • Depends on cats-effect 3.5 & fs2 3.7

Effectful Logging & Transactor-level logging

In previous versions Doobie supports SQL statement logging via LogHandler. However, it has the slightly awkward interface of final case class LogHandler(unsafeRun: LogEvent => Unit) which makes it difficult to integrate with pure FP logging libraries.

We have reworked how logging works, with the two major difference being:

  • LogHandler now runs in an effect i.e. def run(logEvent: LogEvent): M[Unit]
  • Each Transactor[M] now has a single LogHandler[M] attached to it, in order to align the effect type.

To recover some of the previous functionality of per-query logging logic, you can call .queryWithLabel/.updateWithLabel (instead of .query/.update) to attach a String label to each query.
This label will be set for each LogEvent, which your LogHandler can then use to differentiate the queries being logged. (e.g. use it for metrics)

For more advanced use case where you want to pass more structured contextual information for logging purposes, you can use IOLocal (The docs on logging has an example)

Big thanks to @​oyvindberg for the implementation of effectful LogHandler and @​george-wilson-rea for adding query labels

Basic migration steps
  • Add a LogHandler[M] when constructing your Transactor (or pass a None if you don't want to log events)
  • Replace queryWithLogHandler/updateWithLogHandler with queryWithLabel/updateWithLabel

Tightening Postgres java.time instance typecheck

In #​1735 / #​1736, we tightened Meta instances for PostgreSQL java.time instances to reflect what the postgres-jdbc driver actually allows. For example, typechecking a query that tries to map a java.time.OffsetDateTime to a VARCHAR column in the database will now fail.

Instance for ZonedDateTime has also been removed as it is misleading (PostgreSQL does not support a timestamp type that stores the timezone)

All PostgreSQL users should migrate to using doobie.postgres.JavaTimeInstances which has stricter type-checking to help you catch errors. For example, it enforces that the corresponding column type of an java.time.Instant must be TIMESTAMP WITH TIME ZONE.

Thanks @​guymers!

doobie-hikari: Now automatically creates the Connect ExecutionContext

doobie.hikari.HikariTransac


Configuration

📅 Schedule: Branch creation - "after 4pm on monday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot requested a review from a team as a code owner March 5, 2026 09:17
@renovate renovate bot added the renovate label Mar 5, 2026
@renovate renovate bot requested review from gilescope and removed request for a team March 5, 2026 09:17
@renovate renovate bot added the renovate label Mar 5, 2026
@github-actions
Copy link

github-actions bot commented Mar 5, 2026

➖ Are we earthbuild yet?

No change in "earthly" occurrences

📈 Overall Progress

Branch Total Count
main 5626
This PR 5626
Difference +0

Keep up the great work migrating from Earthly to Earthbuild! 🚀

💡 Tips for finding more occurrences

Run locally to see detailed breakdown:

./.github/scripts/count-earthly.sh

Note that the goal is not to reach 0.
There is anticipated to be at least some occurences of earthly in the source code due to backwards compatibility with config files and language constructs.

@janishorsts janishorsts enabled auto-merge (squash) March 5, 2026 09:19
@janishorsts
Copy link
Collaborator

The failures are fixed in #361

@janishorsts janishorsts closed this Mar 5, 2026
auto-merge was automatically disabled March 5, 2026 09:46

Pull request was closed

@renovate
Copy link
Author

renovate bot commented Mar 5, 2026

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update (1.0.0-RC12). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the ignoreDeps array of your Renovate config.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

@renovate renovate bot deleted the renovate/main-org.tpolecat-doobie-core-1.x branch March 5, 2026 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant