{"record":{"id":"1eb035bdc5c6d795","repo":"golang-migrate/migrate","slug":"no-config-1eb035","errorCode":null,"errorMessage":"no config","messagePattern":"no config","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"database/snowflake/snowflake.go","lineNumber":27,"sourceCode":"\tnurl \"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"github.com/golang-migrate/migrate/v4/database\"\n\t\"github.com/lib/pq\"\n\tsf \"github.com/snowflakedb/gosnowflake\"\n)\n\nfunc init() {\n\tdb := Snowflake{}\n\tdatabase.Register(\"snowflake\", &db)\n}\n\nvar DefaultMigrationsTable = \"schema_migrations\"\n\nvar (\n\tErrNilConfig          = fmt.Errorf(\"no config\")\n\tErrNoDatabaseName     = fmt.Errorf(\"no database name\")\n\tErrNoPassword         = fmt.Errorf(\"no password\")\n\tErrNoSchema           = fmt.Errorf(\"no schema\")\n\tErrNoSchemaOrDatabase = fmt.Errorf(\"no schema/database name\")\n)\n\ntype Config struct {\n\tMigrationsTable string\n\tDatabaseName    string\n}\n\ntype Snowflake struct {\n\tisLocked atomic.Bool\n\tconn     *sql.Conn\n\tdb       *sql.DB\n\n\t// Open and WithInstance need to guarantee that config is never nil\n\tconfig *Config","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/golang-migrate/migrate/blob/01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a/database/snowflake/snowflake.go#L9-L45","documentation":"ErrNilConfig (message \"no config\") is returned by the Snowflake driver's WithInstance/WithConnection (declared at snowflake.go:27) when the *snowflake.Config argument is nil. The driver reads fields such as MigrationsTable, DatabaseName and Schema from the config pointer, so a nil config is rejected immediately. This is a caller-side programming error, not a connection failure.","triggerScenarios":"Calling snowflake.WithInstance(db, nil) or snowflake.WithConnection(conn, nil) instead of &snowflake.Config{...}.","commonSituations":"Conditionally-built config structs left nil when Snowflake env vars are missing; typed-nil values flowing through generic driver-construction helpers; copy-pasted driver setup code that skipped Config initialization.","solutions":["Pass a non-nil &snowflake.Config{} (empty is valid; fields like DatabaseName/Schema are populated via Open)","Audit any helper that builds the config so it cannot return nil on the happy path","Remember each driver declares its own ErrNilConfig; match errors.Is against database/snowflake.ErrNilConfig"],"exampleFix":"// before\nvar cfg *snowflake.Config\ndrv, err := snowflake.WithInstance(db, cfg)\n// after\ncfg := &snowflake.Config{MigrationsTable: \"schema_migrations\", DatabaseName: db, SchemaName: schema}\ndrv, err := snowflake.WithInstance(db, cfg)","handlingStrategy":"validation","validationCode":"if cfg == nil {\n    return nil, fmt.Errorf(\"snowflake: config must be provided\")\n}\ndrv, err := snowflake.WithInstance(db, cfg)","typeGuard":"func hasSnowflakeConfig(cfg *snowflake.Config) bool { return cfg != nil }","tryCatchPattern":null,"preventionTips":["Initialize Config inline at the call site (&snowflake.Config{...})","Make config-building helpers return (cfg, error) so nil cannot slip through silently","Guard against typed nils when passing through interfaces (reflect.ValueOf(cfg).IsNil())"],"tags":["go","golang-migrate","snowflake","config","nil-pointer"],"backgroundTag":"missing-config-object","analyzedSha":"01a9643f1475e75bb6d6224ddeaf9d8e2434ca8a","analyzedAt":"2026-09-02T19:38:29.671Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}