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

Commitf2c064a

Browse files
committed
Cleanup vectors of GISTENTRY and eliminate problem with 64-bit strict-aligned
boxes. Change interface to user-defined GiST support methods union andpicksplit. Now instead of bytea struct it used special GistEntryVectorstructure.
1 parent8d9a28e commitf2c064a

File tree

24 files changed

+185
-195
lines changed

24 files changed

+185
-195
lines changed

‎contrib/btree_gist/btree_common.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ btree_decompress(PG_FUNCTION_ARGS)
2222
** The GiST PickSplit method
2323
*/
2424
externGIST_SPLITVEC*
25-
btree_picksplit(bytea*entryvec,GIST_SPLITVEC*v,BINARY_UNIONbu,CMPFUNCcmp)
25+
btree_picksplit(GistEntryVector*entryvec,GIST_SPLITVEC*v,BINARY_UNIONbu,CMPFUNCcmp)
2626
{
2727
OffsetNumberi;
2828
RIX*array;
2929
OffsetNumbermaxoff;
3030
intnbytes;
3131

32-
maxoff=((VARSIZE(entryvec)-VARHDRSZ) /sizeof(GISTENTRY))-1;
32+
maxoff=entryvec->n-1;
3333
nbytes= (maxoff+2)*sizeof(OffsetNumber);
3434
v->spl_left= (OffsetNumber*)palloc(nbytes);
3535
v->spl_right= (OffsetNumber*)palloc(nbytes);
@@ -43,7 +43,7 @@ btree_picksplit(bytea *entryvec, GIST_SPLITVEC *v, BINARY_UNION bu, CMPFUNC cmp)
4343
for (i=FirstOffsetNumber;i <=maxoff;i=OffsetNumberNext(i))
4444
{
4545
array[i].index=i;
46-
array[i].r= (char*)DatumGetPointer((((GISTENTRY*) (VARDATA(entryvec)))[i].key));
46+
array[i].r= (char*)DatumGetPointer((entryvec->vector[i].key));
4747
}
4848
qsort((void*)&array[FirstOffsetNumber],maxoff-FirstOffsetNumber+1,
4949
sizeof(RIX),cmp);

‎contrib/btree_gist/btree_gist.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ typedef struct rix
2121
** Common btree-function (for all ops)
2222
*/
2323

24-
externGIST_SPLITVEC*btree_picksplit(bytea*entryvec,GIST_SPLITVEC*v,
24+
externGIST_SPLITVEC*btree_picksplit(GistEntryVector*entryvec,GIST_SPLITVEC*v,
2525
BINARY_UNIONbu,CMPFUNCcmp);

‎contrib/btree_gist/btree_gist.sql.in

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ RETURNS internal
120120
AS 'MODULE_PATHNAME'
121121
LANGUAGE 'C';
122122

123-
CREATE FUNCTION gint2_union(bytea, internal)
123+
CREATE FUNCTION gint2_union(internal, internal)
124124
RETURNS int4
125125
AS 'MODULE_PATHNAME'
126126
LANGUAGE 'C';
@@ -140,7 +140,7 @@ AS
140140
OPERATOR4>= ,
141141
OPERATOR5> ,
142142
FUNCTION1gint2_consistent (internal, int2, int2),
143-
FUNCTION2gint2_union (bytea, internal),
143+
FUNCTION2gint2_union (internal, internal),
144144
FUNCTION3gint2_compress (internal),
145145
FUNCTION4btree_decompress (internal),
146146
FUNCTION5gint2_penalty (internal, internal, internal),
@@ -176,7 +176,7 @@ RETURNS internal
176176
AS 'MODULE_PATHNAME'
177177
LANGUAGE 'C';
178178

179-
CREATE FUNCTION gint4_union(bytea, internal)
179+
CREATE FUNCTION gint4_union(internal, internal)
180180
RETURNS int4
181181
AS 'MODULE_PATHNAME'
182182
LANGUAGE 'C';
@@ -196,7 +196,7 @@ AS
196196
OPERATOR4>= ,
197197
OPERATOR5> ,
198198
FUNCTION1gint4_consistent (internal, int4, int2),
199-
FUNCTION2gint4_union (bytea, internal),
199+
FUNCTION2gint4_union (internal, internal),
200200
FUNCTION3gint4_compress (internal),
201201
FUNCTION4btree_decompress (internal),
202202
FUNCTION5gint4_penalty (internal, internal, internal),
@@ -232,7 +232,7 @@ RETURNS internal
232232
AS 'MODULE_PATHNAME'
233233
LANGUAGE 'C';
234234

235-
CREATE FUNCTION gint8_union(bytea, internal)
235+
CREATE FUNCTION gint8_union(internal, internal)
236236
RETURNS int8key
237237
AS 'MODULE_PATHNAME'
238238
LANGUAGE 'C';
@@ -252,7 +252,7 @@ AS
252252
OPERATOR4>= ,
253253
OPERATOR5> ,
254254
FUNCTION1gint8_consistent (internal, int8, int2),
255-
FUNCTION2gint8_union (bytea, internal),
255+
FUNCTION2gint8_union (internal, internal),
256256
FUNCTION3gint8_compress (internal),
257257
FUNCTION4btree_decompress (internal),
258258
FUNCTION5gint8_penalty (internal, internal, internal),
@@ -289,7 +289,7 @@ RETURNS internal
289289
AS 'MODULE_PATHNAME'
290290
LANGUAGE 'C';
291291

292-
CREATE FUNCTION gfloat4_union(bytea, internal)
292+
CREATE FUNCTION gfloat4_union(internal, internal)
293293
RETURNS int4
294294
AS 'MODULE_PATHNAME'
295295
LANGUAGE 'C';
@@ -309,7 +309,7 @@ AS
309309
OPERATOR4>= ,
310310
OPERATOR5> ,
311311
FUNCTION1gfloat4_consistent (internal, float4, int2),
312-
FUNCTION2gfloat4_union (bytea, internal),
312+
FUNCTION2gfloat4_union (internal, internal),
313313
FUNCTION3gfloat4_compress (internal),
314314
FUNCTION4btree_decompress (internal),
315315
FUNCTION5gfloat4_penalty (internal, internal, internal),
@@ -348,7 +348,7 @@ RETURNS internal
348348
AS 'MODULE_PATHNAME'
349349
LANGUAGE 'C';
350350

351-
CREATE FUNCTION gfloat8_union(bytea, internal)
351+
CREATE FUNCTION gfloat8_union(internal, internal)
352352
RETURNS int4
353353
AS 'MODULE_PATHNAME'
354354
LANGUAGE 'C';
@@ -368,7 +368,7 @@ AS
368368
OPERATOR4>= ,
369369
OPERATOR5> ,
370370
FUNCTION1gfloat8_consistent (internal, float8, int2),
371-
FUNCTION2gfloat8_union (bytea, internal),
371+
FUNCTION2gfloat8_union (internal, internal),
372372
FUNCTION3gfloat8_compress (internal),
373373
FUNCTION4btree_decompress (internal),
374374
FUNCTION5gfloat8_penalty (internal, internal, internal),
@@ -422,7 +422,7 @@ RETURNS internal
422422
AS 'MODULE_PATHNAME'
423423
LANGUAGE 'C';
424424

425-
CREATE FUNCTION gts_union(bytea, internal)
425+
CREATE FUNCTION gts_union(internal, internal)
426426
RETURNS int4
427427
AS 'MODULE_PATHNAME'
428428
LANGUAGE 'C';
@@ -442,7 +442,7 @@ AS
442442
OPERATOR4>= ,
443443
OPERATOR5> ,
444444
FUNCTION1gts_consistent (internal, timestamp, int2),
445-
FUNCTION2gts_union (bytea, internal),
445+
FUNCTION2gts_union (internal, internal),
446446
FUNCTION3gts_compress (internal),
447447
FUNCTION4btree_decompress (internal),
448448
FUNCTION5gts_penalty (internal, internal, internal),

‎contrib/btree_gist/btree_num.c.in

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,22 +138,22 @@ g__BTREE_GIST_TYPE2___consistent(PG_FUNCTION_ARGS)
138138
Datum
139139
g__BTREE_GIST_TYPE2___union(PG_FUNCTION_ARGS)
140140
{
141-
bytea *entryvec = (bytea *) PG_GETARG_POINTER(0);
141+
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
142142
inti,
143143
numranges;
144144
__BTREE_GIST_TYPE__KEY *cur,
145145
*out = palloc(sizeof(__BTREE_GIST_TYPE__KEY));
146146

147-
numranges =(VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY);
147+
numranges = entryvec->n;
148148
*(int *) PG_GETARG_POINTER(1) = sizeof(__BTREE_GIST_TYPE__KEY);
149149

150-
cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[0].key));
150+
cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((entryvec->vector[0].key));
151151
out->lower = cur->lower;
152152
out->upper = cur->upper;
153153

154154
for (i = 1; i < numranges; i++)
155155
{
156-
cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[i].key));
156+
cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((entryvec->vector[i].key));
157157
if (out->lower > cur->lower)
158158
out->lower = cur->lower;
159159
if (out->upper < cur->upper)
@@ -180,7 +180,7 @@ Datum
180180
g__BTREE_GIST_TYPE2___picksplit(PG_FUNCTION_ARGS)
181181
{
182182
PG_RETURN_POINTER(btree_picksplit(
183-
(bytea *) PG_GETARG_POINTER(0),
183+
(GistEntryVector *) PG_GETARG_POINTER(0),
184184
(GIST_SPLITVEC *) PG_GETARG_POINTER(1),
185185
g__BTREE_GIST_TYPE2___binary_union,
186186
__BTREE_GIST_TYPE2__key_cmp

‎contrib/btree_gist/btree_ts.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,22 @@ gts_consistent(PG_FUNCTION_ARGS)
146146
Datum
147147
gts_union(PG_FUNCTION_ARGS)
148148
{
149-
bytea*entryvec= (bytea*)PG_GETARG_POINTER(0);
149+
GistEntryVector*entryvec= (GistEntryVector*)PG_GETARG_POINTER(0);
150150
inti,
151151
numranges;
152152
TSKEY*cur,
153153
*out=palloc(sizeof(TSKEY));
154154

155-
numranges=(VARSIZE(entryvec)-VARHDRSZ) /sizeof(GISTENTRY);
155+
numranges=entryvec->n;
156156
*(int*)PG_GETARG_POINTER(1)=sizeof(TSKEY);
157157

158-
cur= (TSKEY*)DatumGetPointer((((GISTENTRY*) (VARDATA(entryvec)))[0].key));
158+
cur= (TSKEY*)DatumGetPointer((entryvec->vector[0].key));
159159
out->lower=cur->lower;
160160
out->upper=cur->upper;
161161

162162
for (i=1;i<numranges;i++)
163163
{
164-
cur= (TSKEY*)DatumGetPointer((((GISTENTRY*) (VARDATA(entryvec)))[i].key));
164+
cur= (TSKEY*)DatumGetPointer((entryvec->vector[i].key));
165165
if (TSGT(&out->lower,&cur->lower))
166166
out->lower=cur->lower;
167167
if (TSLT(&out->upper,&cur->upper))
@@ -204,7 +204,7 @@ Datum
204204
gts_picksplit(PG_FUNCTION_ARGS)
205205
{
206206
PG_RETURN_POINTER(btree_picksplit(
207-
(bytea*)PG_GETARG_POINTER(0),
207+
(GistEntryVector*)PG_GETARG_POINTER(0),
208208
(GIST_SPLITVEC*)PG_GETARG_POINTER(1),
209209
gts_binary_union,
210210
tskey_cmp

‎contrib/cube/cube.c

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ boolg_cube_consistent(GISTENTRY *entry, NDBOX * query, StrategyNumber strategy
4646
GISTENTRY*g_cube_compress(GISTENTRY*entry);
4747
GISTENTRY*g_cube_decompress(GISTENTRY*entry);
4848
float*g_cube_penalty(GISTENTRY*origentry,GISTENTRY*newentry,float*result);
49-
GIST_SPLITVEC*g_cube_picksplit(bytea*entryvec,GIST_SPLITVEC*v);
49+
GIST_SPLITVEC*g_cube_picksplit(GistEntryVector*entryvec,GIST_SPLITVEC*v);
5050
boolg_cube_leaf_consistent(NDBOX*key,NDBOX*query,StrategyNumberstrategy);
5151
boolg_cube_internal_consistent(NDBOX*key,NDBOX*query,StrategyNumberstrategy);
52-
NDBOX*g_cube_union(bytea*entryvec,int*sizep);
52+
NDBOX*g_cube_union(GistEntryVector*entryvec,int*sizep);
5353
NDBOX*g_cube_binary_union(NDBOX*r1,NDBOX*r2,int*sizep);
5454
bool*g_cube_same(NDBOX*b1,NDBOX*b2,bool*result);
5555

@@ -211,28 +211,26 @@ g_cube_consistent(GISTENTRY *entry,
211211
** returns the minimal bounding box that encloses all the entries in entryvec
212212
*/
213213
NDBOX*
214-
g_cube_union(bytea*entryvec,int*sizep)
214+
g_cube_union(GistEntryVector*entryvec,int*sizep)
215215
{
216-
intnumranges,
217-
i;
216+
inti;
218217
NDBOX*out= (NDBOX*)NULL;
219218
NDBOX*tmp;
220219

221220
/*
222221
* fprintf(stderr, "union\n");
223222
*/
224-
numranges= (VARSIZE(entryvec)-VARHDRSZ) /sizeof(GISTENTRY);
225-
tmp= (NDBOX*)DatumGetPointer((((GISTENTRY*) (VARDATA(entryvec)))[0]).key);
223+
tmp= (NDBOX*)DatumGetPointer(entryvec->vector[0].key);
226224

227225
/*
228226
* sizep = sizeof(NDBOX); -- NDBOX has variable size
229227
*/
230228
*sizep=tmp->size;
231229

232-
for (i=1;i<numranges;i++)
230+
for (i=1;i<entryvec->n;i++)
233231
{
234232
out=g_cube_binary_union(tmp, (NDBOX*)
235-
DatumGetPointer((((GISTENTRY*) (VARDATA(entryvec)))[i]).key),
233+
DatumGetPointer(entryvec->vector[i].key),
236234
sizep);
237235
if (i>1)
238236
pfree(tmp);
@@ -289,7 +287,7 @@ g_cube_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result)
289287
** We use Guttman's poly time split algorithm
290288
*/
291289
GIST_SPLITVEC*
292-
g_cube_picksplit(bytea*entryvec,
290+
g_cube_picksplit(GistEntryVector*entryvec,
293291
GIST_SPLITVEC*v)
294292
{
295293
OffsetNumberi,
@@ -321,7 +319,7 @@ g_cube_picksplit(bytea *entryvec,
321319
/*
322320
* fprintf(stderr, "picksplit\n");
323321
*/
324-
maxoff=((VARSIZE(entryvec)-VARHDRSZ) /sizeof(GISTENTRY))-2;
322+
maxoff=entryvec->n-2;
325323
nbytes= (maxoff+2)*sizeof(OffsetNumber);
326324
v->spl_left= (OffsetNumber*)palloc(nbytes);
327325
v->spl_right= (OffsetNumber*)palloc(nbytes);
@@ -331,10 +329,10 @@ g_cube_picksplit(bytea *entryvec,
331329

332330
for (i=FirstOffsetNumber;i<maxoff;i=OffsetNumberNext(i))
333331
{
334-
datum_alpha= (NDBOX*)DatumGetPointer(((GISTENTRY*) (VARDATA(entryvec)))[i].key);
332+
datum_alpha= (NDBOX*)DatumGetPointer(entryvec->vector[i].key);
335333
for (j=OffsetNumberNext(i);j <=maxoff;j=OffsetNumberNext(j))
336334
{
337-
datum_beta= (NDBOX*)DatumGetPointer(((GISTENTRY*) (VARDATA(entryvec)))[j].key);
335+
datum_beta= (NDBOX*)DatumGetPointer(entryvec->vector[j].key);
338336

339337
/* compute the wasted space by unioning these guys */
340338
/* size_waste = size_union - size_inter; */
@@ -369,10 +367,10 @@ g_cube_picksplit(bytea *entryvec,
369367
right=v->spl_right;
370368
v->spl_nright=0;
371369

372-
datum_alpha= (NDBOX*)DatumGetPointer(((GISTENTRY*) (VARDATA(entryvec)))[seed_1].key);
370+
datum_alpha= (NDBOX*)DatumGetPointer(entryvec->vector[seed_1].key);
373371
datum_l=cube_union(datum_alpha,datum_alpha);
374372
rt_cube_size(datum_l,&size_l);
375-
datum_beta= (NDBOX*)DatumGetPointer(((GISTENTRY*) (VARDATA(entryvec)))[seed_2].key);
373+
datum_beta= (NDBOX*)DatumGetPointer(entryvec->vector[seed_2].key);
376374
datum_r=cube_union(datum_beta,datum_beta);
377375
rt_cube_size(datum_r,&size_r);
378376

@@ -411,7 +409,7 @@ g_cube_picksplit(bytea *entryvec,
411409
}
412410

413411
/* okay, which page needs least enlargement? */
414-
datum_alpha= (NDBOX*)DatumGetPointer(((GISTENTRY*) (VARDATA(entryvec)))[i].key);
412+
datum_alpha= (NDBOX*)DatumGetPointer(entryvec->vector[i].key);
415413
union_dl=cube_union(datum_l,datum_alpha);
416414
union_dr=cube_union(datum_r,datum_alpha);
417415
rt_cube_size(union_dl,&size_alpha);

‎contrib/cube/cube.sql.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ RETURNS internal
324324
AS 'MODULE_PATHNAME'
325325
LANGUAGE 'C';
326326

327-
CREATE OR REPLACE FUNCTION g_cube_union(bytea, internal)
327+
CREATE OR REPLACE FUNCTION g_cube_union(internal, internal)
328328
RETURNS cube
329329
AS 'MODULE_PATHNAME'
330330
LANGUAGE 'C';
@@ -357,7 +357,7 @@ CREATE OPERATOR CLASS gist_cube_ops
357357
OPERATOR7@ ,
358358
OPERATOR8~ ,
359359
FUNCTION1g_cube_consistent (internal, cube, int4),
360-
FUNCTION2g_cube_union (bytea, internal),
360+
FUNCTION2g_cube_union (internal, internal),
361361
FUNCTION3g_cube_compress (internal),
362362
FUNCTION4g_cube_decompress (internal),
363363
FUNCTION5g_cube_penalty (internal, internal, internal),

‎contrib/intarray/_int.sql.in

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ RETURNS internal
327327
AS 'MODULE_PATHNAME'
328328
LANGUAGE 'C';
329329

330-
CREATE FUNCTION g_int_union(bytea, internal)
330+
CREATE FUNCTION g_int_union(internal, internal)
331331
RETURNS _int4
332332
AS 'MODULE_PATHNAME'
333333
LANGUAGE 'C';
@@ -348,7 +348,7 @@ DEFAULT FOR TYPE _int4 USING gist AS
348348
OPERATOR8~,
349349
OPERATOR20@@ (_int4, query_int),
350350
FUNCTION1g_int_consistent (internal, _int4, int4),
351-
FUNCTION2g_int_union (bytea, internal),
351+
FUNCTION2g_int_union (internal, internal),
352352
FUNCTION3g_int_compress (internal),
353353
FUNCTION4g_int_decompress (internal),
354354
FUNCTION5g_int_penalty (internal, internal, internal),
@@ -402,7 +402,7 @@ RETURNS internal
402402
AS 'MODULE_PATHNAME'
403403
LANGUAGE 'C';
404404

405-
CREATE FUNCTION g_intbig_union(bytea, internal)
405+
CREATE FUNCTION g_intbig_union(internal, internal)
406406
RETURNS _int4
407407
AS 'MODULE_PATHNAME'
408408
LANGUAGE 'C';
@@ -423,7 +423,7 @@ AS
423423
OPERATOR8~RECHECK,
424424
OPERATOR20@@ (_int4, query_int)RECHECK,
425425
FUNCTION1g_intbig_consistent (internal, internal, int4),
426-
FUNCTION2g_intbig_union (bytea, internal),
426+
FUNCTION2g_intbig_union (internal, internal),
427427
FUNCTION3g_intbig_compress (internal),
428428
FUNCTION4g_intbig_decompress (internal),
429429
FUNCTION5g_intbig_penalty (internal, internal, internal),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp