]> granicus.if.org Git - postgresql/blob - src/backend/utils/generate-errcodes.pl
Refactor planner's header files.
[postgresql] / src / backend / utils / generate-errcodes.pl
1 #!/usr/bin/perl
2 #
3 # Generate the errcodes.h header from errcodes.txt
4 # Copyright (c) 2000-2019, PostgreSQL Global Development Group
5
6 use warnings;
7 use strict;
8
9 print
10   "/* autogenerated from src/backend/utils/errcodes.txt, do not edit */\n";
11 print "/* there is deliberately not an #ifndef ERRCODES_H here */\n";
12
13 open my $errcodes, '<', $ARGV[0] or die;
14
15 while (<$errcodes>)
16 {
17         chomp;
18
19         # Skip comments
20         next if /^#/;
21         next if /^\s*$/;
22
23         # Emit a comment for each section header
24         if (/^Section:(.*)/)
25         {
26                 my $header = $1;
27                 $header =~ s/^\s+//;
28                 print "\n/* $header */\n";
29                 next;
30         }
31
32         die "unable to parse errcodes.txt"
33           unless /^([^\s]{5})\s+[EWS]\s+([^\s]+)/;
34
35         (my $sqlstate, my $errcode_macro) = ($1, $2);
36
37         # Split the sqlstate letters
38         $sqlstate = join ",", split "", $sqlstate;
39
40         # And quote them
41         $sqlstate =~ s/([^,])/'$1'/g;
42
43         print "#define $errcode_macro MAKE_SQLSTATE($sqlstate)\n";
44 }
45
46 close $errcodes;