File Coverage

blib/lib/SQL/ReservedWords/PostgreSQL.pm
Criterion Covered Total %
statement 34 34 100.0
branch 8 8 100.0
condition 8 8 100.0
subroutine 12 12 100.0
pod 5 5 100.0
total 67 67 100.0


line stmt bran cond sub pod time code
1             package SQL::ReservedWords::PostgreSQL;
2              
3 2     2   3278 use strict;
  2         5  
  2         85  
4 2     2   14 use warnings;
  2         3  
  2         128  
5 2     2   13 use vars '$VERSION';
  2         4  
  2         223  
6              
7             $VERSION = '0.8';
8              
9 2     2   13 use constant POSTGRESQL73 => 0x01;
  2         4  
  2         138  
10 2     2   20 use constant POSTGRESQL74 => 0x02;
  2         4  
  2         111  
11 2     2   11 use constant POSTGRESQL80 => 0x04;
  2         4  
  2         99  
12 2     2   10 use constant POSTGRESQL81 => 0x08;
  2         5  
  2         6750  
13              
14             {
15             require Sub::Exporter;
16              
17             my @exports = qw[
18             is_reserved
19             is_reserved_by_postgresql7
20             is_reserved_by_postgresql8
21             reserved_by
22             words
23             ];
24              
25             Sub::Exporter->import( -setup => { exports => \@exports } );
26             }
27              
28             {
29             my %WORDS = (
30             ALL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
31             ANALYSE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
32             ANALYZE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
33             AND => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
34             ANY => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
35             ARRAY => POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
36             AS => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
37             ASC => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
38             ASYMMETRIC => POSTGRESQL81,
39             AUTHORIZATION => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
40             BETWEEN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
41             BINARY => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
42             BOTH => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
43             CASE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
44             CAST => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
45             CHECK => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
46             COLLATE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
47             COLUMN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
48             CONSTRAINT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
49             CREATE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
50             CROSS => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
51             CURRENT_DATE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
52             CURRENT_ROLE => POSTGRESQL81,
53             CURRENT_TIME => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
54             CURRENT_TIMESTAMP => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
55             CURRENT_USER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
56             DEFAULT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
57             DEFERRABLE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
58             DESC => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
59             DISTINCT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
60             DO => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
61             ELSE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
62             END => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
63             EXCEPT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
64             FALSE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
65             FOR => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
66             FOREIGN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
67             FREEZE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
68             FROM => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
69             FULL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
70             GRANT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
71             GROUP => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
72             HAVING => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
73             ILIKE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
74             IN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
75             INITIALLY => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
76             INNER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
77             INTERSECT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
78             INTO => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
79             IS => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
80             ISNULL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
81             JOIN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
82             LEADING => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
83             LEFT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
84             LIKE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
85             LIMIT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
86             LOCALTIME => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
87             LOCALTIMESTAMP => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
88             NATURAL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
89             NEW => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
90             NOT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
91             NOTNULL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
92             NULL => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
93             OFF => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
94             OFFSET => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
95             OLD => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
96             ON => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
97             ONLY => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
98             OR => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
99             ORDER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
100             OUTER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
101             OVERLAPS => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
102             PLACING => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
103             PRIMARY => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
104             REFERENCES => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
105             RIGHT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
106             SELECT => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
107             SESSION_USER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
108             SIMILAR => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
109             SOME => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
110             SYMMETRIC => POSTGRESQL81,
111             TABLE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
112             THEN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
113             TO => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
114             TRAILING => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
115             TRUE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
116             UNION => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
117             UNIQUE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
118             USER => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
119             USING => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
120             VERBOSE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
121             WHEN => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
122             WHERE => POSTGRESQL73 | POSTGRESQL74 | POSTGRESQL80 | POSTGRESQL81,
123             );
124              
125             sub is_reserved {
126 20   100 20 1 721 return $WORDS{ uc(pop || '') } || 0;
127             }
128              
129             sub is_reserved_by_postgresql7 {
130 5     5 1 14 my $flags = &is_reserved;
131 5   100     43 return $flags & POSTGRESQL73 || $flags & POSTGRESQL74;
132             }
133              
134             sub is_reserved_by_postgresql8 {
135 5     5 1 11 my $flags = &is_reserved;
136 5   100     46 return $flags & POSTGRESQL80 || $flags & POSTGRESQL81;
137             }
138              
139             sub reserved_by {
140 4     4 1 16 my $flags = &is_reserved;
141 4         8 my @reserved_by = ();
142              
143 4 100       13 push @reserved_by, 'PostgreSQL 7.3' if $flags & POSTGRESQL73;
144 4 100       14 push @reserved_by, 'PostgreSQL 7.4' if $flags & POSTGRESQL74;
145 4 100       14 push @reserved_by, 'PostgreSQL 8.0' if $flags & POSTGRESQL80;
146 4 100       10 push @reserved_by, 'PostgreSQL 8.1' if $flags & POSTGRESQL81;
147              
148 4         26 return @reserved_by;
149             }
150              
151             sub words {
152 2     2 1 12592 return sort keys %WORDS;
153             }
154             }
155              
156             1;
157              
158             __END__