Skip to content

Commit 5bf6ad6

Browse files
authored
Merge pull request #2639 from dolthub/zachmu/json-enc
Use dolt JSON encoding. This gives us dolt's performance when finding values in a large JSON document.
2 parents cd0208e + 661e30e commit 5bf6ad6

26 files changed

Lines changed: 2453 additions & 729 deletions

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ require (
66
github.com/PuerkitoBio/goquery v1.8.1
77
github.com/cockroachdb/apd/v3 v3.2.3
88
github.com/cockroachdb/errors v1.7.5
9-
github.com/dolthub/dolt/go v0.40.5-0.20260604223716-5ac466c68ca7
9+
github.com/dolthub/dolt/go v0.40.5-0.20260605000101-c6f847cb5242
1010
github.com/dolthub/eventsapi_schema v0.0.0-20260310172945-37a9265ade69
1111
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
12-
github.com/dolthub/go-mysql-server v0.20.1-0.20260604212032-10e53f0a000e
12+
github.com/dolthub/go-mysql-server v0.20.1-0.20260604232018-6a9dd7b59c86
1313
github.com/dolthub/pg_query_go/v6 v6.0.0-20251215122834-fb20be4254d1
1414
github.com/dolthub/sqllogictest/go v0.0.0-20240618184124-ca47f9354216
1515
github.com/dolthub/vitess v0.0.0-20260604210335-0893abc80542
@@ -142,6 +142,7 @@ require (
142142
github.com/jackc/pgpassfile v1.0.0 // indirect
143143
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
144144
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
145+
github.com/jackc/puddle/v2 v2.2.2 // indirect
145146
github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d // indirect
146147
github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6 // indirect
147148
github.com/klauspost/compress v1.18.0 // indirect

go.sum

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ github.com/dolthub/aws-sdk-go-ini-parser v0.0.0-20250305001723-2821c37f6c12 h1:I
246246
github.com/dolthub/aws-sdk-go-ini-parser v0.0.0-20250305001723-2821c37f6c12/go.mod h1:rN7X8BHwkjPcfMQQ2QTAq/xM3leUSGLfb+1Js7Y6TVo=
247247
github.com/dolthub/dolt-mcp v0.3.4 h1:AyG5cw+fNWXDHXujtQnqUPZrpWtPg6FN6yYtjv1pP44=
248248
github.com/dolthub/dolt-mcp v0.3.4/go.mod h1:bCZ7KHvDYs+M0e+ySgmGiNvLhcwsN7bbf5YCyillLrk=
249-
github.com/dolthub/dolt/go v0.40.5-0.20260604223716-5ac466c68ca7 h1:6j8kXiLYv9Uqty2D1XQl0+KEkh2IuxcY5jmIZiXg3rQ=
250-
github.com/dolthub/dolt/go v0.40.5-0.20260604223716-5ac466c68ca7/go.mod h1:W6qePjnOpTZacpBvU1WyhBLHP4ENC+lb5SELW7CjE40=
249+
github.com/dolthub/dolt/go v0.40.5-0.20260605000101-c6f847cb5242 h1:nx7bb7QFGHvZgCDjTDFQgU3IwdyKs0GI3fT9HqdnB1w=
250+
github.com/dolthub/dolt/go v0.40.5-0.20260605000101-c6f847cb5242/go.mod h1:VQdcfyqjyhjVDZSBagYjimKXfTQNYGtWA0MHx1fIGDU=
251251
github.com/dolthub/eventsapi_schema v0.0.0-20260310172945-37a9265ade69 h1:JShhbqMw26nKx3pqqu/cFxOpzBkN+4elVhzuUfgDw2k=
252252
github.com/dolthub/eventsapi_schema v0.0.0-20260310172945-37a9265ade69/go.mod h1:SSLraQS/jGLYFgff3vuZ+JbVUct6vyEeMzjLBqWqoyM=
253253
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 h1:u3PMzfF8RkKd3lB9pZ2bfn0qEG+1Gms9599cr0REMww=
@@ -256,8 +256,8 @@ github.com/dolthub/fslock v0.0.5 h1:QoXhBhgY1oumHE26qyE7tgmXUT8qjJwxsIzo54O/B/k=
256256
github.com/dolthub/fslock v0.0.5/go.mod h1:sdofYYqE0D79zNZyB4/kmlnsQOVap1C2yByjGKSirEM=
257257
github.com/dolthub/go-icu-regex v0.0.0-20260412212219-49724d547866 h1:U6gSf5I0e6h6GP1/5Sa7D2lWW1CWfcVPtY5wkyHq6jY=
258258
github.com/dolthub/go-icu-regex v0.0.0-20260412212219-49724d547866/go.mod h1:F3cnm+vMRK1HaU6+rNqQrOCyR03HHhR1GWG2gnPOqaE=
259-
github.com/dolthub/go-mysql-server v0.20.1-0.20260604212032-10e53f0a000e h1:BI8QIYHQzWTluF1IL55H60PvK6tF+KUb0HyZpEsY9CY=
260-
github.com/dolthub/go-mysql-server v0.20.1-0.20260604212032-10e53f0a000e/go.mod h1:A3nEC4RgBm9UzuQCGhQhJDQAiFMPsZU3NPKbGhEd8R4=
259+
github.com/dolthub/go-mysql-server v0.20.1-0.20260604232018-6a9dd7b59c86 h1:V5tdwzJZOzaRHq7TpCP12/rHztVl7m3YKGZd8ej4h+E=
260+
github.com/dolthub/go-mysql-server v0.20.1-0.20260604232018-6a9dd7b59c86/go.mod h1:A3nEC4RgBm9UzuQCGhQhJDQAiFMPsZU3NPKbGhEd8R4=
261261
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI=
262262
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q=
263263
github.com/dolthub/ishell v0.0.0-20260414231531-5f031e3e9037 h1:oIW9HwuWrhxv+4HZxA+QQSKHLqWFyXZ2FmNjUYwkdiM=
@@ -520,7 +520,6 @@ github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM
520520
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
521521
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
522522
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
523-
github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0=
524523
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
525524
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
526525
github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=

server/cast/json.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
package cast
1616

1717
import (
18+
"github.com/cockroachdb/errors"
1819
"github.com/dolthub/go-mysql-server/sql"
1920

2021
"github.com/dolthub/doltgresql/core/casts"
2122
"github.com/dolthub/doltgresql/core/id"
22-
2323
"github.com/dolthub/doltgresql/server/functions/framework"
2424
pgtypes "github.com/dolthub/doltgresql/server/types"
2525
)
@@ -35,7 +35,20 @@ func jsonAssignment(builtInCasts map[id.Cast]casts.Cast) {
3535
FromType: pgtypes.Json,
3636
ToType: pgtypes.JsonB,
3737
Function: func(ctx *sql.Context, val any, _, targetType *pgtypes.DoltgresType) (any, error) {
38-
return targetType.IoInput(ctx, val.(string))
38+
switch v := val.(type) {
39+
case sql.StringWrapper:
40+
result, err := v.Unwrap(ctx)
41+
if err != nil {
42+
return nil, err
43+
}
44+
return targetType.IoInput(ctx, result)
45+
case string:
46+
return targetType.IoInput(ctx, v)
47+
case sql.JSONWrapper:
48+
return v, nil
49+
default:
50+
return nil, errors.Errorf("unexpected JSON value type: %T", val)
51+
}
3952
},
4053
})
4154
}

0 commit comments

Comments
 (0)