Fixed error message when dialector fails to initialize #6509
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What did this pull request do?
Dialector initialize error leads to closing DB connection. However if DB connection is not even created, code inside gorm provides
nil
as an error even thoughdb
doesn't exist (is nil), so it tries to close what can't be closed and results to panic.panic: runtime error: invalid memory address or nil pointer dereference
This fix now doesn't attempt to close non-existant database connection and instead continues, so the proper error is shown.
User Case Description
When I provide this example DSN (I am aware that this is wrong, it's a purpose to showcase this problem):
test:test@localhost/test?charset=utf8mb4&parseTime=True&loc=Local
To this piece of code:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
I got:
panic: runtime error: invalid memory address or nil pointer dereference
With this fix I get proper error:
[error] failed to initialize database, got error default addr for network 'localhost' unknown
This error is now in
err
variable in my app, instead of it failing inside gorm.