X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser.pm;h=5c4fc09ba3298239dab41e5df27473ecbdd99722;hb=d4f84dd192edc7a64a0b1a9923f1bafc0bc5ef9d;hp=6bae3b87236b1a7697b0d8d2c2b2eeafce9c8c13;hpb=8295a8cca61986fbccca2c381867219a9403640c;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser.pm b/lib/SQL/Translator/Parser.pm index 6bae3b8..5c4fc09 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.1.1.1.2.2 2002-03-21 15:47:08 dlc Exp $ +# $Id: Parser.pm 1440 2009-01-17 16:31:57Z jawnsy $ # ---------------------------------------------------------------------- -# Copyright (C) 2002 Ken Y. Clark , -# darren chamberlain +# Copyright (C) 2002-2009 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 @@ -22,22 +21,21 @@ package SQL::Translator::Parser; # ---------------------------------------------------------------------- use strict; -use vars qw( $VERSION ); -$VERSION = sprintf "%d.%02d", q$Revision: 1.1.1.1.2.2 $ =~ /(\d+)\.(\d+)/; sub parse { "" } 1; -#----------------------------------------------------- +# ---------------------------------------------------------------------- # Enough! or Too much. # William Blake -#----------------------------------------------------- -__END__ +# ---------------------------------------------------------------------- + +=pod =head1 NAME -SQL::Translator::Parser - base object for parsers +SQL::Translator::Parser - describes how to write a parser =head1 DESCRIPTION @@ -48,127 +46,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 indeces 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 indeces 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', - 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', - name => 'username', - data_type => 'char', - size => '8', - null => undef, - default => 'nobody', - is_auto_inc => undef, - is_primary_key => undef, - }, - }, - 'indeces' => [ - { - '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, darren chamberlain Edarren@cpan.orgE +Ken Y. Clark, Ekclark@cpan.org, +darren chamberlain Edarren@cpan.orgE. =head1 SEE ALSO -perl(1). +perl(1), SQL::Translator, SQL::Translator::Schema. =cut