package SQL::ReservedWords::ODBC;
use strict;
use warnings;
use vars '$VERSION';
$VERSION = '0.8';
use constant ODBC30 => 0x01;
{
require Sub::Exporter;
my @exports = qw[
is_reserved
is_reserved_by_odbc3
reserved_by
words
];
Sub::Exporter->import( -setup => { exports => \@exports } );
}
{
my %WORDS = (
ABSOLUTE => ODBC30,
ACTION => ODBC30,
ADA => ODBC30,
ADD => ODBC30,
ALL => ODBC30,
ALLOCATE => ODBC30,
ALTER => ODBC30,
AND => ODBC30,
ANY => ODBC30,
ARE => ODBC30,
AS => ODBC30,
ASC => ODBC30,
ASSERTION => ODBC30,
AT => ODBC30,
AUTHORIZATION => ODBC30,
AVG => ODBC30,
BEGIN => ODBC30,
BETWEEN => ODBC30,
BIT => ODBC30,
BIT_LENGTH => ODBC30,
BOTH => ODBC30,
BY => ODBC30,
CASCADE => ODBC30,
CASCADED => ODBC30,
CASE => ODBC30,
CAST => ODBC30,
CATALOG => ODBC30,
CHAR => ODBC30,
CHARACTER => ODBC30,
CHARACTER_LENGTH => ODBC30,
CHAR_LENGTH => ODBC30,
CHECK => ODBC30,
CLOSE => ODBC30,
COALESCE => ODBC30,
COLLATE => ODBC30,
COLLATION => ODBC30,
COLUMN => ODBC30,
COMMIT => ODBC30,
CONNECT => ODBC30,
CONNECTION => ODBC30,
CONSTRAINT => ODBC30,
CONSTRAINTS => ODBC30,
CONTINUE => ODBC30,
CONVERT => ODBC30,
CORRESPONDING => ODBC30,
COUNT => ODBC30,
CREATE => ODBC30,
CROSS => ODBC30,
CURRENT => ODBC30,
CURRENT_DATE => ODBC30,
CURRENT_TIME => ODBC30,
CURRENT_TIMESTAMP => ODBC30,
CURRENT_USER => ODBC30,
CURSOR => ODBC30,
DATE => ODBC30,
DAY => ODBC30,
DEALLOCATE => ODBC30,
DEC => ODBC30,
DECIMAL => ODBC30,
DECLARE => ODBC30,
DEFAULT => ODBC30,
DEFERRABLE => ODBC30,
DEFERRED => ODBC30,
DELETE => ODBC30,
DESC => ODBC30,
DESCRIBE => ODBC30,
DESCRIPTOR => ODBC30,
DIAGNOSTICS => ODBC30,
DISCONNECT => ODBC30,
DISTINCT => ODBC30,
DOMAIN => ODBC30,
DOUBLE => ODBC30,
DROP => ODBC30,
ELSE => ODBC30,
END => ODBC30,
'END-EXEC' => ODBC30,
ESCAPE => ODBC30,
EXCEPT => ODBC30,
EXCEPTION => ODBC30,
EXEC => ODBC30,
EXECUTE => ODBC30,
EXISTS => ODBC30,
EXTERNAL => ODBC30,
EXTRACT => ODBC30,
FALSE => ODBC30,
FETCH => ODBC30,
FIRST => ODBC30,
FLOAT => ODBC30,
FOR => ODBC30,
FOREIGN => ODBC30,
FORTRAN => ODBC30,
FOUND => ODBC30,
FROM => ODBC30,
FULL => ODBC30,
GET => ODBC30,
GLOBAL => ODBC30,
GO => ODBC30,
GOTO => ODBC30,
GRANT => ODBC30,
GROUP => ODBC30,
HAVING => ODBC30,
HOUR => ODBC30,
IDENTITY => ODBC30,
IMMEDIATE => ODBC30,
IN => ODBC30,
INCLUDE => ODBC30,
INDEX => ODBC30,
INDICATOR => ODBC30,
INITIALLY => ODBC30,
INNER => ODBC30,
INPUT => ODBC30,
INSENSITIVE => ODBC30,
INSERT => ODBC30,
INT => ODBC30,
INTEGER => ODBC30,
INTERSECT => ODBC30,
INTERVAL => ODBC30,
INTO => ODBC30,
IS => ODBC30,
ISOLATION => ODBC30,
JOIN => ODBC30,
KEY => ODBC30,
LANGUAGE => ODBC30,
LAST => ODBC30,
LEADING => ODBC30,
LEFT => ODBC30,
LEVEL => ODBC30,
LIKE => ODBC30,
LOCAL => ODBC30,
LOWER => ODBC30,
MATCH => ODBC30,
MAX => ODBC30,
MIN => ODBC30,
MINUTE => ODBC30,
MODULE => ODBC30,
MONTH => ODBC30,
NAMES => ODBC30,
NATIONAL => ODBC30,
NATURAL => ODBC30,
NCHAR => ODBC30,
NEXT => ODBC30,
NO => ODBC30,
NONE => ODBC30,
NOT => ODBC30,
NULL => ODBC30,
NULLIF => ODBC30,
NUMERIC => ODBC30,
OCTET_LENGTH => ODBC30,
OF => ODBC30,
ON => ODBC30,
ONLY => ODBC30,
OPEN => ODBC30,
OPTION => ODBC30,
OR => ODBC30,
ORDER => ODBC30,
OUTER => ODBC30,
OUTPUT => ODBC30,
OVERLAPS => ODBC30,
PAD => ODBC30,
PARTIAL => ODBC30,
PASCAL => ODBC30,
POSITION => ODBC30,
PRECISION => ODBC30,
PREPARE => ODBC30,
PRESERVE => ODBC30,
PRIMARY => ODBC30,
PRIOR => ODBC30,
PRIVILEGES => ODBC30,
PROCEDURE => ODBC30,
PUBLIC => ODBC30,
READ => ODBC30,
REAL => ODBC30,
REFERENCES => ODBC30,
RELATIVE => ODBC30,
RESTRICT => ODBC30,
REVOKE => ODBC30,
RIGHT => ODBC30,
ROLLBACK => ODBC30,
ROWS => ODBC30,
SCHEMA => ODBC30,
SCROLL => ODBC30,
SECOND => ODBC30,
SECTION => ODBC30,
SELECT => ODBC30,
SESSION => ODBC30,
SESSION_USER => ODBC30,
SET => ODBC30,
SIZE => ODBC30,
SMALLINT => ODBC30,
SOME => ODBC30,
SPACE => ODBC30,
SQL => ODBC30,
SQLCA => ODBC30,
SQLCODE => ODBC30,
SQLERROR => ODBC30,
SQLSTATE => ODBC30,
SQLWARNING => ODBC30,
SUBSTRING => ODBC30,
SUM => ODBC30,
SYSTEM_USER => ODBC30,
TABLE => ODBC30,
TEMPORARY => ODBC30,
THEN => ODBC30,
TIME => ODBC30,
TIMESTAMP => ODBC30,
TIMEZONE_HOUR => ODBC30,
TIMEZONE_MINUTE => ODBC30,
TO => ODBC30,
TRAILING => ODBC30,
TRANSACTION => ODBC30,
TRANSLATE => ODBC30,
TRANSLATION => ODBC30,
TRIM => ODBC30,
TRUE => ODBC30,
UNION => ODBC30,
UNIQUE => ODBC30,
UNKNOWN => ODBC30,
UPDATE => ODBC30,
UPPER => ODBC30,
USAGE => ODBC30,
USER => ODBC30,
USING => ODBC30,
VALUE => ODBC30,
VALUES => ODBC30,
VARCHAR => ODBC30,
VARYING => ODBC30,
VIEW => ODBC30,
WHEN => ODBC30,
WHENEVER => ODBC30,
WHERE => ODBC30,
WITH => ODBC30,
WORK => ODBC30,
WRITE => ODBC30,
YEAR => ODBC30,
ZONE => ODBC30,
);
sub is_reserved {
return $WORDS{ uc(pop || '') } || 0;
}
sub is_reserved_by_odbc3 {
return &is_reserved & ODBC30;
}
sub reserved_by {
my $flags = &is_reserved;
my @reserved_by = ();
push @reserved_by, 'ODBC 3.0' if $flags & ODBC30;
return @reserved_by;
}
sub words {
return sort keys %WORDS;
}
}
1;
__END__
=head1 NAME
SQL::ReservedWords::ODBC - Reserved SQL words by ODBC
=head1 SYNOPSIS
if ( SQL::ReservedWords::ODBC->is_reserved( $word ) ) {
print "$word is a reserved ODBC word!";
}
=head1 DESCRIPTION
Determine if words are reserved by ODBC.
=head1 METHODS
=over 4
=item is_reserved( $word )
Returns a boolean indicating if C<$word> is reserved by ODBC 3.0.
=item is_reserved_by_odbc3( $word )
Returns a boolean indicating if C<$word> is reserved by ODBC 3.0.
=item reserved_by( $word )
Returns a list with ODBC versions that reserves C<$word>.
=item words
Returns a list with all reserved words.
=back
=head1 EXPORTS
Nothing by default. Following subroutines can be exported:
=over 4
=item is_reserved
=item is_reserved_by_odbc3
=item reserved_by
=item words
=back
=head1 SEE ALSO
L<SQL::ReservedWords>.
Microsoft ODBC 3.0 Programmer's Reference, Volume 2, Appendix C.
=head1 AUTHOR
Christian Hansen C<[email protected]>
=head1 COPYRIGHT
This program is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut