Strip evil svn:keywords
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Parser.pm
index 6bae3b8..5c4fc09 100644 (file)
@@ -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 <kycl4rk@users.sourceforge.net>,
-#                    darren chamberlain <darren@cpan.org>
+# 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<parse> 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<type>
-
-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<indeces>
-
-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<fields>
-
-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<parse>) by calling the B<schema> 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, E<lt>kclark@logsoft.comE<gt>, darren chamberlain E<lt>darren@cpan.orgE<gt>
+Ken Y. Clark, E<lt>kclark@cpan.org<gt>, 
+darren chamberlain E<lt>darren@cpan.orgE<gt>.
 
 =head1 SEE ALSO
 
-perl(1).
+perl(1), SQL::Translator, SQL::Translator::Schema.
 
 =cut