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

Commit3b42bdb

Browse files
Use new overflow-safe integer comparison functions.
Commit6b80394 introduced integer comparison functions designedto be as efficient as possible while avoiding overflow. Thiscommit makes use of these functions in many of the in-tree qsort()comparators to help ensure transitivity. Many of these comparatorfunctions should also see a small performance boost.Author: Mats KindahlReviewed-by: Andres Freund, Fabrízio de Royes MelloDiscussion:https://postgr.es/m/CA%2B14426g2Wa9QuUpmakwPxXFWG_1FaY0AsApkvcTBy-YfS6uaw%40mail.gmail.com
1 parent6b80394 commit3b42bdb

File tree

34 files changed

+80
-159
lines changed

34 files changed

+80
-159
lines changed

‎contrib/hstore/hstore_gist.c‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include"access/reloptions.h"
88
#include"access/stratnum.h"
99
#include"catalog/pg_type.h"
10+
#include"common/int.h"
1011
#include"hstore.h"
1112
#include"utils/pg_crc.h"
1213

@@ -356,7 +357,8 @@ typedef struct
356357
staticint
357358
comparecost(constvoid*a,constvoid*b)
358359
{
359-
return ((constSPLITCOST*)a)->cost- ((constSPLITCOST*)b)->cost;
360+
returnpg_cmp_s32(((constSPLITCOST*)a)->cost,
361+
((constSPLITCOST*)b)->cost);
360362
}
361363

362364

‎contrib/intarray/_int_tool.c‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include"_int.h"
99
#include"catalog/pg_type.h"
10+
#include"common/int.h"
1011
#include"lib/qunique.h"
1112

1213
/* arguments are assumed sorted & unique-ified */
@@ -396,15 +397,11 @@ int_to_intset(int32 elem)
396397
int
397398
compASC(constvoid*a,constvoid*b)
398399
{
399-
if (*(constint32*)a==*(constint32*)b)
400-
return0;
401-
return (*(constint32*)a>*(constint32*)b) ?1 :-1;
400+
returnpg_cmp_s32(*(constint32*)a,*(constint32*)b);
402401
}
403402

404403
int
405404
compDESC(constvoid*a,constvoid*b)
406405
{
407-
if (*(constint32*)a==*(constint32*)b)
408-
return0;
409-
return (*(constint32*)a<*(constint32*)b) ?1 :-1;
406+
returnpg_cmp_s32(*(constint32*)b,*(constint32*)a);
410407
}

‎contrib/intarray/_intbig_gist.c‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include"access/gist.h"
1010
#include"access/reloptions.h"
1111
#include"access/stratnum.h"
12+
#include"common/int.h"
1213
#include"port/pg_bitutils.h"
1314

1415
#defineGETENTRY(vec,pos) ((GISTTYPE *) DatumGetPointer((vec)->vector[(pos)].key))
@@ -312,7 +313,8 @@ typedef struct
312313
staticint
313314
comparecost(constvoid*a,constvoid*b)
314315
{
315-
return ((constSPLITCOST*)a)->cost- ((constSPLITCOST*)b)->cost;
316+
returnpg_cmp_s32(((constSPLITCOST*)a)->cost,
317+
((constSPLITCOST*)b)->cost);
316318
}
317319

318320

‎contrib/pg_stat_statements/pg_stat_statements.c‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include"access/parallel.h"
5151
#include"catalog/pg_authid.h"
5252
#include"common/hashfn.h"
53+
#include"common/int.h"
5354
#include"executor/instrument.h"
5455
#include"funcapi.h"
5556
#include"jit/jit.h"
@@ -3007,10 +3008,5 @@ comp_location(const void *a, const void *b)
30073008
intl= ((constLocationLen*)a)->location;
30083009
intr= ((constLocationLen*)b)->location;
30093010

3010-
if (l<r)
3011-
return-1;
3012-
elseif (l>r)
3013-
return+1;
3014-
else
3015-
return0;
3011+
returnpg_cmp_s32(l,r);
30163012
}

‎contrib/pg_trgm/trgm_op.c‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include<ctype.h>
77

88
#include"catalog/pg_type.h"
9+
#include"common/int.h"
910
#include"lib/qunique.h"
1011
#include"miscadmin.h"
1112
#include"trgm.h"
@@ -433,12 +434,7 @@ comp_ptrgm(const void *v1, const void *v2)
433434
if (cmp!=0)
434435
returncmp;
435436

436-
if (p1->index<p2->index)
437-
return-1;
438-
elseif (p1->index==p2->index)
439-
return0;
440-
else
441-
return1;
437+
returnpg_cmp_s32(p1->index,p2->index);
442438
}
443439

444440
/*

‎src/backend/access/nbtree/nbtinsert.c‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include"access/nbtxlog.h"
2020
#include"access/transam.h"
2121
#include"access/xloginsert.h"
22+
#include"common/int.h"
2223
#include"common/pg_prng.h"
2324
#include"lib/qunique.h"
2425
#include"miscadmin.h"
@@ -3013,10 +3014,5 @@ _bt_blk_cmp(const void *arg1, const void *arg2)
30133014
BlockNumberb1=*((BlockNumber*)arg1);
30143015
BlockNumberb2=*((BlockNumber*)arg2);
30153016

3016-
if (b1<b2)
3017-
return-1;
3018-
elseif (b1>b2)
3019-
return1;
3020-
3021-
return0;
3017+
returnpg_cmp_u32(b1,b2);
30223018
}

‎src/backend/access/nbtree/nbtpage.c‎

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include"access/transam.h"
2929
#include"access/xlog.h"
3030
#include"access/xloginsert.h"
31+
#include"common/int.h"
3132
#include"miscadmin.h"
3233
#include"storage/indexfsm.h"
3334
#include"storage/lmgr.h"
@@ -1466,14 +1467,9 @@ _bt_delitems_cmp(const void *a, const void *b)
14661467
TM_IndexDelete*indexdelete1= (TM_IndexDelete*)a;
14671468
TM_IndexDelete*indexdelete2= (TM_IndexDelete*)b;
14681469

1469-
if (indexdelete1->id>indexdelete2->id)
1470-
return1;
1471-
if (indexdelete1->id<indexdelete2->id)
1472-
return-1;
1470+
Assert(indexdelete1->id!=indexdelete2->id);
14731471

1474-
Assert(false);
1475-
1476-
return0;
1472+
returnpg_cmp_s16(indexdelete1->id,indexdelete2->id);
14771473
}
14781474

14791475
/*

‎src/backend/access/nbtree/nbtsplitloc.c‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include"postgres.h"
1616

1717
#include"access/nbtree.h"
18+
#include"common/int.h"
1819
#include"storage/lmgr.h"
1920

2021
typedefenum
@@ -596,12 +597,7 @@ _bt_splitcmp(const void *arg1, const void *arg2)
596597
SplitPoint*split1= (SplitPoint*)arg1;
597598
SplitPoint*split2= (SplitPoint*)arg2;
598599

599-
if (split1->curdelta>split2->curdelta)
600-
return1;
601-
if (split1->curdelta<split2->curdelta)
602-
return-1;
603-
604-
return0;
600+
returnpg_cmp_s16(split1->curdelta,split2->curdelta);
605601
}
606602

607603
/*

‎src/backend/access/spgist/spgdoinsert.c‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include"access/spgist_private.h"
2020
#include"access/spgxlog.h"
2121
#include"access/xloginsert.h"
22+
#include"common/int.h"
2223
#include"common/pg_prng.h"
2324
#include"miscadmin.h"
2425
#include"storage/bufmgr.h"
@@ -110,9 +111,7 @@ addNode(SpGistState *state, SpGistInnerTuple tuple, Datum label, int offset)
110111
staticint
111112
cmpOffsetNumbers(constvoid*a,constvoid*b)
112113
{
113-
if (*(constOffsetNumber*)a==*(constOffsetNumber*)b)
114-
return0;
115-
return (*(constOffsetNumber*)a>*(constOffsetNumber*)b) ?1 :-1;
114+
returnpg_cmp_u16(*(constOffsetNumber*)a,*(constOffsetNumber*)b);
116115
}
117116

118117
/*

‎src/backend/access/spgist/spgtextproc.c‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include"postgres.h"
4141

4242
#include"access/spgist.h"
43+
#include"common/int.h"
4344
#include"catalog/pg_type.h"
4445
#include"mb/pg_wchar.h"
4546
#include"utils/builtins.h"
@@ -325,7 +326,7 @@ cmpNodePtr(const void *a, const void *b)
325326
constspgNodePtr*aa= (constspgNodePtr*)a;
326327
constspgNodePtr*bb= (constspgNodePtr*)b;
327328

328-
returnaa->c-bb->c;
329+
returnpg_cmp_s16(aa->c,bb->c);
329330
}
330331

331332
Datum

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp