fix(insert): keep field in VALUES when any slice element has a non-default value - #1412
Open
JoeJoeflyn wants to merge 1 commit into
Open
fix(insert): keep field in VALUES when any slice element has a non-default value#1412JoeJoeflyn wants to merge 1 commit into
JoeJoeflyn wants to merge 1 commit into
Conversation
…fault value When inserting a slice of structs, getFields() inspected only the first element to decide whether a NotNull field with nullzero/default should be moved to the RETURNING clause instead of the VALUES clause. If a later element carried a real value for such a field, that value was silently dropped from the INSERT and replaced by the column DEFAULT. A field is now moved to RETURNING only when it marshals to DEFAULT/NULL in every element of the slice. If any element has a real value, the field stays in the INSERT column list so the value reaches the database. Fixes uptrace#1394
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1394
getFields()inspected only the first slice element to decide whether aNotNull+nullzero/default:field should move toRETURNINGinstead ofVALUES. If a later element had a real value, it was silently dropped and replaced by the column DEFAULT.Now the field moves to
RETURNINGonly when every element marshals to DEFAULT/NULL. Single-struct path unchanged.Tested on PostgreSQL (pg + pgx) and SQLite with
-race. New regression testTestIssue1394_DroppedFieldValueOnSliceInsertincluded.