Skip to content

Commit 69bc4c6

Browse files
craig[bot]Shivs11otanXiang-Guyuzefovich
committed
101260: sql: replicating JSON empty array ordering found in Postgres r=mgartner a=Shivs11 Currently, cockroachdb#97928 and cockroachdb#99275 are responsible for laying out a lexicographical ordering for JSON columns to be forward indexable in nature. This ordering is based on the rules posted by Postgres and is in cockroachdb#99849. However, Postgres currently sorts the empty JSON array before any other JSON values. A Postgres bug report for this has been opened: https://www.postgresql.org/message-id/17873-826fdc8bbcace4f1%40postgresql.org This PR intends on replicating the Postgres behavior. Fixes cockroachdb#105668 Epic: CRDB-24501 Release note: None 108160: roachtest/awsdms: run once a week instead r=Jeremyyang920 a=otan Save a bit of mad dosh by running awsdms once a weekly instead of daily. We don't need this tested every week. Epic: None Release note: None 108300: schemachanger: Unskip some backup tests r=Xiang-Gu a=Xiang-Gu Randomly skip subtests in the BACKUP/RESTORE suites before parallelizing them. Epic: None Release note: None 108328: rowexec: fix TestUncertaintyErrorIsReturned under race r=yuzefovich a=yuzefovich We just saw a case when `TestUncertaintyErrorIsReturned` failed under race because we got a different DistSQL plan. This seems plausible in case the range cache population (which the test does explicitly) isn't quick enough for some reason, so this commit allows for the DistSQL plan to match the expectation via `SucceedsSoon` (if we happen to get a bad plan, then the following query execution should have the up-to-date range cache). Fixes: cockroachdb#108250. Release note: None 108341: importer: fix stale comment on mysqlStrToDatum r=mgartner,DrewKimball a=otan Release note: None Epic: None From cockroachdb#108286 (review) 108370: go.mod: bump Pebble to fffe02a195e3 r=RahulAggarwal1016 a=RahulAggarwal1016 fffe02a1 db: simplify ScanInternal() df7e2ae1 vfs: deflake TestDiskHealthChecking_Filesystem ff5c929a Rate Limit Scan Statistics af8c5f27 internal/cache: mark panic messages as redaction-safe Epic: none Release note: none 108379: changefeedccl: deflake TestChangefeedSchemaChangeBackfillCheckpoint r=miretskiy a=jayshrivastava Previously, the test `TestChangefeedSchemaChangeBackfillCheckpoint` would fail because it would read a table span too early. A schema change using the delcarative schema changer will update a table span to point to a new set of ranges. Previously, this test would use the span from before the schema change, which is incorrect. This change makes it use the span from after the schema change. I stress tested this 30k times under the new schema changer and 10k times under the legacy schema changer to ensure the test is not flaky anymore. Fixes: cockroachdb#108084 Release note: None Epic: None Co-authored-by: Shivam Saraf <[email protected]> Co-authored-by: Oliver Tan <[email protected]> Co-authored-by: Xiang Gu <[email protected]> Co-authored-by: Yahor Yuzefovich <[email protected]> Co-authored-by: Rahul Aggarwal <[email protected]> Co-authored-by: Jayant Shrivastava <[email protected]>
8 parents 0d110cd + 056c300 + b5e2041 + f397c13 + daab511 + eed5695 + eda4a6a + c44ffa8 commit 69bc4c6

36 files changed

+248
-122
lines changed

DEPS.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,10 +1595,10 @@ def go_deps():
15951595
patches = [
15961596
"@com_github_cockroachdb_cockroach//build/patches:com_github_cockroachdb_pebble.patch",
15971597
],
1598-
sha256 = "f0319e618ed024b7d708e2c1f8cf0d4b9b7e4112943288ba6036e893a7f8c151",
1599-
strip_prefix = "github.com/cockroachdb/[email protected]20230807145728-40d3f411e45b",
1598+
sha256 = "0866be1de9e4ba30d2b03d1300ca796e88260e620671ab6099850dd576e074a8",
1599+
strip_prefix = "github.com/cockroachdb/[email protected]20230808154433-fffe02a195e3",
16001600
urls = [
1601-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20230807145728-40d3f411e45b.zip",
1601+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20230808154433-fffe02a195e3.zip",
16021602
],
16031603
)
16041604
go_repository(

build/bazelutil/distdir_files.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ DISTDIR_FILES = {
320320
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/go-test-teamcity/com_github_cockroachdb_go_test_teamcity-v0.0.0-20191211140407-cff980ad0a55.zip": "bac30148e525b79d004da84d16453ddd2d5cd20528e9187f1d7dac708335674b",
321321
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/gostdlib/com_github_cockroachdb_gostdlib-v1.19.0.zip": "c4d516bcfe8c07b6fc09b8a9a07a95065b36c2855627cb3514e40c98f872b69e",
322322
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/logtags/com_github_cockroachdb_logtags-v0.0.0-20230118201751-21c54148d20b.zip": "ca7776f47e5fecb4c495490a679036bfc29d95bd7625290cfdb9abb0baf97476",
323-
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20230807145728-40d3f411e45b.zip": "f0319e618ed024b7d708e2c1f8cf0d4b9b7e4112943288ba6036e893a7f8c151",
323+
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/pebble/com_github_cockroachdb_pebble-v0.0.0-20230808154433-fffe02a195e3.zip": "0866be1de9e4ba30d2b03d1300ca796e88260e620671ab6099850dd576e074a8",
324324
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/redact/com_github_cockroachdb_redact-v1.1.5.zip": "11b30528eb0dafc8bc1a5ba39d81277c257cbe6946a7564402f588357c164560",
325325
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/returncheck/com_github_cockroachdb_returncheck-v0.0.0-20200612231554-92cdbca611dd.zip": "ce92ba4352deec995b1f2eecf16eba7f5d51f5aa245a1c362dfe24c83d31f82b",
326326
"https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/sentry-go/com_github_cockroachdb_sentry_go-v0.6.1-cockroachdb.2.zip": "fbb2207d02aecfdd411b1357efe1192dbb827959e36b7cab7491731ac55935c9",

docs/tech-notes/jsonb_forward_indexing.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,18 @@ The following rules were kept in mind while designing this form of encoding, as
4444
5. Objects with an equal number of key value pairs are compared in the order:
4545
`key1`, `value1`, `key2`, `value2`, ….
4646

47+
**NOTE:** There is one exception to these rules, which is neither documented by
48+
Postgres, nor mentioned in the source code: empty arrays are the minimum JSON
49+
value. As far as we can tell, this is a Postgres bug that has existed for some
50+
time. We've decided to replicate this behavior to remain consistent with
51+
Postgres. We've filed a [Postgres bug report](https://www.postgresql.org/message-id/17873-826fdc8bbcace4f1%40postgresql.org)
52+
to track the issue.
53+
4754
In order to satisfy property 1 at all times, tags are defined in an increasing order of bytes.
4855
These tags will also have to be defined in a way where the tag representing an object is a large byte representation
4956
for a hexadecimal value (such as 0xff) and the subsequent objects have a value 1 less than the previous one,
50-
where the ordering is described in point 1 above.
57+
where the ordering is described in point 1 above. There is a special tag for empty JSON arrays
58+
in order to handle the special case of empty arrays being ordered before all other JSON values.
5159

5260
Additionally, tags representing terminators will also be defined. There will be two terminators, one for the ascending designation and the other for the descending one, and will be required to denote the end of a key encoding of the following JSON values: Objects, Arrays, Number and Strings. JSON Boolean and JSON Null are not required to have the terminator since they do not have variable length encoding due to the presence of a single tag (as explained later in this document).
5361

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ require (
116116
github.com/cockroachdb/go-test-teamcity v0.0.0-20191211140407-cff980ad0a55
117117
github.com/cockroachdb/gostdlib v1.19.0
118118
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b
119-
github.com/cockroachdb/pebble v0.0.0-20230807145728-40d3f411e45b
119+
github.com/cockroachdb/pebble v0.0.0-20230808154433-fffe02a195e3
120120
github.com/cockroachdb/redact v1.1.5
121121
github.com/cockroachdb/returncheck v0.0.0-20200612231554-92cdbca611dd
122122
github.com/cockroachdb/stress v0.0.0-20220803192808-1806698b1b7b

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ github.com/cockroachdb/gostdlib v1.19.0/go.mod h1:+dqqpARXbE/gRDEhCak6dm0l14AaTy
493493
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
494494
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
495495
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
496-
github.com/cockroachdb/pebble v0.0.0-20230807145728-40d3f411e45b h1:ymYyDZy5WYRTBqPVYgy0XUW+gHx2HeRkyt1FJmNJVOo=
497-
github.com/cockroachdb/pebble v0.0.0-20230807145728-40d3f411e45b/go.mod h1:FN5O47SBEz5+kO9fG8UTR64g2WS1u5ZFCgTvxGjoSks=
496+
github.com/cockroachdb/pebble v0.0.0-20230808154433-fffe02a195e3 h1:LUfRb+Ibf/OrSFHSyjls7neeWBAIsK4d/SWkv7z1nLw=
497+
github.com/cockroachdb/pebble v0.0.0-20230808154433-fffe02a195e3/go.mod h1:FN5O47SBEz5+kO9fG8UTR64g2WS1u5ZFCgTvxGjoSks=
498498
github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
499499
github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
500500
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=

pkg/ccl/changefeedccl/changefeed_test.go

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1949,15 +1949,17 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
19491949
changefeedbase.FrontierCheckpointMaxBytes.Override(
19501950
context.Background(), &s.Server.ClusterSettings().SV, maxCheckpointSize)
19511951

1952-
// Note the tableSpan to avoid resolved events that leave no gaps
1953-
fooDesc := desctestutils.TestingGetPublicTableDescriptor(
1954-
s.SystemServer.DB(), s.Codec, "d", "foo")
1955-
tableSpan := fooDesc.PrimaryIndexSpan(s.Codec)
1952+
var tableSpan roachpb.Span
1953+
refreshTableSpan := func() {
1954+
fooDesc := desctestutils.TestingGetPublicTableDescriptor(
1955+
s.SystemServer.DB(), s.Codec, "d", "foo")
1956+
tableSpan = fooDesc.PrimaryIndexSpan(s.Codec)
1957+
}
19561958

19571959
// FilterSpanWithMutation should ensure that once the backfill begins, the following resolved events
19581960
// that are for that backfill (are of the timestamp right after the backfill timestamp) resolve some
19591961
// but not all of the time, which results in a checkpoint eventually being created
1960-
haveGaps := false
1962+
numGaps := 0
19611963
var backfillTimestamp hlc.Timestamp
19621964
var initialCheckpoint roachpb.SpanGroup
19631965
var foundCheckpoint int32
@@ -1971,6 +1973,11 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
19711973
// timestamp such that all backfill spans have a timestamp of
19721974
// timestamp.Next().
19731975
if r.BoundaryType == expectedBoundaryType {
1976+
// NB: We wait until the schema change is public before looking
1977+
// up the table span. When using the declarative schema changer,
1978+
// the table span will be different before and after the schema
1979+
// change due to a primary index swap.
1980+
refreshTableSpan()
19741981
backfillTimestamp = r.Timestamp
19751982
return false, nil
19761983
}
@@ -1993,11 +2000,18 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
19932000
return !(backfillTimestamp.IsEmpty() || r.Timestamp.LessEq(backfillTimestamp.Next())), nil
19942001
}
19952002

1996-
// Only allow resolving if we definitely won't have a completely resolved table
1997-
if !r.Span.Equal(tableSpan) && haveGaps {
2003+
// At the end of a backfill, kv feed will emit a resolved span for the whole table.
2004+
// Filter this out because we would like to leave gaps.
2005+
if r.Span.Equal(tableSpan) {
2006+
return true, nil
2007+
}
2008+
2009+
// Ensure that we have at least 2 gaps, so when a second checkpoint happens later in this test,
2010+
// the second checkpoint can still leave at least one gap.
2011+
if numGaps >= 2 {
19982012
return rnd.Intn(10) > 7, nil
19992013
}
2000-
haveGaps = true
2014+
numGaps += 1
20012015
return true, nil
20022016
}
20032017

@@ -2026,7 +2040,7 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
20262040
// as well as the newly resolved ones
20272041
var secondCheckpoint roachpb.SpanGroup
20282042
foundCheckpoint = 0
2029-
haveGaps = false
2043+
numGaps = 0
20302044
knobs.FilterSpanWithMutation = func(r *jobspb.ResolvedSpan) (bool, error) {
20312045
// Stop resolving anything after second checkpoint set to avoid backfill completion
20322046
if secondCheckpoint.Len() > 0 {
@@ -2054,11 +2068,17 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
20542068

20552069
require.Falsef(t, initialCheckpoint.Encloses(r.Span), "second backfill should not resolve checkpointed span")
20562070

2057-
// Only allow resolving if we definitely won't have a completely resolved table
2058-
if !r.Span.Equal(tableSpan) && haveGaps {
2071+
// At the end of a backfill, kv feed will emit a resolved span for the whole table.
2072+
// Filter this out because we would like to leave at least one gap.
2073+
if r.Span.Equal(tableSpan) {
2074+
return true, nil
2075+
}
2076+
2077+
// Ensure there is at least one gap so that we can receive resolved spans later.
2078+
if numGaps >= 1 {
20592079
return rnd.Intn(10) > 7, nil
20602080
}
2061-
haveGaps = true
2081+
numGaps += 1
20622082
return true, nil
20632083
}
20642084

@@ -2097,15 +2117,10 @@ func TestChangefeedSchemaChangeBackfillCheckpoint(t *testing.T) {
20972117
// Pause job to avoid race on the resolved array
20982118
require.NoError(t, jobFeed.Pause())
20992119

2100-
// NB: With the declarative schema changer, there is a primary index swap,
2101-
// so the primary index span will change.
2102-
freshFooDesc := desctestutils.TestingGetPublicTableDescriptor(
2103-
s.SystemServer.DB(), s.Codec, "d", "foo")
2104-
tableSpanAfter := freshFooDesc.PrimaryIndexSpan(s.Codec)
2105-
21062120
// Verify that none of the resolved spans after resume were checkpointed.
2121+
t.Logf("Table Span: %s, Second Checkpoint: %v, Resolved Spans: %v", tableSpan, secondCheckpoint, resolved)
21072122
for _, sp := range resolved {
2108-
require.Falsef(t, !sp.Equal(tableSpanAfter) && secondCheckpoint.Contains(sp.Key), "span should not have been resolved: %s", sp)
2123+
require.Falsef(t, !sp.Equal(tableSpan) && secondCheckpoint.Contains(sp.Key), "span should not have been resolved: %s", sp)
21092124
}
21102125
}
21112126

pkg/cmd/roachtest/tests/awsdms.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ func registerAWSDMS(r registry.Registry) {
192192
Owner: registry.OwnerMigrations,
193193
Cluster: r.MakeClusterSpec(1),
194194
Leases: registry.MetamorphicLeases,
195-
Tags: registry.Tags(`default`, `awsdms`, `aws`),
195+
Tags: registry.Tags(`weekly`, `aws-weekly`),
196196
Run: runAWSDMS,
197197
})
198198
}

pkg/sql/importer/read_import_mysql.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,10 @@ const (
209209
func mysqlStrToDatum(evalCtx *eval.Context, s string, desired *types.T) (tree.Datum, error) {
210210
switch desired.Family() {
211211
case types.BytesFamily:
212-
// mysql emits raw byte strings that do not use the same escaping as our ParseBytes
213-
// function expects, and the difference between ParseStringAs and
214-
// ParseDatumStringAs is whether or not it attempts to parse bytes.
212+
// mysql emits raw byte strings that do not use the same escaping as our
213+
// tree.ParseDBytes function expects, and the difference between
214+
// tree.ParseAndRequireString and mysqlStrToDatum is whether or not it
215+
// attempts to parse bytes.
215216
return tree.NewDBytes(tree.DBytes(s)), nil
216217
default:
217218
res, _, err := tree.ParseAndRequireString(desired, s, evalCtx)

pkg/sql/logictest/testdata/logic_test/json_index

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ INSERT INTO t VALUES
2020
query T
2121
SELECT x FROM t ORDER BY x
2222
----
23+
[]
2324
"a"
2425
"aa"
2526
"abcdefghi"
2627
"b"
2728
1
2829
100
29-
[]
3030
{"a": "b"}
3131

3232

@@ -38,13 +38,13 @@ INSERT INTO t VALUES
3838
query T
3939
SELECT x FROM t@t_pkey ORDER BY x
4040
----
41+
[]
4142
"a"
4243
"aa"
4344
"abcdefghi"
4445
"b"
4546
1
4647
100
47-
[]
4848
{"a": "b"}
4949

5050
# Use the index for point lookups.
@@ -77,12 +77,12 @@ query T
7777
SELECT x FROM t@t_pkey WHERE x > '1' ORDER BY x
7878
----
7979
100
80-
[]
8180
{"a": "b"}
8281

8382
query T
8483
SELECT x FROM t@t_pkey WHERE x < '1' ORDER BY x
8584
----
85+
[]
8686
"a"
8787
"aa"
8888
"abcdefghi"
@@ -92,12 +92,12 @@ SELECT x FROM t@t_pkey WHERE x < '1' ORDER BY x
9292
query T
9393
SELECT x FROM t@t_pkey WHERE x > '1' OR x < '1' ORDER BY x
9494
----
95+
[]
9596
"a"
9697
"aa"
9798
"abcdefghi"
9899
"b"
99100
100
100-
[]
101101
{"a": "b"}
102102

103103
query T
@@ -109,12 +109,12 @@ query T
109109
SELECT x FROM t@t_pkey WHERE x > '1' OR x < '1' ORDER BY x DESC
110110
----
111111
{"a": "b"}
112-
[]
113112
100
114113
"b"
115114
"abcdefghi"
116115
"aa"
117116
"a"
117+
[]
118118

119119
# Adding more primitive JSON values.
120120
statement ok
@@ -129,6 +129,7 @@ INSERT INTO t VALUES
129129
query T
130130
SELECT x FROM t@t_pkey ORDER BY x
131131
----
132+
[]
132133
null
133134
"Testing Punctuation?!."
134135
"a"
@@ -141,18 +142,17 @@ null
141142
100
142143
false
143144
true
144-
[]
145145
{"a": "b"}
146146

147147
query T
148148
SELECT x FROM t@t_pkey WHERE x > 'true' ORDER BY x
149149
----
150-
[]
151150
{"a": "b"}
152151

153152
query T
154153
SELECT x FROM t@t_pkey WHERE x < 'false' ORDER BY x
155154
----
155+
[]
156156
null
157157
"Testing Punctuation?!."
158158
"a"
@@ -330,12 +330,12 @@ query T
330330
SELECT x FROM t@t_pkey ORDER BY x
331331
----
332332
NULL
333+
[]
333334
null
334335
"crdb"
335336
1
336337
false
337338
true
338-
[]
339339
[1, 2, 3]
340340
{}
341341
{"a": "b", "c": "d"}
@@ -346,24 +346,24 @@ SELECT x FROM t@t_pkey ORDER BY x DESC
346346
{"a": "b", "c": "d"}
347347
{}
348348
[1, 2, 3]
349-
[]
350349
true
351350
false
352351
1
353352
"crdb"
354353
null
354+
[]
355355
NULL
356356

357357
# Test to show JSON Null is different from NULL.
358358
query T
359359
SELECT x FROM t@t_pkey WHERE x IS NOT NULL ORDER BY x
360360
----
361+
[]
361362
null
362363
"crdb"
363364
1
364365
false
365366
true
366-
[]
367367
[1, 2, 3]
368368
{}
369369
{"a": "b", "c": "d"}
@@ -446,12 +446,12 @@ INSERT INTO t VALUES
446446
query T
447447
SELECT x FROM t@i ORDER BY x;
448448
----
449+
[]
449450
null
450451
"crdb"
451452
1
452453
false
453454
true
454-
[]
455455
[null]
456456
[1]
457457
[{"a": "b"}]

pkg/sql/opt/exec/execbuilder/testdata/json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ vectorized: true
205205
• scan
206206
missing stats
207207
table: t@t_pkey
208-
spans: [/'null' - /'null'] [/'""' - /'""'] [/'[]' - /'[]'] [/'{}' - /'{}']
208+
spans: [/'[]' - /'[]'] [/'null' - /'null'] [/'""' - /'""'] [/'{}' - /'{}']
209209

210210
# Multicolumn index, including JSONB
211211

@@ -252,20 +252,20 @@ INSERT INTO composite VALUES (1, '1.00'::JSONB), (2, '1'::JSONB), (3, '2'::JSONB
252252
(4, '3.0'::JSONB), (5, '"a"'::JSONB)
253253
----
254254
CPut /Table/108/1/1/0 -> /TUPLE/
255-
InitPut /Table/108/2/"G*\x02\x00\x00\x89\x88" -> /BYTES/0x2f0f0c200000002000000403348964
255+
InitPut /Table/108/2/"H*\x02\x00\x00\x89\x88" -> /BYTES/0x2f0f0c200000002000000403348964
256256
CPut /Table/108/1/2/0 -> /TUPLE/
257-
InitPut /Table/108/2/"G*\x02\x00\x00\x8a\x88" -> /BYTES/
257+
InitPut /Table/108/2/"H*\x02\x00\x00\x8a\x88" -> /BYTES/
258258
CPut /Table/108/1/3/0 -> /TUPLE/
259-
InitPut /Table/108/2/"G*\x04\x00\x00\x8b\x88" -> /BYTES/
259+
InitPut /Table/108/2/"H*\x04\x00\x00\x8b\x88" -> /BYTES/
260260
CPut /Table/108/1/4/0 -> /TUPLE/
261-
InitPut /Table/108/2/"G*\x06\x00\x00\x8c\x88" -> /BYTES/0x2f0f0c20000000200000040334891e
261+
InitPut /Table/108/2/"H*\x06\x00\x00\x8c\x88" -> /BYTES/0x2f0f0c20000000200000040334891e
262262
CPut /Table/108/1/5/0 -> /TUPLE/
263-
InitPut /Table/108/2/"F\x12a\x00\x01\x00\x8d\x88" -> /BYTES/
263+
InitPut /Table/108/2/"G\x12a\x00\x01\x00\x8d\x88" -> /BYTES/
264264

265265
query T kvtrace
266266
SELECT j FROM composite where j = '1.00'::JSONB
267267
----
268-
Scan /Table/108/2/"G*\x02\x00\x0{0"-1"}
268+
Scan /Table/108/2/"H*\x02\x00\x0{0"-1"}
269269

270270
query T
271271
SELECT j FROM composite ORDER BY j;

0 commit comments

Comments
 (0)