{"record":{"id":"bb1d129c594ac055","repo":"golang-migrate/migrate","slug":"no-config-bb1d12","errorCode":null,"errorMessage":"no config","messagePattern":"no config","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"database/sqlite/sqlite.go","lineNumber":25,"sourceCode":"\t\"io\"\n\tnurl \"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"github.com/golang-migrate/migrate/v4\"\n\t\"github.com/golang-migrate/migrate/v4/database\"\n\t_ \"modernc.org/sqlite\"\n)\n\nfunc init() {\n\tdatabase.Register(\"sqlite\", &Sqlite{})\n}\n\nvar DefaultMigrationsTable = \"schema_migrations\"\nvar (\n\tErrDatabaseDirty  = fmt.Errorf(\"database is dirty\")\n\tErrNilConfig      = fmt.Errorf(\"no config\")\n\tErrNoDatabaseName = fmt.Errorf(\"no database name\")\n)\n\ntype Config struct {\n\tMigrationsTable string\n\tDatabaseName    string\n\tNoTxWrap        bool\n}\n\ntype Sqlite struct {\n\tdb       *sql.DB\n\tisLocked atomic.Bool\n\n\tconfig *Config\n}\n\nfunc WithInstance(instance *sql.DB, config *Config) (database.Driver, error) {\n\tif config == nil {","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/golang-migrate/migrate/blob/01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a/database/sqlite/sqlite.go#L7-L43","documentation":"ErrNilConfig is a sentinel error returned by the sqlite driver's WithInstance and WithConnection when the *Config argument is nil. The driver needs a Config (database name / migrations table) to build the Driver. It signals a caller programming error rather than a database problem.","triggerScenarios":"Calling sqlite.WithInstance(db, nil) or sqlite.WithConnection(conn, nil) — passing a nil *Config pointer.","commonSituations":"Copy-pasted setup code with the Config literal removed or commented out; conditional config construction hitting a nil branch; DI containers injecting nil when a config file/env was absent.","solutions":["Pass a non-nil *sqlite.Config, e.g. &sqlite.Config{DatabaseName: \"app\", MigrationsTable: sqlite.DefaultMigrationsTable}.","Validate config is non-nil before calling the driver constructor in your wiring code.","Alternatively use migrate.Open with a sqlite:// URL so the driver builds its own config."],"exampleFix":"// before\nd, err := sqlite.WithInstance(db, nil)\n// after\ncfg := &sqlite.Config{\n    DatabaseName:    \"app\",\n    MigrationsTable: sqlite.DefaultMigrationsTable,\n}\nd, err := sqlite.WithInstance(db, cfg)","handlingStrategy":"validation","validationCode":"if cfg == nil {\n    return fmt.Errorf(\"sqlite config must not be nil\")\n}","typeGuard":"func hasConfig(cfg *sqlite.Config) bool { return cfg != nil }","tryCatchPattern":"d, err := sqlite.WithInstance(db, cfg)\nif err != nil {\n    if errors.Is(err, sqlite.ErrNilConfig) {\n        return fmt.Errorf(\"programming error: pass a *sqlite.Config: %w\", err)\n    }\n    return err\n}","preventionTips":["Always construct the Config literal at the call site of WithInstance/WithConnection.","Centralize driver setup in one helper so a nil config can't slip through.","Fail fast in config loading: return an error if the loaded config is nil."],"tags":["sqlite","config","nil-pointer","go"],"backgroundTag":"nil-config","analyzedSha":"01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a","analyzedAt":"2026-09-02T19:38:29.671Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}