Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite1662cb

Browse files
committed
Simplify/clean up code for varlena types
1 parent03b8efa commite1662cb

File tree

6 files changed

+58
-161
lines changed

6 files changed

+58
-161
lines changed

‎contrib/btree_gist/btree_bit.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static bytea *
6767
gbt_bit_xfrm(bytea*leaf)
6868
{
6969
bytea*out=leaf;
70-
ints=VARBITBYTES(leaf)+VARHDRSZ;
70+
ints=INTALIGN(VARBITBYTES(leaf)+VARHDRSZ);
7171

7272
out=palloc(s);
7373
VARATT_SIZEP(out)=s;
@@ -126,8 +126,7 @@ Datum
126126
gbt_bit_consistent(PG_FUNCTION_ARGS)
127127
{
128128
GISTENTRY*entry= (GISTENTRY*)PG_GETARG_POINTER(0);
129-
GBT_VARKEY*ktst= (GBT_VARKEY*)DatumGetPointer(entry->key);
130-
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(PG_DETOAST_DATUM(entry->key));
129+
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(entry->key);
131130
void*qtst= (void*)DatumGetPointer(PG_GETARG_DATUM(1));
132131
void*query= (void*)DatumGetByteaP(PG_GETARG_DATUM(1));
133132
StrategyNumberstrategy= (StrategyNumber)PG_GETARG_UINT16(2);
@@ -144,8 +143,6 @@ gbt_bit_consistent(PG_FUNCTION_ARGS)
144143
pfree(q);
145144
}
146145

147-
if (ktst!=key)
148-
pfree(key);
149146
if (qtst!=query)
150147
pfree(query);
151148
PG_RETURN_BOOL(retval);

‎contrib/btree_gist/btree_bytea.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ Datum
9696
gbt_bytea_consistent(PG_FUNCTION_ARGS)
9797
{
9898
GISTENTRY*entry= (GISTENTRY*)PG_GETARG_POINTER(0);
99-
GBT_VARKEY*ktst= (GBT_VARKEY*)DatumGetPointer(entry->key);
100-
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(PG_DETOAST_DATUM(entry->key));
99+
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(entry->key);
101100
void*qtst= (void*)DatumGetPointer(PG_GETARG_DATUM(1));
102101
void*query= (void*)DatumGetByteaP(PG_GETARG_DATUM(1));
103102
StrategyNumberstrategy= (StrategyNumber)PG_GETARG_UINT16(2);
@@ -106,8 +105,6 @@ gbt_bytea_consistent(PG_FUNCTION_ARGS)
106105

107106
retval=gbt_var_consistent(&r,query,&strategy,GIST_LEAF(entry),&tinfo);
108107

109-
if (ktst!=key)
110-
pfree(key);
111108
if (qtst!=query)
112109
pfree(query);
113110
PG_RETURN_BOOL(retval);

‎contrib/btree_gist/btree_gist.sql.in

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ RETURNS internal
107107
AS 'MODULE_PATHNAME'
108108
LANGUAGE 'C';
109109

110+
CREATE FUNCTION gbt_var_decompress(internal)
111+
RETURNS internal
112+
AS 'MODULE_PATHNAME'
113+
LANGUAGE 'C';
114+
110115
CREATE FUNCTION gbt_oid_penalty(internal,internal,internal)
111116
RETURNS internal
112117
AS 'MODULE_PATHNAME'
@@ -893,7 +898,7 @@ AS
893898
FUNCTION1gbt_text_consistent (internal, text, int2),
894899
FUNCTION2gbt_text_union (bytea, internal),
895900
FUNCTION3gbt_text_compress (internal),
896-
FUNCTION4gbt_decompress (internal),
901+
FUNCTION4gbt_var_decompress (internal),
897902
FUNCTION5gbt_text_penalty (internal, internal, internal),
898903
FUNCTION6gbt_text_picksplit (internal, internal),
899904
FUNCTION7gbt_text_same (internal, internal, internal),
@@ -912,7 +917,7 @@ AS
912917
FUNCTION1gbt_bpchar_consistent (internal, bpchar , int2),
913918
FUNCTION2gbt_text_union (bytea, internal),
914919
FUNCTION3gbt_bpchar_compress (internal),
915-
FUNCTION4gbt_decompress (internal),
920+
FUNCTION4gbt_var_decompress (internal),
916921
FUNCTION5gbt_text_penalty (internal, internal, internal),
917922
FUNCTION6gbt_text_picksplit (internal, internal),
918923
FUNCTION7gbt_text_same (internal, internal, internal),
@@ -969,7 +974,7 @@ AS
969974
FUNCTION1gbt_bytea_consistent (internal, bytea, int2),
970975
FUNCTION2gbt_bytea_union (bytea, internal),
971976
FUNCTION3gbt_bytea_compress (internal),
972-
FUNCTION4gbt_decompress (internal),
977+
FUNCTION4gbt_var_decompress (internal),
973978
FUNCTION5gbt_bytea_penalty (internal, internal, internal),
974979
FUNCTION6gbt_bytea_picksplit (internal, internal),
975980
FUNCTION7gbt_bytea_same (internal, internal, internal),
@@ -1026,7 +1031,7 @@ AS
10261031
FUNCTION1gbt_numeric_consistent (internal, numeric, int2),
10271032
FUNCTION2gbt_numeric_union (bytea, internal),
10281033
FUNCTION3gbt_numeric_compress (internal),
1029-
FUNCTION4gbt_decompress (internal),
1034+
FUNCTION4gbt_var_decompress (internal),
10301035
FUNCTION5gbt_numeric_penalty (internal, internal, internal),
10311036
FUNCTION6gbt_numeric_picksplit (internal, internal),
10321037
FUNCTION7gbt_numeric_same (internal, internal, internal),
@@ -1081,7 +1086,7 @@ AS
10811086
FUNCTION1gbt_bit_consistent (internal, bit, int2),
10821087
FUNCTION2gbt_bit_union (bytea, internal),
10831088
FUNCTION3gbt_bit_compress (internal),
1084-
FUNCTION4gbt_decompress (internal),
1089+
FUNCTION4gbt_var_decompress (internal),
10851090
FUNCTION5gbt_bit_penalty (internal, internal, internal),
10861091
FUNCTION6gbt_bit_picksplit (internal, internal),
10871092
FUNCTION7gbt_bit_same (internal, internal, internal),
@@ -1100,7 +1105,7 @@ AS
11001105
FUNCTION1gbt_bit_consistent (internal, bit, int2),
11011106
FUNCTION2gbt_bit_union (bytea, internal),
11021107
FUNCTION3gbt_bit_compress (internal),
1103-
FUNCTION4gbt_decompress (internal),
1108+
FUNCTION4gbt_var_decompress (internal),
11041109
FUNCTION5gbt_bit_penalty (internal, internal, internal),
11051110
FUNCTION6gbt_bit_picksplit (internal, internal),
11061111
FUNCTION7gbt_bit_same (internal, internal, internal),

‎contrib/btree_gist/btree_numeric.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS)
9797
{
9898

9999
GISTENTRY*entry= (GISTENTRY*)PG_GETARG_POINTER(0);
100-
GBT_VARKEY*ktst= (GBT_VARKEY*)DatumGetPointer(entry->key);
101-
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(PG_DETOAST_DATUM(entry->key));
100+
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(entry->key);
102101
void*qtst= (void*)DatumGetPointer(PG_GETARG_DATUM(1));
103102
void*query= (void*)DatumGetNumeric(PG_GETARG_DATUM(1));
104103
StrategyNumberstrategy= (StrategyNumber)PG_GETARG_UINT16(2);
@@ -107,8 +106,6 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS)
107106

108107
retval=gbt_var_consistent(&r,query,&strategy,GIST_LEAF(entry),&tinfo);
109108

110-
if (ktst!=key)
111-
pfree(key);
112109
if (qtst!=query)
113110
pfree(query);
114111
PG_RETURN_BOOL(retval);

‎contrib/btree_gist/btree_text.c

Lines changed: 9 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -59,64 +59,9 @@ gbt_textlt(const void *a, const void *b)
5959
staticint32
6060
gbt_textcmp(constbytea*a,constbytea*b)
6161
{
62-
returnstrcmp(VARDATA(a),VARDATA(b));
62+
returnDatumGetInt32(DirectFunctionCall2(bttextcmp,PointerGetDatum(a),PointerGetDatum(b)));
6363
}
6464

65-
66-
/*
67-
* Converts data of leaf using strxfrm ( locale support )
68-
*/
69-
70-
staticbytea*
71-
gbt_text_xfrm(bytea*leaf)
72-
{
73-
bytea*out=leaf;
74-
int32ilen=VARSIZE(leaf)-VARHDRSZ;
75-
int32olen;
76-
char*sin;
77-
char*sou;
78-
79-
sin=palloc(ilen+1);
80-
memcpy(sin, (void*)VARDATA(leaf),ilen);
81-
sin[ilen]='\0';
82-
83-
olen=strxfrm(NULL,&sin[0],0)+1;
84-
sou=palloc(olen);
85-
olen=strxfrm(sou,&sin[0],olen);
86-
olen+=VARHDRSZ;
87-
out=palloc(olen+1);
88-
out->vl_len=olen+1;
89-
memcpy((void*)VARDATA(out),sou,olen-VARHDRSZ);
90-
((char*)out)[olen]='\0';
91-
92-
pfree(sou);
93-
pfree(sin);
94-
95-
returnout;
96-
}
97-
98-
99-
staticGBT_VARKEY*
100-
gbt_text_l2n(GBT_VARKEY*leaf)
101-
{
102-
103-
GBT_VARKEY*out=leaf;
104-
GBT_VARKEY_Rr=gbt_var_key_readable(leaf);
105-
bytea*o;
106-
107-
o=gbt_text_xfrm(r.lower);
108-
r.lower=r.upper=o;
109-
out=gbt_var_key_copy(&r, TRUE);
110-
pfree(o);
111-
112-
returnout;
113-
114-
}
115-
116-
117-
118-
119-
12065
staticconstgbtree_vinfotinfo=
12166
{
12267
gbt_t_text,
@@ -128,7 +73,7 @@ static const gbtree_vinfo tinfo =
12873
gbt_textle,
12974
gbt_textlt,
13075
gbt_textcmp,
131-
gbt_text_l2n
76+
NULL
13277
};
13378

13479

@@ -157,14 +102,13 @@ gbt_bpchar_compress(PG_FUNCTION_ARGS)
157102
{
158103

159104
Datumd=DirectFunctionCall1(rtrim1,entry->key);
160-
GISTENTRY*trim=palloc(sizeof(GISTENTRY));
105+
GISTENTRYtrim;
161106

162-
gistentryinit(*trim,d,
107+
gistentryinit(trim,d,
163108
entry->rel,entry->page,
164109
entry->offset,VARSIZE(DatumGetPointer(d)), TRUE);
165-
retval=gbt_var_compress(trim,&tinfo);
110+
retval=gbt_var_compress(&trim,&tinfo);
166111

167-
pfree(trim);
168112
pfree(DatumGetPointer(d));
169113
}
170114
else
@@ -179,27 +123,15 @@ Datum
179123
gbt_text_consistent(PG_FUNCTION_ARGS)
180124
{
181125
GISTENTRY*entry= (GISTENTRY*)PG_GETARG_POINTER(0);
182-
GBT_VARKEY*ktst= (GBT_VARKEY*)DatumGetPointer(entry->key);
183-
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(PG_DETOAST_DATUM(entry->key));
126+
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(entry->key);
184127
void*qtst= (void*)DatumGetPointer(PG_GETARG_DATUM(1));
185128
void*query= (void*)DatumGetTextP(PG_GETARG_DATUM(1));
186129
StrategyNumberstrategy= (StrategyNumber)PG_GETARG_UINT16(2);
187130
boolretval= FALSE;
188131
GBT_VARKEY_Rr=gbt_var_key_readable(key);
189132

190-
if (GIST_LEAF(entry))
191-
retval=gbt_var_consistent(&r,query,&strategy, TRUE,&tinfo);
192-
else
193-
{
194-
bytea*q=gbt_text_xfrm((bytea*)query);
133+
retval=gbt_var_consistent(&r,query,&strategy,GIST_LEAF(entry),&tinfo);
195134

196-
retval=gbt_var_consistent(&r, (void*)q,&strategy, FALSE,&tinfo);
197-
if (q!=query)
198-
pfree(q);
199-
}
200-
201-
if (ktst!=key)
202-
pfree(key);
203135
if (qtst!=query)
204136
pfree(query);
205137

@@ -211,30 +143,18 @@ Datum
211143
gbt_bpchar_consistent(PG_FUNCTION_ARGS)
212144
{
213145
GISTENTRY*entry= (GISTENTRY*)PG_GETARG_POINTER(0);
214-
GBT_VARKEY*ktst= (GBT_VARKEY*)DatumGetPointer(entry->key);
215-
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(PG_DETOAST_DATUM(entry->key));
146+
GBT_VARKEY*key= (GBT_VARKEY*)DatumGetPointer(entry->key);
216147
void*qtst= (void*)DatumGetPointer(PG_GETARG_DATUM(1));
217148
void*query= (void*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1)));
218149
void*trim= (void*)DatumGetPointer(DirectFunctionCall1(rtrim1,PointerGetDatum(query)));
219150
StrategyNumberstrategy= (StrategyNumber)PG_GETARG_UINT16(2);
220151
boolretval= FALSE;
221152
GBT_VARKEY_Rr=gbt_var_key_readable(key);
222153

223-
if (GIST_LEAF(entry))
224-
retval=gbt_var_consistent(&r,trim,&strategy, TRUE,&tinfo);
225-
else
226-
{
227-
bytea*q=gbt_text_xfrm((bytea*)trim);
228-
229-
retval=gbt_var_consistent(&r, (void*)q,&strategy, FALSE,&tinfo);
230-
if (q!=trim)
231-
pfree(q);
232-
}
154+
retval=gbt_var_consistent(&r,trim,&strategy,GIST_LEAF(entry),&tinfo);
233155

234156
pfree(trim);
235157

236-
if (ktst!=key)
237-
pfree(key);
238158
if (qtst!=query)
239159
pfree(query);
240160
PG_RETURN_BOOL(retval);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp