SQL::Translator::Parser::DBI.3pm

Langue: en

Autres versions - même langue

Version: 2009-08-18 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

NAME

SQL::Translator::Parser::DBI - "parser" for DBI handles

SYNOPSIS

   use DBI;
   use SQL::Translator;
 
   my $dbh = DBI->connect('dsn', 'user', 'pass', 
       {
           RaiseError       => 1,
           FetchHashKeyName => 'NAME_lc',
       }
   );
 
   my $translator  =  SQL::Translator->new(
       parser      => 'DBI',
       dbh         => $dbh,
   );
 
 

Or:

   use SQL::Translator;
 
   my $translator      =  SQL::Translator->new(
       parser          => 'DBI',
       parser_args     => {
           dsn         => 'dbi:mysql:FOO',
           db_user     => 'guest',
           db_password => 'password',
     }
   );
 
 

DESCRIPTION

This parser accepts an open database handle (or the arguments to create one) and queries the database directly for the information.

The following are acceptable arguments:

*
dbh

An open DBI database handle. NB: Be sure to create the database with the ``FetchHashKeyName => 'NAME_lc''' option as all the DBI parsers expect lowercased column names.

*
dsn

The DSN to use for connecting to a database.

*
db_user

The user name to use for connecting to a database.

*
db_password

The password to use for connecting to a database.

There is no need to specify which type of database you are querying as this is determined automatically by inspecting $dbh->{'Driver'}{'Name'}. If a parser exists for your database, it will be used automatically; if not, the code will fail automatically (and you can write the parser and contribute it to the project!).

Currently parsers exist for the following databases:

*
MySQL
*
SQLite
*
Sybase
*
PostgreSQL (still experimental)

Most of these parsers are able to query the database directly for the structure rather than parsing a text file. For large schemas, this is probably orders of magnitude faster than traditional parsing (which uses Parse::RecDescent, an amazing module but really quite slow).

Though no Oracle parser currently exists, it would be fairly easy to query an Oracle database directly by using DDL::Oracle to generate a DDL for the schema and then using the normal Oracle parser on this. Perhaps future versions of SQL::Translator will include the ability to query Oracle directly and skip the parsing of a text file, too.

AUTHOR

Ken Y. Clark <kclark@cpan.org>.

SEE ALSO

DBI, SQL::Translator.