return non-fatal NoFieldInTypeError when selecting too many columns (with tests) #188
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.
We are using gorp in production with a medium-sized team (10 developers + 3 contractors). Our deploys go like this:
The issue is that, in between the first and second step, we potentially have more database columns than fields in a struct. If someone wrote a query with
select *
, that query will now error, and the API will go down.This isn't a problem if no one ever does
select *
, but we are a startup and work long hours, sometimes pushing code when we're tired. Not all lines of code will be reviewed, not everything will be thought out all the time, and slip-ups are all but guaranteed. And as we rapidly add more people to the team, this behavior becomes very dangerous for the stability of our production system.I understand that some people might want the current behavior, and the error should definitely not be silently swallowed. In the case of too many columns, the code in this pull request will return a specific type of error,
NoFieldInTypeError
, but otherwise proceed normally. The caller can check if the error is aNoFieldInTypeError
, or just usegorp.NonFatalError(err)
to see if the program can continue.