From: Ken Youens-Clark Date: Fri, 22 Aug 2003 22:48:20 +0000 (+0000) Subject: Corrected the docs a bit (no more data structure to pass around!), but X-Git-Tag: v0.04~229 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b015e9ff76ce2bbfc866934295e66ec8c429c98b;p=dbsrgits%2FSQL-Translator.git Corrected the docs a bit (no more data structure to pass around!), but still need to expand a bit. --- diff --git a/lib/SQL/Translator/Parser.pm b/lib/SQL/Translator/Parser.pm index 1e8a655..5dc23a0 100644 --- a/lib/SQL/Translator/Parser.pm +++ b/lib/SQL/Translator/Parser.pm @@ -1,11 +1,11 @@ package SQL::Translator::Parser; # ---------------------------------------------------------------------- -# $Id: Parser.pm,v 1.6 2003-01-27 17:04:44 dlc Exp $ +# $Id: Parser.pm,v 1.7 2003-08-22 22:48:20 kycl4rk Exp $ # ---------------------------------------------------------------------- # Copyright (C) 2003 Ken Y. Clark , # darren chamberlain , -# Chris Mungall +# Chris Mungall . # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -24,7 +24,7 @@ package SQL::Translator::Parser; use strict; use vars qw( $VERSION ); -$VERSION = sprintf "%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/; sub parse { "" } @@ -39,7 +39,7 @@ sub parse { "" } =head1 NAME -SQL::Translator::Parser - base object for parsers +SQL::Translator::Parser - describes how to write a parser =head1 DESCRIPTION @@ -50,122 +50,17 @@ $tr is a SQL::Translator instance. Other than that, the classes are free to define any helper functions, or use any design pattern internally that make the most sense. -=head1 FORMAT OF THE DATA STRUCTURE - -The data structure returned from the B function has a very -particular format. - -=over 4 - -=item o - -The data structure should be a reference to a hash, the keys of which -are table names. - -=item o - -The values associated with each table should also be a reference to a -hash. This hash should have several keys, enumerated below. - -=back - -=over 15 - -=item B - -This is the type of the table, if applicable, as a string, or undef if not (for -example, if the database does not have multiple options). For MySQL, -this value might include MyISAM, HEAP, or similar. - -=item B - -The indices keys is a reference to an array of hashrefs. Each hashref -defines one index, and has the keys 'name' (if defined, it will be a -string), 'type' (a string), and 'fields' (a reference to another -array). For example, a table in a MySQL database with two indexes, -created as: - - PRIMARY KEY (id), - KEY foo_idx (foo), - KEY foo_bar_idx (foo, bar), - -would be described in the indices element as: - - [ - { - 'type' => 'primary_key', - 'fields' => [ - 'id' - ], - 'name' => undef, - }, - { - 'type' => 'normal', - 'fields' => [ - 'foo' - ], - 'name' => 'foo_idx', - }, - { - 'type' => 'normal', - 'fields' => [ - 'foo', - 'bar', - ], - 'name' => 'foo_bar_idx', - }, - ] - -=item B - -The fields element is a refernce to a hash; the keys of this hash are -the row names from the table, and each value fills in this template: - - { - type => 'field', - order => 1, # the order in the original table - name => '', # same as the key - data_type => '', # in the db's jargon, - # i.e., MySQL => int, Oracale => INTEGER - size => '', # int - null => 1 | 0, # boolean - default => '', - is_auto_inc => 1 1 0, # boolean - is_primary_key => 1 | 0, # boolean - } - -So a row defined as: - - username CHAR(8) NOT NULL DEFAULT 'nobody', - KEY username_idx (username) - -would be represented as: - - 'fields => { - 'username' => { - type => 'field', - order => 1, - name => 'username', - data_type => 'char', - size => '8', - null => undef, - default => 'nobody', - is_auto_inc => undef, - is_primary_key => undef, - }, - }, - 'indices' => [ - { - 'name' => 'username_idx', - 'fields' => [ - 'username' - ], - 'type' => 'normal', - }, - ], - -=back +When the parser has determined what exists, it will communicate the +structure to the producer through the SQL::Translator::Schema object. +This object can be retrieved from the translator (the first argument +pass to B) by calling the B method: + my $schema = $tr->schema; + +The Schema object has methods for adding tables, fields, indices, etc. +For more information, consult the docs for SQL::Translator::Schema and +its related modules. For examples of how this works, examine the +source code for existing SQL::Translator::Parser::* modules. =head1 AUTHORS @@ -174,6 +69,6 @@ darren chamberlain Edarren@cpan.orgE. =head1 SEE ALSO -perl(1). +perl(1), SQL::Translator::Schema. =cut