diff options
Diffstat (limited to 'src/include/catalog/unused_oids')
-rwxr-xr-x | src/include/catalog/unused_oids | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids new file mode 100755 index 0000000..5b7ce5f --- /dev/null +++ b/src/include/catalog/unused_oids @@ -0,0 +1,78 @@ +#!/usr/bin/perl +#---------------------------------------------------------------------- +# +# unused_oids +# Finds blocks of manually-assignable OIDs that have not already been +# claimed by previous hackers. The main use is for finding available +# OIDs for new internal functions. The numbers printed are inclusive +# ranges of unused OIDs. +# +# Before using a large empty block, make sure you aren't about +# to take over what was intended as expansion space for something +# else. +# +# Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/include/catalog/unused_oids +# +#---------------------------------------------------------------------- + +use strict; +use warnings; + +# Must run in src/include/catalog +use FindBin; +chdir $FindBin::RealBin or die "could not cd to $FindBin::RealBin: $!\n"; + +use lib "$FindBin::RealBin/../../backend/catalog/"; +use Catalog; + +my @input_files = glob("pg_*.h"); + +my $oids = Catalog::FindAllOidsFromHeaders(@input_files); + +# Also push FirstGenbkiObjectId to serve as a terminator for the last gap. +my $FirstGenbkiObjectId = + Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstGenbkiObjectId'); +push @{$oids}, $FirstGenbkiObjectId; + +my $prev_oid = 0; +my @sortedoids = sort { $a <=> $b } @{$oids}; +foreach my $oid (@sortedoids) +{ + if ($oid > $prev_oid + 1) + { + if ($oid > $prev_oid + 2) + { + printf "%d - %d\n", $prev_oid + 1, $oid - 1; + } + else + { + printf "%d\n", $prev_oid + 1; + } + } + $prev_oid = $oid; +} + +my $suggestion; +do +{ + $suggestion = int(8000 + rand(2000)); +} while (grep(/^$suggestion$/, @{$oids})); + +my $navailable = 0; +foreach my $oid (@sortedoids) +{ + if ($oid > $suggestion) + { + $navailable = $oid - $suggestion; + last; + } +} + +printf "Patches should use a more-or-less consecutive range of OIDs.\n"; +printf + "Best practice is to start with a random choice in the range 8000-9999.\n"; +printf + "Suggested random unused OID: $suggestion ($navailable consecutive OID(s) available starting here)\n"; |