Skip to content

sqlx-sqlite: libsqlite3-sys pin prevents coexistence with rusqlite 0.38 ecosystems #4160

@darioAnongba

Description

@darioAnongba

I have found these related issues/pull requests

sqlx-sqlite currently pins libsqlite3-sys to 0.30.1 (on 0.8.5), which makes Cargo resolution fail in mixed graphs that also include crates using rusqlite 0.38 (libsqlite3-sys 0.36.x), due to the single links = "sqlite3" rule.

Description

sqlx-sqlite currently pins libsqlite3-sys to 0.30.1 (on 0.8.5), which makes Cargo resolution fail in mixed graphs that also include crates using rusqlite 0.38 (libsqlite3-sys 0.36.x), due to the single links = "sqlite3" rule.

Why this matters

sqlite3 is a peer dependency for the user so pinning to a specific version prevents using any other crate that pins to a different version. Real-world apps can combine for example:

  • sea-orm (via sqlx-sqlite)
  • SDKs that use rusqlite (e.g. Breez Liquid SDK)

These cannot currently coexist without a local patch/fork.

Minimal reproduction

Cargo.toml:

[package]
name = "repro"
version = "0.1.0"
edition = "2021"

[dependencies]
sea-orm = { version = "1.1.19", features = ["sqlx-sqlite", "runtime-tokio-rustls"] }
breez-sdk-liquid = { git = "https://github.com/breez/breez-sdk-liquid", tag = "0.11.13" }

Then:

cargo check

Cargo fails with a libsqlite3-sys links conflict (sqlite3).

Expected behavior

The graph should be resolvable when both crates are otherwise compatible.

Prefered solution

Relax/bump sqlx-sqlite's libsqlite3-sys version constraint to include 0.36.x (or wider compatible range), so mixed stacks can resolve without downstream patching.

Is this a breaking change? Why or why not?

No because versions are compatible.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions