X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser.pm;h=f720e616945fc409d49ca723a2f04f40fa0de4b4;hb=fae069ed2441440c3a8134cf775bd332c61746fe;hp=e86fe3760167b3e8f77236fcb533bb0f97180ce3;hpb=49e1eb709441c5d265257c6da78f5de83d0a6114;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser.pm b/lib/SQL/Translator/Parser.pm index e86fe37..f720e61 100644 --- a/lib/SQL/Translator/Parser.pm +++ b/lib/SQL/Translator/Parser.pm @@ -1,10 +1,9 @@ package SQL::Translator::Parser; # ---------------------------------------------------------------------- -# $Id: Parser.pm,v 1.4 2002-11-20 04:03:03 kycl4rk Exp $ +# $Id: Parser.pm,v 1.9 2004-02-09 23:04:26 kycl4rk Exp $ # ---------------------------------------------------------------------- -# Copyright (C) 2002 Ken Y. Clark , -# darren chamberlain +# Copyright (C) 2002-4 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -23,7 +22,7 @@ package SQL::Translator::Parser; use strict; use vars qw( $VERSION ); -$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.9 $ =~ /(\d+)\.(\d+)/; sub parse { "" } @@ -38,7 +37,7 @@ sub parse { "" } =head1 NAME -SQL::Translator::Parser - base object for parsers +SQL::Translator::Parser - describes how to write a parser =head1 DESCRIPTION @@ -49,130 +48,25 @@ $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 -Ken Y. Clark, Ekclark@logsoft.comE, +Ken Y. Clark, Ekclark@cpan.org, darren chamberlain Edarren@cpan.orgE. =head1 SEE ALSO -perl(1). +perl(1), SQL::Translator, SQL::Translator::Schema. =cut