summaryrefslogtreecommitdiff
path: root/doc/src/sgml/generate-errcodes-table.pl
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/generate-errcodes-table.pl')
-rw-r--r--doc/src/sgml/generate-errcodes-table.pl63
1 files changed, 63 insertions, 0 deletions
diff --git a/doc/src/sgml/generate-errcodes-table.pl b/doc/src/sgml/generate-errcodes-table.pl
new file mode 100644
index 00000000000..5d0ccffadd9
--- /dev/null
+++ b/doc/src/sgml/generate-errcodes-table.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+#
+# Generate the errcodes-table.sgml file from errcodes.txt
+# Copyright (c) 2000-2011, PostgreSQL Global Development Group
+
+use warnings;
+use strict;
+
+print "<!-- autogenerated from src/backend/utils/errcodes.txt, do not edit -->\n";
+
+open my $errcodes, $ARGV[0] or die;
+
+while (<$errcodes>) {
+ chomp;
+
+ # Skip comments
+ next if /^#/;
+ next if /^\s*$/;
+
+ # Emit section headers
+ if (/^Section:/) {
+
+ # Remove the Section: string
+ s/^Section: //;
+ # Escape dashes for SGML
+ s/-/&mdash;/;
+ # Wrap PostgreSQL in <productname/>
+ s/PostgreSQL/<productname>PostgreSQL<\/>/g;
+
+ print "\n\n";
+ print "<row>\n";
+ print "<entry spanname=\"span13\">";
+ print "<emphasis role=\"bold\">$_</></entry>\n";
+ print "</row>\n";
+
+ next;
+ }
+
+ die unless /^([^\s]{5})\s+([EWS])\s+([^\s]+)(?:\s+)?([^\s]+)?/;
+
+ (my $sqlstate,
+ my $type,
+ my $errcode_macro,
+ my $condition_name) = ($1, $2, $3, $4);
+
+ # Skip lines without PL/pgSQL condition names
+ next unless defined($condition_name);
+
+ my $meaning = $condition_name;
+ # Remove underscores
+ $meaning =~ s/_/ /g;
+ # And capitalize
+ $meaning =~ tr/[a-z]/[A-Z]/;
+
+ print "\n";
+ print "<row>\n";
+ print "<entry><literal>$sqlstate</literal></entry>\n";
+ print "<entry>$meaning</entry>\n";
+ print "<entry>$condition_name</entry>\n";
+ print "</row>\n";
+}
+
+close $errcodes;