1DBSchema(3)           User Contributed Perl Documentation          DBSchema(3)
2
3
4

NAME

6       DBIx::DBSchema - Database-independent schema objects
7

SYNOPSIS

9         use DBIx::DBSchema;
10
11         $schema = new DBIx::DBSchema @dbix_dbschema_table_objects;
12         $schema = new_odbc DBIx::DBSchema $dbh;
13         $schema = new_odbc DBIx::DBSchema $dsn, $user, $pass;
14         $schema = new_native DBIx::DBSchema $dbh;
15         $schema = new_native DBIx::DBSchema $dsn, $user, $pass;
16
17         $schema->save("filename");
18         $schema = load DBIx::DBSchema "filename" or die $DBIx::DBSchema::errstr;
19
20         $schema->addtable($dbix_dbschema_table_object);
21
22         @table_names = $schema->tables;
23
24         $DBIx_DBSchema_table_object = $schema->table("table_name");
25
26         @sql = $schema->sql($dbh);
27         @sql = $schema->sql($dsn, $username, $password);
28         @sql = $schema->sql($dsn); #doesn't connect to database - less reliable
29
30         $perl_code = $schema->pretty_print;
31         %hash = eval $perl_code;
32         use DBI qw(:sql_types); $schema = pretty_read DBIx::DBSchema \%hash;
33

DESCRIPTION

35       DBIx::DBSchema objects are collections of DBIx::DBSchema::Table objects
36       and represent a database schema.
37
38       This module implements an OO-interface to database schemas.  Using this
39       module, you can create a database schema with an OO Perl interface.
40       You can read the schema from an existing database.  You can save the
41       schema to disk and restore it in a different process.  You can write
42       SQL CREATE statements statements for different databases from a single
43       source.  In recent versions, you can transform one schema to another,
44       adding any necessary new columns and tables (and, as of 0.33, indices).
45
46       Currently supported databases are MySQL, PostgreSQL and SQLite.  Sybase
47       and Oracle drivers are partially implemented.  DBIx::DBSchema will
48       attempt to use generic SQL syntax for other databases.  Assistance
49       adding support for other databases is welcomed.  See
50       DBIx::DBSchema::DBD, "Driver Writer's Guide and Base Class".
51

METHODS

53       new TABLE_OBJECT, TABLE_OBJECT, ...
54           Creates a new DBIx::DBSchema object.
55
56       new_odbc DATABASE_HANDLE | DATA_SOURCE USERNAME PASSWORD [ ATTR ]
57           Creates a new DBIx::DBSchema object from an existing data source,
58           which can be specified by passing an open DBI database handle, or
59           by passing the DBI data source name, username, and password.  This
60           uses the experimental DBI type_info method to create a schema with
61           standard (ODBC) SQL column types that most closely correspond to
62           any non-portable column types.  Use this to import a schema that
63           you wish to use with many different database engines.  Although
64           primary key and (unique) index information will only be read from
65           databases with DBIx::DBSchema::DBD drivers (currently MySQL and
66           PostgreSQL), import of column names and attributes *should* work
67           for any database.  Note that this method only uses "ODBC" column
68           types; it does not require or use an ODBC driver.
69
70       new_native DATABASE_HANDLE | DATA_SOURCE USERNAME PASSWORD [ ATTR ]
71           Creates a new DBIx::DBSchema object from an existing data source,
72           which can be specified by passing an open DBI database handle, or
73           by passing the DBI data source name, username and password.  This
74           uses database-native methods to read the schema, and will preserve
75           any non-portable column types.  The method is only available if
76           there is a DBIx::DBSchema::DBD for the corresponding database
77           engine (currently, MySQL and PostgreSQL).
78
79       load FILENAME
80           Loads a DBIx::DBSchema object from a file.  If there is an error,
81           returns false and puts an error message in $DBIx::DBSchema::errstr;
82
83       save FILENAME
84           Saves a DBIx::DBSchema object to a file.
85
86       addtable TABLE_OBJECT
87           Adds the given DBIx::DBSchema::Table object to this DBIx::DBSchema.
88
89       tables
90           Returns a list of the names of all tables.
91
92       table TABLENAME
93           Returns the specified DBIx::DBSchema::Table object.
94
95       sql [ DATABASE_HANDLE | DATA_SOURCE [ USERNAME PASSWORD [ ATTR ] ] ]
96           Returns a list of SQL `CREATE' statements for this schema.
97
98           The data source can be specified by passing an open DBI database
99           handle, or by passing the DBI data source name, username and
100           password.
101
102           Although the username and password are optional, it is best to call
103           this method with a database handle or data source including a valid
104           username and password - a DBI connection will be opened and used to
105           check the database version as well as for more reliable quoting and
106           type mapping.  Note that the database connection will be used
107           passively, not to actually run the CREATE statements.
108
109           If passed a DBI data source (or handle) such as
110           `DBI:mysql:database' or `DBI:Pg:dbname=database', will use syntax
111           specific to that database engine.  Currently supported databases
112           are MySQL and PostgreSQL.
113
114           If not passed a data source (or handle), or if there is no driver
115           for the specified database, will attempt to use generic SQL syntax.
116
117       sql_update_schema [ OPTIONS_HASHREF, ] PROTOTYPE_SCHEMA [
118       DATABASE_HANDLE | DATA_SOURCE [ USERNAME PASSWORD [ ATTR ] ] ]
119           Returns a list of SQL statements to update this schema so that it
120           is idential to the provided prototype schema, also a DBIx::DBSchema
121           object.
122
123           Right now this method knows how to add new tables and alter
124           existing tables, including indices.  If specifically requested by
125           passing an options hashref with drop_tables set true before all
126           other arguments, it will also drop tables.
127
128           See "sql_alter_table" in DBIx::DBSchema::Table, "sql_add_coumn" in
129           DBIx::DBSchema::Column and "sql_alter_column" in
130           DBIx::DBSchema::Column for additional specifics and limitations.
131
132           The data source can be specified by passing an open DBI database
133           handle, or by passing the DBI data source name, username and
134           password.
135
136           Although the username and password are optional, it is best to call
137           this method with a database handle or data source including a valid
138           username and password - a DBI connection will be opened and used to
139           check the database version as well as for more reliable quoting and
140           type mapping.  Note that the database connection will be used
141           passively, not to actually run the CREATE statements.
142
143           If passed a DBI data source (or handle) such as
144           `DBI:mysql:database' or `DBI:Pg:dbname=database', will use syntax
145           specific to that database engine.  Currently supported databases
146           are MySQL and PostgreSQL.
147
148           If not passed a data source (or handle), or if there is no driver
149           for the specified database, will attempt to use generic SQL syntax.
150
151       update_schema [ OPTIONS_HASHREF, ] PROTOTYPE_SCHEMA, DATABASE_HANDLE |
152       DATA_SOURCE [ USERNAME PASSWORD [ ATTR ] ]
153           Same as sql_update_schema, except actually runs the SQL commands to
154           update the schema.  Throws a fatal error if any statement fails.
155
156       pretty_print
157           Returns the data in this schema as Perl source, suitable for
158           assigning to a hash.
159
160       pretty_read HASHREF
161           This method is not recommended.  If you need to load and save your
162           schema to a file, see the /load and /save methods.
163
164           Creates a schema as specified by a data structure such as that
165           created by pretty_print method.
166

AUTHORS

168       Ivan Kohler <ivan-dbix-dbschema@420.am>
169
170       Charles Shapiro <charles.shapiro@numethods.com> and Mitchell Friedman
171       <mitchell.friedman@numethods.com> contributed the start of a Sybase
172       driver.
173
174       Daniel Hanks <hanksdc@about-inc.com> contributed the Oracle driver.
175
176       Jesse Vincent contributed the SQLite driver and fixes to quiet down
177       internal usage of the old API.
178
179       Slaven Rezic <srezic@cpan.org> contributed column and table dropping,
180       Pg bugfixes and more.
181

CONTRIBUTIONS

183       Contributions are welcome!  I'm especially keen on any interest in the
184       top items/projects below under BUGS.
185
187       Copyright (c) 2000-2007 Ivan Kohler Copyright (c) 2000 Mail Abuse
188       Prevention System LLC Copyright (c) 2007-2010 Freeside Internet
189       Services, Inc.  All rights reserved.  This program is free software;
190       you can redistribute it and/or modify it under the same terms as Perl
191       itself.
192

BUGS AND TODO

194       Multiple primary keys are not yet supported.
195
196       Foreign keys and other constraints are not yet supported.
197
198       sql_update_schema doesn't deal with deleted columns yet.
199
200       Need to port and test with additional databases
201
202       Each DBIx::DBSchema object should have a name which corresponds to its
203       name within the SQL database engine (DBI data source).
204
205       pretty_print is actually pretty ugly.
206
207       pretty_print isn't so good about quoting values...  save/load is a much
208       better alternative to using pretty_print/pretty_read
209
210       pretty_read is pretty ugly too.
211
212       pretty_read should *not* create and pass in old-style unique/index
213       indices when nothing is given in the read.
214
215       Perhaps pretty_read should eval column types so that we can use DBI
216       qw(:sql_types) here instead of externally.
217
218       Need to support "using" index attribute in pretty_read and in reverse
219       engineering
220
221       perhaps we should just get rid of pretty_read entirely.  pretty_print
222       is useful for debugging, but pretty_read is pretty bunk.
223
224       sql CREATE TABLE output should convert integers (i.e. use DBI
225       qw(:sql_types);) to local types using DBI->type_info plus a hash to
226       fudge things
227

SEE ALSO

229       DBIx::DBSchema::Table, DBIx::DBSchema::Index, DBIx::DBSchema::Column,
230       DBIx::DBSchema::DBD, DBIx::DBSchema::DBD::mysql,
231       DBIx::DBSchema::DBD::Pg, FS::Record, DBI
232

POD ERRORS

234       Hey! The above document had some coding errors, which are explained
235       below:
236
237       Around line 429:
238           =cut found outside a pod block.  Skipping to next block.
239
240
241
242perl v5.12.1                      2010-03-27                       DBSchema(3)
Impressum