1SQL::Translator::ParserU:s:eDrBIC(o3n)tributed Perl DocuSmQeLn:t:aTtriaonnslator::Parser::DBI(3)
2
3
4
6 SQL::Translator::Parser::DBI - "parser" for DBI handles
7
9 use DBI;
10 use SQL::Translator;
11
12 my $dbh = DBI->connect('dsn', 'user', 'pass',
13 {
14 RaiseError => 1,
15 FetchHashKeyName => 'NAME_lc',
16 }
17 );
18
19 my $translator = SQL::Translator->new(
20 parser => 'DBI',
21 parser_args => {
22 dbh => $dbh,
23 },
24 );
25
26 Or:
27
28 use SQL::Translator;
29
30 my $translator = SQL::Translator->new(
31 parser => 'DBI',
32 parser_args => {
33 dsn => 'dbi:mysql:FOO',
34 db_user => 'guest',
35 db_password => 'password',
36 }
37 );
38
40 This parser accepts an open database handle (or the arguments to create
41 one) and queries the database directly for the information.
42
43 The following are acceptable arguments:
44
45 • dbh
46
47 An open DBI database handle. NB: Be sure to create the database
48 with the "FetchHashKeyName => 'NAME_lc'" option as all the DBI
49 parsers expect lowercased column names.
50
51 • dsn
52
53 The DSN to use for connecting to a database.
54
55 • db_user
56
57 The user name to use for connecting to a database.
58
59 • db_password
60
61 The password to use for connecting to a database.
62
63 There is no need to specify which type of database you are querying as
64 this is determined automatically by inspecting
65 $dbh->{'Driver'}{'Name'}. If a parser exists for your database, it
66 will be used automatically; if not, the code will fail automatically
67 (and you can write the parser and contribute it to the project!).
68
69 Currently parsers exist for the following databases:
70
71 • MySQL
72
73 • SQLite
74
75 • Sybase
76
77 • PostgreSQL (still experimental)
78
79 Most of these parsers are able to query the database directly for the
80 structure rather than parsing a text file. For large schemas, this is
81 probably orders of magnitude faster than traditional parsing (which
82 uses Parse::RecDescent, an amazing module but really quite slow).
83
84 Though no Oracle parser currently exists, it would be fairly easy to
85 query an Oracle database directly by using DDL::Oracle to generate a
86 DDL for the schema and then using the normal Oracle parser on this.
87 Perhaps future versions of SQL::Translator will include the ability to
88 query Oracle directly and skip the parsing of a text file, too.
89
91 Ken Y. Clark <kclark@cpan.org>.
92
94 DBI, SQL::Translator.
95
96
97
98perl v5.36.0 2023-02-27 SQL::Translator::Parser::DBI(3)