|
22 | 22 | my@input_files; |
23 | 23 | my$output_path =''; |
24 | 24 | my$major_version; |
| 25 | +my$include_path; |
25 | 26 |
|
26 | 27 | # Process command line switches. |
27 | 28 | while (@ARGV) |
|
31 | 32 | { |
32 | 33 | push@input_files,$arg; |
33 | 34 | } |
| 35 | +elsif ($arg =~/^-I/) |
| 36 | +{ |
| 37 | +$include_path =length($arg) > 2 ?substr($arg, 2) :shift@ARGV; |
| 38 | +} |
34 | 39 | elsif ($arg =~/^-o/) |
35 | 40 | { |
36 | 41 | $output_path =length($arg) > 2 ?substr($arg, 2) :shift@ARGV; |
|
50 | 55 | # Sanity check arguments. |
51 | 56 | die"No input files.\n"if !@input_files; |
52 | 57 | die"--set-version must be specified.\n"if !defined$major_version; |
| 58 | +die"-I, the header include path, must be specified.\n"if !$include_path; |
53 | 59 |
|
54 | 60 | # Make sure output_path ends in a slash. |
55 | 61 | if ($output_pathne'' &&substr($output_path, -1)ne'/') |
|
133 | 139 | # While duplicate OIDs would only cause a failure if they appear in |
134 | 140 | # the same catalog, our project policy is that manually assigned OIDs |
135 | 141 | # should be globally unique, to avoid confusion. |
136 | | -# |
137 | | -# Also use the loop to determine the maximum explicitly assigned oid |
138 | | -# found in the data file, we'll use that for default oid assignments. |
139 | 142 | my$found = 0; |
140 | | -my$maxoid = 0; |
141 | 143 | foreachmy$oid (keys%oidcounts) |
142 | 144 | { |
143 | | -if ($oid >$maxoid) |
144 | | -{ |
145 | | -$maxoid =$oid; |
146 | | -} |
147 | 145 | nextunless$oidcounts{$oid} > 1; |
148 | 146 | printSTDERR"Duplicate OIDs detected:\n"if !$found; |
149 | 147 | printSTDERR"$oid\n"; |
150 | 148 | $found++; |
151 | 149 | } |
152 | 150 | die"found$found duplicate OID(s) in catalog data\n"if$found; |
153 | 151 |
|
| 152 | + |
| 153 | +# Oids not specified in the input files are automatically assigned, |
| 154 | +# starting at FirstGenbkiObjectId. |
| 155 | +my$FirstGenbkiObjectId = |
| 156 | + Catalog::FindDefinedSymbol('access/transam.h',$include_path, |
| 157 | +'FirstGenbkiObjectId'); |
| 158 | +my$GenbkiNextOid =$FirstGenbkiObjectId; |
| 159 | + |
| 160 | + |
154 | 161 | # Fetch some special data that we will substitute into the output file. |
155 | 162 | # CAUTION: be wary about what symbols you substitute into the .bki file here! |
156 | 163 | # It's okay to substitute things that are expected to be really constant |
|
418 | 425 | # Assign oid if oid column exists and no explicit assignment in row |
419 | 426 | if ($attnameeq"oid"andnotdefined$bki_values{$attname}) |
420 | 427 | { |
421 | | -$bki_values{$attname} =$maxoid; |
422 | | -$maxoid++; |
| 428 | +$bki_values{$attname} =$GenbkiNextOid; |
| 429 | +$GenbkiNextOid++; |
423 | 430 | } |
424 | 431 |
|
425 | 432 | # Substitute constant values we acquired above. |
@@ -858,6 +865,7 @@ sub usage |
858 | 865 | Usage: genbki.pl [options] header... |
859 | 866 |
|
860 | 867 | Options: |
| 868 | + -I include path |
861 | 869 | -o output path |
862 | 870 | --set-version PostgreSQL version number for initdb cross-check |
863 | 871 |
|
|