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

Commit8d90b4d

Browse files
committed
Minor cleanup in genbki.pl.
Separate out the pg_attribute logic of genbki.pl into its own function.Drop unnecessary "defined $catalog->{data}" check. This both narrowsand shortens the data writing loop of the script. There is no functionalchange (the emitted files are the same as before).John NaylorDiscussion:https://postgr.es/m/CAJVSVGXnLH=BSo0x-aA818f=MyQqGS5nM-GDCWAMdnvQJTRC1A@mail.gmail.com
1 parenta351679 commit8d90b4d

File tree

1 file changed

+137
-129
lines changed

1 file changed

+137
-129
lines changed

‎src/backend/catalog/genbki.pl

Lines changed: 137 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -156,151 +156,83 @@
156156
print$bki"open$catname\n";
157157
}
158158

159-
if (defined$catalog->{data})
159+
# For pg_attribute.h, we generate data entries ourselves.
160+
# NB: pg_type.h must come before pg_attribute.h in the input list
161+
# of catalog names, since we use info from pg_type.h here.
162+
if ($catnameeq'pg_attribute')
160163
{
164+
gen_pg_attribute($schema,@attnames);
165+
}
161166

162-
# Ordinary catalog with DATA line(s)
163-
foreachmy$row (@{$catalog->{data} })
164-
{
165-
166-
# Split line into tokens without interpreting their meaning.
167-
my%bki_values;
168-
@bki_values{@attnames} =
169-
Catalog::SplitDataLine($row->{bki_values});
170-
171-
# Perform required substitutions on fields
172-
foreachmy$column (@$schema)
173-
{
174-
my$attname =$column->{name};
175-
my$atttype =$column->{type};
176-
177-
# Substitute constant values we acquired above.
178-
# (It's intentional that this can apply to parts of a field).
179-
$bki_values{$attname} =~s/\bPGUID\b/$BOOTSTRAP_SUPERUSERID/g;
180-
$bki_values{$attname} =~s/\bPGNSP\b/$PG_CATALOG_NAMESPACE/g;
181-
182-
# Replace regproc columns' values with OIDs.
183-
# If we don't have a unique value to substitute,
184-
# just do nothing (regprocin will complain).
185-
if ($atttypeeq'regproc')
186-
{
187-
my$procoid =$regprocoids{$bki_values{$attname} };
188-
$bki_values{$attname} =$procoid
189-
ifdefined($procoid) &&$procoidne'MULTIPLE';
190-
}
191-
}
167+
# Ordinary catalog with DATA line(s)
168+
foreachmy$row (@{$catalog->{data} })
169+
{
192170

193-
# Save pg_proc oids for use in later regproc substitutions.
194-
# This relies on the order we process the files in!
195-
if ($catnameeq'pg_proc')
196-
{
197-
if (defined($regprocoids{$bki_values{proname} }))
198-
{
199-
$regprocoids{$bki_values{proname} } ='MULTIPLE';
200-
}
201-
else
202-
{
203-
$regprocoids{$bki_values{proname} } =$row->{oid};
204-
}
205-
}
171+
# Split line into tokens without interpreting their meaning.
172+
my%bki_values;
173+
@bki_values{@attnames} =
174+
Catalog::SplitDataLine($row->{bki_values});
206175

207-
# Save pg_type info for pg_attribute processing below
208-
if ($catnameeq'pg_type')
176+
# Perform required substitutions on fields
177+
foreachmy$column (@$schema)
178+
{
179+
my$attname =$column->{name};
180+
my$atttype =$column->{type};
181+
182+
# Substitute constant values we acquired above.
183+
# (It's intentional that this can apply to parts of a field).
184+
$bki_values{$attname} =~s/\bPGUID\b/$BOOTSTRAP_SUPERUSERID/g;
185+
$bki_values{$attname} =~s/\bPGNSP\b/$PG_CATALOG_NAMESPACE/g;
186+
187+
# Replace regproc columns' values with OIDs.
188+
# If we don't have a unique value to substitute,
189+
# just do nothing (regprocin will complain).
190+
if ($atttypeeq'regproc')
209191
{
210-
my%type =%bki_values;
211-
$type{oid} =$row->{oid};
212-
$types{$type{typname} } = \%type;
192+
my$procoid =$regprocoids{$bki_values{$attname} };
193+
$bki_values{$attname} =$procoid
194+
ifdefined($procoid) &&$procoidne'MULTIPLE';
213195
}
196+
}
214197

215-
# Write to postgres.bki
216-
my$oid =$row->{oid} ?"OID =$row->{oid}" :'';
217-
printf$bki"insert%s(%s )\n",$oid,
218-
join('',@bki_values{@attnames});
219-
220-
# Write comments to postgres.description and
221-
# postgres.shdescription
222-
if (defined$row->{descr})
198+
# Save pg_proc oids for use in later regproc substitutions.
199+
# This relies on the order we process the files in!
200+
if ($catnameeq'pg_proc')
201+
{
202+
if (defined($regprocoids{$bki_values{proname} }))
223203
{
224-
printf$descr"%s\t%s\t0\t%s\n",
225-
$row->{oid},$catname,$row->{descr};
204+
$regprocoids{$bki_values{proname} } ='MULTIPLE';
226205
}
227-
if (defined$row->{shdescr})
206+
else
228207
{
229-
printf$shdescr"%s\t%s\t%s\n",
230-
$row->{oid},$catname,$row->{shdescr};
208+
$regprocoids{$bki_values{proname} } =$row->{oid};
231209
}
232210
}
233-
}
234-
if ($catnameeq'pg_attribute')
235-
{
236211

237-
# For pg_attribute.h, we generate DATA entries ourselves.
238-
# NB: pg_type.h must come before pg_attribute.h in the input list
239-
# of catalog names, since we use info from pg_type.h here.
240-
foreachmy$table_name (@{$catalogs->{names} })
212+
# Save pg_type info for pg_attribute processing below
213+
if ($catnameeq'pg_type')
241214
{
242-
my$table =$catalogs->{$table_name};
243-
244-
# Currently, all bootstrapped relations also need schemapg.h
245-
# entries, so skip if the relation isn't to be in schemapg.h.
246-
nextif !$table->{schema_macro};
247-
248-
$schemapg_entries{$table_name} = [];
249-
push@tables_needing_macros,$table_name;
250-
251-
# Generate entries for user attributes.
252-
my$attnum = 0;
253-
my$priornotnull = 1;
254-
foreachmy$attr (@{$table->{columns} })
255-
{
256-
$attnum++;
257-
my%row;
258-
$row{attnum} =$attnum;
259-
$row{attrelid} =$table->{relation_oid};
260-
261-
morph_row_for_pgattr(\%row,$schema,$attr,$priornotnull);
262-
$priornotnull &= ($row{attnotnull}eq't');
263-
264-
# If it's bootstrapped, put an entry in postgres.bki.
265-
print_bki_insert(\%row,@attnames)if$table->{bootstrap};
215+
my%type =%bki_values;
216+
$type{oid} =$row->{oid};
217+
$types{$type{typname} } = \%type;
218+
}
266219

267-
# Store schemapg entries for later.
268-
morph_row_for_schemapg(\%row,$schema);
269-
push @{$schemapg_entries{$table_name} },
270-
sprintf"{%s }",
271-
join(',',grep {defined$_ }@row{@attnames});
272-
}
220+
# Write to postgres.bki
221+
my$oid =$row->{oid} ?"OID =$row->{oid}" :'';
222+
printf$bki"insert%s(%s )\n",$oid,
223+
join('',@bki_values{@attnames});
273224

274-
# Generate entries for system attributes.
275-
# We only need postgres.bki entries, not schemapg.h entries.
276-
if ($table->{bootstrap})
277-
{
278-
$attnum = 0;
279-
my@SYS_ATTRS = (
280-
{name=>'ctid',type=>'tid' },
281-
{name=>'oid',type=>'oid' },
282-
{name=>'xmin',type=>'xid' },
283-
{name=>'cmin',type=>'cid' },
284-
{name=>'xmax',type=>'xid' },
285-
{name=>'cmax',type=>'cid' },
286-
{name=>'tableoid',type=>'oid' });
287-
foreachmy$attr (@SYS_ATTRS)
288-
{
289-
$attnum--;
290-
my%row;
291-
$row{attnum} =$attnum;
292-
$row{attrelid} =$table->{relation_oid};
293-
$row{attstattarget} ='0';
294-
295-
# Omit the oid column if the catalog doesn't have them
296-
next
297-
if$table->{without_oids}
298-
&&$attr->{name}eq'oid';
299-
300-
morph_row_for_pgattr(\%row,$schema,$attr, 1);
301-
print_bki_insert(\%row,@attnames);
302-
}
303-
}
225+
# Write comments to postgres.description and
226+
# postgres.shdescription
227+
if (defined$row->{descr})
228+
{
229+
printf$descr"%s\t%s\t0\t%s\n",
230+
$row->{oid},$catname,$row->{descr};
231+
}
232+
if (defined$row->{shdescr})
233+
{
234+
printf$shdescr"%s\t%s\t%s\n",
235+
$row->{oid},$catname,$row->{shdescr};
304236
}
305237
}
306238

@@ -375,6 +307,82 @@
375307
#################### Subroutines ########################
376308

377309

310+
# For each catalog marked as needing a schema macro, generate the
311+
# per-user-attribute data to be incorporated into schemapg.h. Also, for
312+
# bootstrap catalogs, emit pg_attribute entries into the .bki file
313+
# for both user and system attributes.
314+
subgen_pg_attribute
315+
{
316+
my$schema =shift;
317+
my@attnames =@_;
318+
319+
foreachmy$table_name (@{$catalogs->{names} })
320+
{
321+
my$table =$catalogs->{$table_name};
322+
323+
# Currently, all bootstrapped relations also need schemapg.h
324+
# entries, so skip if the relation isn't to be in schemapg.h.
325+
nextif !$table->{schema_macro};
326+
327+
$schemapg_entries{$table_name} = [];
328+
push@tables_needing_macros,$table_name;
329+
330+
# Generate entries for user attributes.
331+
my$attnum = 0;
332+
my$priornotnull = 1;
333+
foreachmy$attr (@{$table->{columns} })
334+
{
335+
$attnum++;
336+
my%row;
337+
$row{attnum} =$attnum;
338+
$row{attrelid} =$table->{relation_oid};
339+
340+
morph_row_for_pgattr(\%row,$schema,$attr,$priornotnull);
341+
$priornotnull &= ($row{attnotnull}eq't');
342+
343+
# If it's bootstrapped, put an entry in postgres.bki.
344+
print_bki_insert(\%row,@attnames)if$table->{bootstrap};
345+
346+
# Store schemapg entries for later.
347+
morph_row_for_schemapg(\%row,$schema);
348+
push @{$schemapg_entries{$table_name} },
349+
sprintf"{%s }",
350+
join(',',grep {defined$_ }@row{@attnames});
351+
}
352+
353+
# Generate entries for system attributes.
354+
# We only need postgres.bki entries, not schemapg.h entries.
355+
if ($table->{bootstrap})
356+
{
357+
$attnum = 0;
358+
my@SYS_ATTRS = (
359+
{name=>'ctid',type=>'tid' },
360+
{name=>'oid',type=>'oid' },
361+
{name=>'xmin',type=>'xid' },
362+
{name=>'cmin',type=>'cid' },
363+
{name=>'xmax',type=>'xid' },
364+
{name=>'cmax',type=>'cid' },
365+
{name=>'tableoid',type=>'oid' });
366+
foreachmy$attr (@SYS_ATTRS)
367+
{
368+
$attnum--;
369+
my%row;
370+
$row{attnum} =$attnum;
371+
$row{attrelid} =$table->{relation_oid};
372+
$row{attstattarget} ='0';
373+
374+
# Omit the oid column if the catalog doesn't have them
375+
next
376+
if$table->{without_oids}
377+
&&$attr->{name}eq'oid';
378+
379+
morph_row_for_pgattr(\%row,$schema,$attr, 1);
380+
print_bki_insert(\%row,@attnames);
381+
}
382+
}
383+
}
384+
}
385+
378386
# Given $pgattr_schema (the pg_attribute schema for a catalog sufficient for
379387
# AddDefaultValues), $attr (the description of a catalog row), and
380388
# $priornotnull (whether all prior attributes in this catalog are not null),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp