~ubuntu-branches/ubuntu/oneiric/libsql-reservedwords-perl/oneiric

« back to all changes in this revision

Viewing changes to lib/SQL/ReservedWords/PostgreSQL.pm

  • Committer: Bazaar Package Importer
  • Author(s): Krzysztof Krzyżaniak (eloy)
  • Date: 2007-05-23 15:46:51 UTC
  • Revision ID: james.westby@ubuntu.com-20070523154651-yfxf9zx61d147v8c
Tags: upstream-0.7
Import upstream version 0.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package SQL::ReservedWords::PostgreSQL;
 
2
 
 
3
use strict;
 
4
use warnings;
 
5
use vars '$VERSION';
 
6
 
 
7
$VERSION = 0.7;
 
8
 
 
9
use constant POSTGRESQL73 => 0x01;
 
10
use constant POSTGRESQL74 => 0x02;
 
11
use constant POSTGRESQL80 => 0x04;
 
12
use constant POSTGRESQL81 => 0x08;
 
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
        return $WORDS{ uc pop } || 0;
 
127
    }
 
128
 
 
129
    sub is_reserved_by_postgresql7 {
 
130
        my $flags = &is_reserved;
 
131
        return $flags & POSTGRESQL73 || $flags & POSTGRESQL74;
 
132
    }
 
133
 
 
134
    sub is_reserved_by_postgresql8 {
 
135
        my $flags = &is_reserved;
 
136
        return $flags & POSTGRESQL80 || $flags & POSTGRESQL81;
 
137
    }
 
138
 
 
139
    sub reserved_by {
 
140
        my $flags       = &is_reserved;
 
141
        my @reserved_by = ();
 
142
 
 
143
        push @reserved_by, 'PostgreSQL 7.3' if $flags & POSTGRESQL73;
 
144
        push @reserved_by, 'PostgreSQL 7.4' if $flags & POSTGRESQL74;
 
145
        push @reserved_by, 'PostgreSQL 8.0' if $flags & POSTGRESQL80;
 
146
        push @reserved_by, 'PostgreSQL 8.1' if $flags & POSTGRESQL81;
 
147
 
 
148
        return @reserved_by;
 
149
    }
 
150
 
 
151
    sub words {
 
152
        return sort keys %WORDS;
 
153
    }
 
154
}
 
155
 
 
156
1;
 
157
 
 
158
__END__
 
159
 
 
160
=head1 NAME
 
161
 
 
162
SQL::ReservedWords::PostgreSQL - Reserved SQL words by PostgreSQL
 
163
 
 
164
=head1 SYNOPSIS
 
165
 
 
166
   if ( SQL::ReservedWords::PostgreSQL->is_reserved( $word ) ) {
 
167
       print "$word is a reserved PostgreSQL word!";
 
168
   }
 
169
 
 
170
=head1 DESCRIPTION
 
171
 
 
172
Determine if words are reserved by PostgreSQL.
 
173
 
 
174
=head1 METHODS
 
175
 
 
176
=over 4
 
177
 
 
178
=item is_reserved( $word )
 
179
 
 
180
Returns a boolean indicating if C<$word> is reserved by either PostgreSQL 7.3, 7.4,
 
181
8.0 or 8.1.
 
182
 
 
183
=item is_reserved_by_postgresql7( $word )
 
184
 
 
185
Returns a boolean indicating if C<$word> is reserved by either PostgreSQL 7.3 or 7.4.
 
186
 
 
187
=item is_reserved_by_postgresql8( $word )
 
188
 
 
189
Returns a boolean indicating if C<$word> is reserved by either PostgreSQL 8.0 or 8.1.
 
190
 
 
191
=item reserved_by( $word )
 
192
 
 
193
Returns a list with PostgreSQL versions that reserves C<$word>.
 
194
 
 
195
=item words
 
196
 
 
197
Returns a list with all reserved words.
 
198
 
 
199
=back
 
200
 
 
201
=head1 EXPORTS
 
202
 
 
203
Nothing by default. Following subroutines can be exported:
 
204
 
 
205
=over 4
 
206
 
 
207
=item is_reserved
 
208
 
 
209
=item is_reserved_by_postgresql7
 
210
 
 
211
=item is_reserved_by_postgresql8
 
212
 
 
213
=item reserved_by
 
214
 
 
215
=item words
 
216
 
 
217
=back
 
218
 
 
219
=head1 SEE ALSO
 
220
 
 
221
L<SQL::ReservedWords>
 
222
 
 
223
L<http://www.postgresql.org/docs/manuals/>
 
224
 
 
225
=head1 AUTHOR
 
226
 
 
227
Christian Hansen C<chansen@cpan.org>
 
228
 
 
229
=head1 COPYRIGHT
 
230
 
 
231
This program is free software, you can redistribute it and/or modify
 
232
it under the same terms as Perl itself.
 
233
 
 
234
=cut