File Coverage

blib/lib/SQL/ReservedWords.pm
Criterion Covered Total %
statement 29 29 100.0
branch 6 6 100.0
condition 2 2 100.0
subroutine 12 12 100.0
pod 6 6 100.0
total 55 55 100.0


line stmt bran cond sub pod time code
1             package SQL::ReservedWords;
2              
3 2     2   2689 use strict;
  2         5  
  2         70  
4 2     2   11 use warnings;
  2         4  
  2         65  
5 2     2   20 use vars '$VERSION';
  2         5  
  2         126  
6              
7             $VERSION = '0.8';
8              
9 2     2   10 use constant SQL1992 => 0x01;
  2         2  
  2         107  
10 2     2   9 use constant SQL1999 => 0x02;
  2         3  
  2         86  
11 2     2   8 use constant SQL2003 => 0x04;
  2         4  
  2         11209  
12              
13             {
14             require Sub::Exporter;
15              
16             my @exports = qw[
17             is_reserved
18             is_reserved_by_sql1992
19             is_reserved_by_sql1999
20             is_reserved_by_sql2003
21             reserved_by
22             words
23             ];
24              
25             Sub::Exporter->import( -setup => { exports => \@exports } );
26             }
27              
28             {
29             my %WORDS = (
30             ABSOLUTE => SQL1992 | SQL1999,
31             ACTION => SQL1992 | SQL1999,
32             ADD => SQL1992 | SQL1999 | SQL2003,
33             AFTER => SQL1999,
34             ALL => SQL1992 | SQL1999 | SQL2003,
35             ALLOCATE => SQL1992 | SQL1999 | SQL2003,
36             ALTER => SQL1992 | SQL1999 | SQL2003,
37             AND => SQL1992 | SQL1999 | SQL2003,
38             ANY => SQL1992 | SQL1999 | SQL2003,
39             ARE => SQL1992 | SQL1999 | SQL2003,
40             ARRAY => SQL1999 | SQL2003,
41             AS => SQL1992 | SQL1999 | SQL2003,
42             ASC => SQL1992 | SQL1999,
43             ASENSITIVE => SQL1999 | SQL2003,
44             ASSERTION => SQL1992 | SQL1999,
45             ASYMMETRIC => SQL1999 | SQL2003,
46             AT => SQL1992 | SQL1999 | SQL2003,
47             ATOMIC => SQL1999 | SQL2003,
48             AUTHORIZATION => SQL1992 | SQL1999 | SQL2003,
49             AVG => SQL1992,
50             BEFORE => SQL1999,
51             BEGIN => SQL1992 | SQL1999 | SQL2003,
52             BETWEEN => SQL1992 | SQL1999 | SQL2003,
53             BIGINT => SQL2003,
54             BINARY => SQL1999 | SQL2003,
55             BIT => SQL1992 | SQL1999,
56             BIT_LENGTH => SQL1992,
57             BLOB => SQL1999 | SQL2003,
58             BOOLEAN => SQL1999 | SQL2003,
59             BOTH => SQL1992 | SQL1999 | SQL2003,
60             BREADTH => SQL1999,
61             BY => SQL1992 | SQL1999 | SQL2003,
62             CALL => SQL1992 | SQL1999 | SQL2003,
63             CALLED => SQL1999 | SQL2003,
64             CASCADE => SQL1992 | SQL1999,
65             CASCADED => SQL1992 | SQL1999 | SQL2003,
66             CASE => SQL1992 | SQL1999 | SQL2003,
67             CAST => SQL1992 | SQL1999 | SQL2003,
68             CATALOG => SQL1992 | SQL1999,
69             CHAR => SQL1992 | SQL1999 | SQL2003,
70             CHARACTER => SQL1992 | SQL1999 | SQL2003,
71             CHARACTER_LENGTH => SQL1992,
72             CHAR_LENGTH => SQL1992,
73             CHECK => SQL1992 | SQL1999 | SQL2003,
74             CLOB => SQL1999 | SQL2003,
75             CLOSE => SQL1992 | SQL1999 | SQL2003,
76             COALESCE => SQL1992,
77             COLLATE => SQL1992 | SQL1999 | SQL2003,
78             COLLATION => SQL1992 | SQL1999,
79             COLUMN => SQL1992 | SQL1999 | SQL2003,
80             COMMIT => SQL1992 | SQL1999 | SQL2003,
81             CONDITION => SQL1992 | SQL1999 | SQL2003,
82             CONNECT => SQL1992 | SQL1999 | SQL2003,
83             CONNECTION => SQL1992 | SQL1999,
84             CONSTRAINT => SQL1992 | SQL1999 | SQL2003,
85             CONSTRAINTS => SQL1992 | SQL1999,
86             CONSTRUCTOR => SQL1999,
87             CONTAINS => SQL1992,
88             CONTINUE => SQL1992 | SQL1999 | SQL2003,
89             CONVERT => SQL1992,
90             CORRESPONDING => SQL1992 | SQL1999 | SQL2003,
91             COUNT => SQL1992,
92             CREATE => SQL1992 | SQL1999 | SQL2003,
93             CROSS => SQL1992 | SQL1999 | SQL2003,
94             CUBE => SQL1999 | SQL2003,
95             CURRENT => SQL1992 | SQL1999 | SQL2003,
96             CURRENT_DATE => SQL1992 | SQL1999 | SQL2003,
97             CURRENT_DEFAULT_TRANSFORM_GROUP => SQL1999 | SQL2003,
98             CURRENT_PATH => SQL1992 | SQL1999 | SQL2003,
99             CURRENT_ROLE => SQL1999 | SQL2003,
100             CURRENT_TIME => SQL1992 | SQL1999 | SQL2003,
101             CURRENT_TIMESTAMP => SQL1992 | SQL1999 | SQL2003,
102             CURRENT_TRANSFORM_GROUP_FOR_TYPE => SQL1999 | SQL2003,
103             CURRENT_USER => SQL1992 | SQL1999 | SQL2003,
104             CURSOR => SQL1992 | SQL1999 | SQL2003,
105             CYCLE => SQL1999 | SQL2003,
106             DATA => SQL1999,
107             DATE => SQL1992 | SQL1999 | SQL2003,
108             DAY => SQL1992 | SQL1999 | SQL2003,
109             DEALLOCATE => SQL1992 | SQL1999 | SQL2003,
110             DEC => SQL1992 | SQL1999 | SQL2003,
111             DECIMAL => SQL1992 | SQL1999 | SQL2003,
112             DECLARE => SQL1992 | SQL1999 | SQL2003,
113             DEFAULT => SQL1992 | SQL1999 | SQL2003,
114             DEFERRABLE => SQL1992 | SQL1999,
115             DEFERRED => SQL1992 | SQL1999,
116             DELETE => SQL1992 | SQL1999 | SQL2003,
117             DEPTH => SQL1999,
118             DEREF => SQL1999 | SQL2003,
119             DESC => SQL1992 | SQL1999,
120             DESCRIBE => SQL1992 | SQL1999 | SQL2003,
121             DESCRIPTOR => SQL1992 | SQL1999,
122             DETERMINISTIC => SQL1992 | SQL1999 | SQL2003,
123             DIAGNOSTICS => SQL1992 | SQL1999,
124             DISCONNECT => SQL1992 | SQL1999 | SQL2003,
125             DISTINCT => SQL1992 | SQL1999 | SQL2003,
126             DO => SQL1992 | SQL1999 | SQL2003,
127             DOMAIN => SQL1992 | SQL1999,
128             DOUBLE => SQL1992 | SQL1999 | SQL2003,
129             DROP => SQL1992 | SQL1999 | SQL2003,
130             DYNAMIC => SQL1999 | SQL2003,
131             EACH => SQL1999 | SQL2003,
132             ELEMENT => SQL2003,
133             ELSE => SQL1992 | SQL1999 | SQL2003,
134             ELSEIF => SQL1992 | SQL1999 | SQL2003,
135             END => SQL1992 | SQL1999 | SQL2003,
136             EQUALS => SQL1999,
137             ESCAPE => SQL1992 | SQL1999 | SQL2003,
138             EXCEPT => SQL1992 | SQL1999 | SQL2003,
139             EXCEPTION => SQL1992 | SQL1999,
140             EXEC => SQL1992 | SQL1999 | SQL2003,
141             EXECUTE => SQL1992 | SQL1999 | SQL2003,
142             EXISTS => SQL1992 | SQL1999 | SQL2003,
143             EXIT => SQL1992 | SQL1999 | SQL2003,
144             EXTERNAL => SQL1992 | SQL1999 | SQL2003,
145             EXTRACT => SQL1992,
146             FALSE => SQL1992 | SQL1999 | SQL2003,
147             FETCH => SQL1992 | SQL1999 | SQL2003,
148             FILTER => SQL1999 | SQL2003,
149             FIRST => SQL1992 | SQL1999,
150             FLOAT => SQL1992 | SQL1999 | SQL2003,
151             FOR => SQL1992 | SQL1999 | SQL2003,
152             FOREIGN => SQL1992 | SQL1999 | SQL2003,
153             FOUND => SQL1992 | SQL1999,
154             FREE => SQL1999 | SQL2003,
155             FROM => SQL1992 | SQL1999 | SQL2003,
156             FULL => SQL1992 | SQL1999 | SQL2003,
157             FUNCTION => SQL1992 | SQL1999 | SQL2003,
158             GENERAL => SQL1999,
159             GET => SQL1992 | SQL1999 | SQL2003,
160             GLOBAL => SQL1992 | SQL1999 | SQL2003,
161             GO => SQL1992 | SQL1999,
162             GOTO => SQL1992 | SQL1999,
163             GRANT => SQL1992 | SQL1999 | SQL2003,
164             GROUP => SQL1992 | SQL1999 | SQL2003,
165             GROUPING => SQL1999 | SQL2003,
166             HANDLER => SQL1992 | SQL1999 | SQL2003,
167             HAVING => SQL1992 | SQL1999 | SQL2003,
168             HOLD => SQL1999 | SQL2003,
169             HOUR => SQL1992 | SQL1999 | SQL2003,
170             IDENTITY => SQL1992 | SQL1999 | SQL2003,
171             IF => SQL1992 | SQL1999 | SQL2003,
172             IMMEDIATE => SQL1992 | SQL1999 | SQL2003,
173             IN => SQL1992 | SQL1999 | SQL2003,
174             INDICATOR => SQL1992 | SQL1999 | SQL2003,
175             INITIALLY => SQL1992 | SQL1999,
176             INNER => SQL1992 | SQL1999 | SQL2003,
177             INOUT => SQL1992 | SQL1999 | SQL2003,
178             INPUT => SQL1992 | SQL1999 | SQL2003,
179             INSENSITIVE => SQL1992 | SQL1999 | SQL2003,
180             INSERT => SQL1992 | SQL1999 | SQL2003,
181             INT => SQL1992 | SQL1999 | SQL2003,
182             INTEGER => SQL1992 | SQL1999 | SQL2003,
183             INTERSECT => SQL1992 | SQL1999 | SQL2003,
184             INTERVAL => SQL1992 | SQL1999 | SQL2003,
185             INTO => SQL1992 | SQL1999 | SQL2003,
186             IS => SQL1992 | SQL1999 | SQL2003,
187             ISOLATION => SQL1992 | SQL1999,
188             ITERATE => SQL1999 | SQL2003,
189             JOIN => SQL1992 | SQL1999 | SQL2003,
190             KEY => SQL1992 | SQL1999,
191             LANGUAGE => SQL1992 | SQL1999 | SQL2003,
192             LARGE => SQL1999 | SQL2003,
193             LAST => SQL1992 | SQL1999,
194             LATERAL => SQL1999 | SQL2003,
195             LEADING => SQL1992 | SQL1999 | SQL2003,
196             LEAVE => SQL1992 | SQL1999 | SQL2003,
197             LEFT => SQL1992 | SQL1999 | SQL2003,
198             LEVEL => SQL1992 | SQL1999,
199             LIKE => SQL1992 | SQL1999 | SQL2003,
200             LOCAL => SQL1992 | SQL1999 | SQL2003,
201             LOCALTIME => SQL1999 | SQL2003,
202             LOCALTIMESTAMP => SQL1999 | SQL2003,
203             LOCATOR => SQL1999,
204             LOOP => SQL1992 | SQL1999 | SQL2003,
205             LOWER => SQL1992,
206             MAP => SQL1999,
207             MATCH => SQL1992 | SQL1999 | SQL2003,
208             MAX => SQL1992,
209             MEMBER => SQL2003,
210             MERGE => SQL2003,
211             METHOD => SQL1999 | SQL2003,
212             MIN => SQL1992,
213             MINUTE => SQL1992 | SQL1999 | SQL2003,
214             MODIFIES => SQL1999 | SQL2003,
215             MODULE => SQL1992 | SQL1999 | SQL2003,
216             MONTH => SQL1992 | SQL1999 | SQL2003,
217             MULTISET => SQL2003,
218             NAMES => SQL1992 | SQL1999,
219             NATIONAL => SQL1992 | SQL1999 | SQL2003,
220             NATURAL => SQL1992 | SQL1999 | SQL2003,
221             NCHAR => SQL1992 | SQL1999 | SQL2003,
222             NCLOB => SQL1999 | SQL2003,
223             NEW => SQL1999 | SQL2003,
224             NEXT => SQL1992 | SQL1999,
225             NO => SQL1992 | SQL1999 | SQL2003,
226             NONE => SQL1999 | SQL2003,
227             NOT => SQL1992 | SQL1999 | SQL2003,
228             NULL => SQL1992 | SQL1999 | SQL2003,
229             NULLIF => SQL1992,
230             NUMERIC => SQL1992 | SQL1999 | SQL2003,
231             OBJECT => SQL1999,
232             OCTET_LENGTH => SQL1992,
233             OF => SQL1992 | SQL1999 | SQL2003,
234             OLD => SQL1999 | SQL2003,
235             ON => SQL1992 | SQL1999 | SQL2003,
236             ONLY => SQL1992 | SQL1999 | SQL2003,
237             OPEN => SQL1992 | SQL1999 | SQL2003,
238             OPTION => SQL1992 | SQL1999,
239             OR => SQL1992 | SQL1999 | SQL2003,
240             ORDER => SQL1992 | SQL1999 | SQL2003,
241             ORDINALITY => SQL1999,
242             OUT => SQL1992 | SQL1999 | SQL2003,
243             OUTER => SQL1992 | SQL1999 | SQL2003,
244             OUTPUT => SQL1992 | SQL1999 | SQL2003,
245             OVER => SQL1999 | SQL2003,
246             OVERLAPS => SQL1992 | SQL1999 | SQL2003,
247             PAD => SQL1992 | SQL1999,
248             PARAMETER => SQL1992 | SQL1999 | SQL2003,
249             PARTIAL => SQL1992 | SQL1999,
250             PARTITION => SQL1999 | SQL2003,
251             PATH => SQL1992 | SQL1999,
252             POSITION => SQL1992,
253             PRECISION => SQL1992 | SQL1999 | SQL2003,
254             PREPARE => SQL1992 | SQL1999 | SQL2003,
255             PRESERVE => SQL1992 | SQL1999,
256             PRIMARY => SQL1992 | SQL1999 | SQL2003,
257             PRIOR => SQL1992 | SQL1999,
258             PRIVILEGES => SQL1992 | SQL1999,
259             PROCEDURE => SQL1992 | SQL1999 | SQL2003,
260             PUBLIC => SQL1992 | SQL1999,
261             RANGE => SQL1999 | SQL2003,
262             READ => SQL1992 | SQL1999,
263             READS => SQL1999 | SQL2003,
264             REAL => SQL1992 | SQL1999 | SQL2003,
265             RECURSIVE => SQL1999 | SQL2003,
266             REF => SQL1999 | SQL2003,
267             REFERENCES => SQL1992 | SQL1999 | SQL2003,
268             REFERENCING => SQL1999 | SQL2003,
269             RELATIVE => SQL1992 | SQL1999,
270             RELEASE => SQL1999 | SQL2003,
271             REPEAT => SQL1992 | SQL1999 | SQL2003,
272             RESIGNAL => SQL1992 | SQL1999 | SQL2003,
273             RESTRICT => SQL1992 | SQL1999,
274             RESULT => SQL1999 | SQL2003,
275             RETURN => SQL1992 | SQL1999 | SQL2003,
276             RETURNS => SQL1992 | SQL1999 | SQL2003,
277             REVOKE => SQL1992 | SQL1999 | SQL2003,
278             RIGHT => SQL1992 | SQL1999 | SQL2003,
279             ROLE => SQL1999,
280             ROLLBACK => SQL1992 | SQL1999 | SQL2003,
281             ROLLUP => SQL1999 | SQL2003,
282             ROUTINE => SQL1992 | SQL1999,
283             ROW => SQL1999 | SQL2003,
284             ROWS => SQL1992 | SQL1999 | SQL2003,
285             SAVEPOINT => SQL1999 | SQL2003,
286             SCHEMA => SQL1992 | SQL1999,
287             SCOPE => SQL1999 | SQL2003,
288             SCROLL => SQL1992 | SQL1999 | SQL2003,
289             SEARCH => SQL1999 | SQL2003,
290             SECOND => SQL1992 | SQL1999 | SQL2003,
291             SECTION => SQL1992 | SQL1999,
292             SELECT => SQL1992 | SQL1999 | SQL2003,
293             SENSITIVE => SQL1999 | SQL2003,
294             SESSION => SQL1992 | SQL1999,
295             SESSION_USER => SQL1992 | SQL1999 | SQL2003,
296             SET => SQL1992 | SQL1999 | SQL2003,
297             SETS => SQL1999,
298             SIGNAL => SQL1992 | SQL1999 | SQL2003,
299             SIMILAR => SQL1999 | SQL2003,
300             SIZE => SQL1992 | SQL1999,
301             SMALLINT => SQL1992 | SQL1999 | SQL2003,
302             SOME => SQL1992 | SQL1999 | SQL2003,
303             SPACE => SQL1992 | SQL1999,
304             SPECIFIC => SQL1992 | SQL1999 | SQL2003,
305             SPECIFICTYPE => SQL1999 | SQL2003,
306             SQL => SQL1992 | SQL1999 | SQL2003,
307             SQLCODE => SQL1992,
308             SQLERROR => SQL1992,
309             SQLEXCEPTION => SQL1992 | SQL1999 | SQL2003,
310             SQLSTATE => SQL1992 | SQL1999 | SQL2003,
311             SQLWARNING => SQL1992 | SQL1999 | SQL2003,
312             START => SQL1999 | SQL2003,
313             STATE => SQL1999,
314             STATIC => SQL1999 | SQL2003,
315             SUBMULTISET => SQL2003,
316             SUBSTRING => SQL1992,
317             SUM => SQL1992,
318             SYMMETRIC => SQL1999 | SQL2003,
319             SYSTEM => SQL1999 | SQL2003,
320             SYSTEM_USER => SQL1992 | SQL1999 | SQL2003,
321             TABLE => SQL1992 | SQL1999 | SQL2003,
322             TABLESAMPLE => SQL2003,
323             TEMPORARY => SQL1992 | SQL1999,
324             THEN => SQL1992 | SQL1999 | SQL2003,
325             TIME => SQL1992 | SQL1999 | SQL2003,
326             TIMESTAMP => SQL1992 | SQL1999 | SQL2003,
327             TIMEZONE_HOUR => SQL1992 | SQL1999 | SQL2003,
328             TIMEZONE_MINUTE => SQL1992 | SQL1999 | SQL2003,
329             TO => SQL1992 | SQL1999 | SQL2003,
330             TRAILING => SQL1992 | SQL1999 | SQL2003,
331             TRANSACTION => SQL1992 | SQL1999,
332             TRANSLATE => SQL1992,
333             TRANSLATION => SQL1992 | SQL1999 | SQL2003,
334             TREAT => SQL1999 | SQL2003,
335             TRIGGER => SQL1999 | SQL2003,
336             TRIM => SQL1992,
337             TRUE => SQL1992 | SQL1999 | SQL2003,
338             UNDER => SQL1999,
339             UNDO => SQL1992 | SQL1999 | SQL2003,
340             UNION => SQL1992 | SQL1999 | SQL2003,
341             UNIQUE => SQL1992 | SQL1999 | SQL2003,
342             UNKNOWN => SQL1992 | SQL1999 | SQL2003,
343             UNNEST => SQL1999 | SQL2003,
344             UNTIL => SQL1992 | SQL1999 | SQL2003,
345             UPDATE => SQL1992 | SQL1999 | SQL2003,
346             UPPER => SQL1992,
347             USAGE => SQL1992 | SQL1999,
348             USER => SQL1992 | SQL1999 | SQL2003,
349             USING => SQL1992 | SQL1999 | SQL2003,
350             VALUE => SQL1992 | SQL1999 | SQL2003,
351             VALUES => SQL1992 | SQL1999 | SQL2003,
352             VARCHAR => SQL1992 | SQL1999 | SQL2003,
353             VARYING => SQL1992 | SQL1999 | SQL2003,
354             VIEW => SQL1992 | SQL1999,
355             WHEN => SQL1992 | SQL1999 | SQL2003,
356             WHENEVER => SQL1992 | SQL1999 | SQL2003,
357             WHERE => SQL1992 | SQL1999 | SQL2003,
358             WHILE => SQL1992 | SQL1999 | SQL2003,
359             WINDOW => SQL1999 | SQL2003,
360             WITH => SQL1992 | SQL1999 | SQL2003,
361             WITHIN => SQL1999 | SQL2003,
362             WITHOUT => SQL1999 | SQL2003,
363             WORK => SQL1992 | SQL1999,
364             WRITE => SQL1992 | SQL1999,
365             YEAR => SQL1992 | SQL1999 | SQL2003,
366             ZONE => SQL1992 | SQL1999
367             );
368              
369             sub is_reserved {
370 25   100 25 1 215 return $WORDS{ uc(pop || '') } || 0;
371             }
372              
373             sub is_reserved_by_sql1992 {
374 5     5 1 13 return &is_reserved & SQL1992;
375             }
376              
377             sub is_reserved_by_sql1999 {
378 5     5 1 14 return &is_reserved & SQL1999;
379             }
380              
381             sub is_reserved_by_sql2003 {
382 5     5 1 19 return &is_reserved & SQL2003;
383             }
384              
385             sub reserved_by {
386 4     4 1 10 my $flags = &is_reserved;
387 4         9 my @reserved_by = ();
388              
389 4 100       15 push @reserved_by, 'SQL:1992' if $flags & SQL1992;
390 4 100       10 push @reserved_by, 'SQL:1999' if $flags & SQL1999;
391 4 100       12 push @reserved_by, 'SQL:2003' if $flags & SQL2003;
392              
393 4         31 return @reserved_by;
394             }
395              
396             sub words {
397 2     2 1 9054 return sort keys %WORDS;
398             }
399             }
400              
401             1;
402              
403             __END__