---
name: "SQL::Translator::Parser::DBI"
section: "3pm"
platform: "linux"
package: "libsql-translator-perl"
version: "1.66-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SQL::Translator::Parser::DBI"
---

# SQL::Translator::Parser::DBI(3pm)

"parser" for DBI handles

## 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',
      parser_args => {
          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.
