Skip to content

Commit 7f260b6

Browse files
committed
valueside: fix missing support for CITEXT
We forgot to add support for CITEXT in MarshalLegacy value encoding. (This encoding type is used when multiple column families are present, and the CITEXT is included not in the zeroth column family.) No stable release with this bug, so we omit the release note. Release none: None
1 parent c40d1e9 commit 7f260b6

File tree

2 files changed

+87
-2
lines changed

2 files changed

+87
-2
lines changed

pkg/sql/logictest/testdata/logic_test/citext

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,84 @@ SELECT c FROM r WHERE c = ARRAY['tEsT', 'tEsTeR']::CITEXT[];
7979
----
8080
{test,TESTER}
8181

82+
subtest column_families
83+
84+
statement ok
85+
DROP TABLE IF EXISTS t;
86+
87+
statement ok
88+
CREATE TABLE t (
89+
k INT PRIMARY KEY,
90+
c CITEXT,
91+
FAMILY (k),
92+
FAMILY (c)
93+
)
94+
95+
onlyif config schema-locked-disabled
96+
query TT colnames
97+
SHOW CREATE TABLE t
98+
----
99+
table_name create_statement
100+
t CREATE TABLE public.t (
101+
k INT8 NOT NULL,
102+
c CITEXT NULL,
103+
CONSTRAINT t_pkey PRIMARY KEY (k ASC),
104+
FAMILY fam_0_k (k),
105+
FAMILY fam_1_c (c)
106+
);
107+
108+
statement ok
109+
INSERT INTO t VALUES (1, 'test')
110+
111+
query T
112+
SELECT pg_typeof(c) FROM t LIMIT 1;
113+
----
114+
citext
115+
116+
query T
117+
SELECT c FROM t WHERE c = 'tEsT';
118+
----
119+
test
120+
121+
statement ok
122+
DROP TABLE IF EXISTS r;
123+
124+
statement ok
125+
CREATE TABLE r (
126+
k INT PRIMARY KEY,
127+
c CITEXT[],
128+
FAMILY (k),
129+
FAMILY (c)
130+
)
131+
132+
onlyif config schema-locked-disabled
133+
query TT colnames
134+
SHOW CREATE TABLE r
135+
----
136+
table_name create_statement
137+
r CREATE TABLE public.r (
138+
k INT8 NOT NULL,
139+
c CITEXT[] NULL,
140+
CONSTRAINT r_pkey PRIMARY KEY (k ASC),
141+
FAMILY fam_0_k (k),
142+
FAMILY fam_1_c (c)
143+
);
144+
145+
statement ok
146+
INSERT INTO r VALUES (1, ARRAY['test', 'TESTER'])
147+
148+
query T
149+
SELECT pg_typeof(c) FROM r LIMIT 1;
150+
----
151+
citext[]
152+
153+
query T
154+
SELECT c FROM r WHERE c = ARRAY['tEsT', 'tEsTeR']::CITEXT[];
155+
----
156+
{test,TESTER}
157+
158+
subtest end
159+
82160
query error multiple COLLATE declarations
83161
CREATE TABLE s (c CITEXT COLLATE "en_US");
84162

@@ -191,10 +269,10 @@ statement ok
191269
CREATE TYPE IF NOT EXISTS ctype AS (id INT, c CITEXT);
192270

193271
statement ok
194-
CREATE TABLE composite_citext_tbl (a ctype);
272+
CREATE TABLE composite_citext_tbl (k INT PRIMARY KEY, a ctype);
195273

196274
statement ok
197-
INSERT INTO composite_citext_tbl VALUES (ROW(1, 'TeSt')), (ROW(2, 'TESTER')), (ROW(3, 'tEsT'));
275+
INSERT INTO composite_citext_tbl VALUES (1, ROW(1, 'TeSt')), (2, ROW(2, 'TESTER')), (3, ROW(3, 'tEsT'));
198276

199277
query T
200278
SELECT (a).c FROM composite_citext_tbl WHERE (a).c = 'test' ORDER BY (a).id;

pkg/sql/rowenc/valueside/legacy.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/cockroachdb/cockroach/pkg/geo"
1010
"github.com/cockroachdb/cockroach/pkg/roachpb"
1111
"github.com/cockroachdb/cockroach/pkg/sql/lex"
12+
"github.com/cockroachdb/cockroach/pkg/sql/oidext"
1213
"github.com/cockroachdb/cockroach/pkg/sql/pgrepl/lsn"
1314
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
1415
"github.com/cockroachdb/cockroach/pkg/sql/types"
@@ -195,6 +196,9 @@ func MarshalLegacy(colType *types.T, val tree.Datum) (roachpb.Value, error) {
195196
return r, nil
196197
}
197198
case types.CollatedStringFamily:
199+
if colType.Oid() == oidext.T_citext {
200+
val = tree.UnwrapDOidWrapper(val)
201+
}
198202
if v, ok := val.(*tree.DCollatedString); ok {
199203
if lex.LocaleNamesAreEqual(v.Locale, colType.Locale()) {
200204
r.SetString(v.Contents)
@@ -354,6 +358,9 @@ func UnmarshalLegacy(a *tree.DatumAlloc, typ *types.T, value roachpb.Value) (tre
354358
if err != nil {
355359
return nil, err
356360
}
361+
if typ.Oid() == oidext.T_citext {
362+
return a.NewDCIText(string(v))
363+
}
357364
return a.NewDCollatedString(string(v), typ.Locale())
358365
case types.UuidFamily:
359366
v, err := value.GetBytes()

0 commit comments

Comments
 (0)