mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Per previous convention (see
ace397e9d2
), drop SQL:2008 and only keep
the latest two standards and SQL-92.
Note: SQL:2016-2 lists a large number of non-reserved keywords that
are really just information_schema column names related to new
features. Those kinds of thing have not previously been listed as
keywords, and this was apparently done here by mistake, since these
keywords have been removed again in post-2016 working drafts. So in
order to avoid bloating the keywords table unnecessarily, I have
omitted these erroneous keywords here.
123 lines
2.0 KiB
Perl
123 lines
2.0 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
# Generate the keywords table file
|
|
# Copyright (c) 2019, PostgreSQL Global Development Group
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my @sql_versions = reverse sort ('1992', '2011', '2016');
|
|
|
|
my $srcdir = $ARGV[0];
|
|
|
|
my %keywords;
|
|
|
|
# read SQL keywords
|
|
|
|
foreach my $ver (@sql_versions)
|
|
{
|
|
foreach my $res ('reserved', 'nonreserved')
|
|
{
|
|
foreach my $file (glob "$srcdir/keywords/sql${ver}*-${res}.txt")
|
|
{
|
|
open my $fh, '<', $file or die;
|
|
|
|
while (<$fh>)
|
|
{
|
|
chomp;
|
|
$keywords{$_}{$ver}{$res} = 1;
|
|
}
|
|
|
|
close $fh;
|
|
}
|
|
}
|
|
}
|
|
|
|
# read PostgreSQL keywords
|
|
|
|
open my $fh, '<', "$srcdir/../../../src/include/parser/kwlist.h" or die;
|
|
|
|
while (<$fh>)
|
|
{
|
|
if (/^PG_KEYWORD\("(\w+)", \w+, (\w+)_KEYWORD\)/)
|
|
{
|
|
$keywords{ uc $1 }{'pg'}{ lc $2 } = 1;
|
|
}
|
|
}
|
|
|
|
close $fh;
|
|
|
|
# print output
|
|
|
|
print "<!-- autogenerated, do not edit -->\n";
|
|
|
|
print <<END;
|
|
<table id="keywords-table">
|
|
<title><acronym>SQL</acronym> Key Words</title>
|
|
|
|
<tgroup cols="5">
|
|
<thead>
|
|
<row>
|
|
<entry>Key Word</entry>
|
|
<entry><productname>PostgreSQL</productname></entry>
|
|
END
|
|
|
|
foreach my $ver (@sql_versions)
|
|
{
|
|
my $s = ($ver eq '1992' ? 'SQL-92' : "SQL:$ver");
|
|
print " <entry>$s</entry>\n";
|
|
}
|
|
|
|
print <<END;
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
END
|
|
|
|
foreach my $word (sort keys %keywords)
|
|
{
|
|
print " <row>\n";
|
|
print " <entry><token>$word</token></entry>\n";
|
|
|
|
print " <entry>";
|
|
if ($keywords{$word}{pg}{'unreserved'})
|
|
{
|
|
print "non-reserved";
|
|
}
|
|
elsif ($keywords{$word}{pg}{'col_name'})
|
|
{
|
|
print "non-reserved (cannot be function or type)";
|
|
}
|
|
elsif ($keywords{$word}{pg}{'type_func_name'})
|
|
{
|
|
print "reserved (can be function or type)";
|
|
}
|
|
elsif ($keywords{$word}{pg}{'reserved'})
|
|
{
|
|
print "reserved";
|
|
}
|
|
print "</entry>\n";
|
|
|
|
foreach my $ver (@sql_versions)
|
|
{
|
|
print " <entry>";
|
|
if ($keywords{$word}{$ver}{'reserved'})
|
|
{
|
|
print "reserved";
|
|
}
|
|
elsif ($keywords{$word}{$ver}{'nonreserved'})
|
|
{
|
|
print "non-reserved";
|
|
}
|
|
print "</entry>\n";
|
|
}
|
|
print " </row>\n";
|
|
}
|
|
|
|
print <<END;
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
END
|