Skip to content

Commit 2815e98

Browse files
authored
Merge pull request #2981 from dolthub/nicktobey/json_test
Unwrap wrapper values used in JSON aggregation functions, and un-skip accidentally-skipped tests for this behavior.
2 parents a3bdbd6 + 6aa3d72 commit 2815e98

File tree

4 files changed

+30
-11
lines changed

4 files changed

+30
-11
lines changed

enginetest/enginetests.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5156,12 +5156,14 @@ func TestNullRanges(t *testing.T, harness Harness) {
51565156
func TestJsonScripts(t *testing.T, harness Harness, skippedTests []string) {
51575157
harness.Setup(setup.MydbData, setup.BlobData)
51585158
for _, script := range queries.JsonScripts {
5159-
for _, skippedTest := range skippedTests {
5160-
if strings.Contains(script.Name, skippedTest) {
5161-
t.Skip()
5159+
t.Run(script.Name, func(t *testing.T) {
5160+
for _, skippedTest := range skippedTests {
5161+
if strings.Contains(script.Name, skippedTest) {
5162+
t.Skip()
5163+
}
51625164
}
5163-
}
5164-
TestScript(t, harness, script)
5165+
TestScript(t, harness, script)
5166+
})
51655167
}
51665168
}
51675169

sql/expression/function/aggregation/json_agg.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ func (j *jsonObjectBuffer) Update(ctx *sql.Context, row sql.Row) error {
157157
return err
158158
}
159159

160-
// unwrap JSON values
160+
// unwrap wrapper values
161+
val, err = sql.UnwrapAny(ctx, val)
162+
if err != nil {
163+
return err
164+
}
161165
if js, ok := val.(sql.JSONWrapper); ok {
162166
val, err = js.ToInterface()
163167
if err != nil {
@@ -166,11 +170,12 @@ func (j *jsonObjectBuffer) Update(ctx *sql.Context, row sql.Row) error {
166170
}
167171

168172
// Update the map.
169-
keyAsString, _, err := types.LongText.Convert(ctx, key)
173+
convertedKey, _, err := types.LongText.Convert(ctx, key)
170174
if err != nil {
171175
return nil
172176
}
173-
j.vals[keyAsString.(string)] = val
177+
keyAsString, _, err := sql.Unwrap[string](ctx, convertedKey)
178+
j.vals[keyAsString] = val
174179

175180
return nil
176181
}

sql/expression/function/aggregation/unary_agg_buffers.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,11 @@ func (j *jsonArrayBuffer) Update(ctx *sql.Context, row sql.Row) error {
646646
return err
647647
}
648648

649-
// unwrap JSON values
649+
// unwrap wrapper values
650+
v, err = sql.UnwrapAny(ctx, v)
651+
if err != nil {
652+
return err
653+
}
650654
if js, ok := v.(sql.JSONWrapper); ok {
651655
v, err = js.ToInterface()
652656
if err != nil {

sql/expression/function/aggregation/window_functions.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,11 @@ func (a *WindowedJSONArrayAgg) aggregateVals(ctx *sql.Context, interval sql.Wind
10491049
return nil, err
10501050
}
10511051

1052-
// unwrap JSON values
1052+
// unwrap wrapper values
1053+
v, err = sql.UnwrapAny(ctx, v)
1054+
if err != nil {
1055+
return nil, err
1056+
}
10531057
if js, ok := v.(sql.JSONWrapper); ok {
10541058
v, err = js.ToInterface()
10551059
if err != nil {
@@ -1136,7 +1140,11 @@ func (a *WindowedJSONObjectAgg) aggregateVals(ctx *sql.Context, interval sql.Win
11361140
return nil, err
11371141
}
11381142

1139-
// unwrap JSON values
1143+
// unwrap wrapper values
1144+
val, err = sql.UnwrapAny(ctx, val)
1145+
if err != nil {
1146+
return nil, err
1147+
}
11401148
if js, ok := val.(sql.JSONWrapper); ok {
11411149
val, err = js.ToInterface()
11421150
if err != nil {

0 commit comments

Comments
 (0)