Skip to content

sqlite cannot handle encoded URI's #1256

Open
@enchant97

Description

@enchant97

Describe the Bug
When using a percent encoded URI the sqlite driver will fail to connect to database, saying that it cannot be found.

Steps to Reproduce
Using the sqlite driver with percent encoded value for URI.

migrate.NewWithSourceInstance("iofs", d, "/Magic%20Data/db.sqlite")

Expected Behavior
The database connection to successfully connect.

Migrate Version
v4.18.2

Loaded Source Drivers
iofs

Loaded Database Drivers
sqlite

Go Version
go version go1.23.4 darwin/arm64

Additional context
I have managed to instead use NewWithInstance instead and connect to the database via sql.Open manually.

package migrations

import (
        "database/sql"
        "embed"
        "errors"

        "github.com/golang-migrate/migrate/v4"
        "github.com/golang-migrate/migrate/v4/database/sqlite"
        "github.com/golang-migrate/migrate/v4/source/iofs"
)

//go:embed *.sql
var migrationsFS embed.FS

func MigrateDB(db *sql.DB) error {
        d, err := iofs.New(migrationsFS, ".")
        if err != nil {
                return err
        }
        driver, err := sqlite.WithInstance(db, &sqlite.Config{})
        if err != nil {
                return err
        }
        m, err := migrate.NewWithInstance("iofs", d, "", driver)
        if err != nil {
                return err
        }
        if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
                return err
        }
        return nil
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions