Remove all expansion $XX tags (isolated commit, easily revertable)
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Parser / DBI / PostgreSQL.pm
index 22ee543..f256a77 100644 (file)
@@ -1,9 +1,7 @@
 package SQL::Translator::Parser::DBI::PostgreSQL;
 
 # -------------------------------------------------------------------
-# $Id: PostgreSQL.pm,v 1.8 2005-10-06 20:33:07 scottcain Exp $
-# -------------------------------------------------------------------
-# Copyright (C) 2002-4 SQLFairy Authors
+# 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
@@ -40,7 +38,7 @@ use Data::Dumper;
 use SQL::Translator::Schema::Constants;
 
 use vars qw[ $DEBUG $VERSION @EXPORT_OK ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.8 $ =~ /(\d+)\.(\d+)/;
+$VERSION = '1.99';
 $DEBUG   = 0 unless defined $DEBUG;
 
 # -------------------------------------------------------------------
@@ -88,15 +86,18 @@ sub parse {
 
         while (my $columnhash = $column_select->fetchrow_hashref ) {
 
-            $table->add_field(
+            #data_type seems to not be populated; perhaps there needs to 
+            #be a mapping of query output to reserved constants in sqlt?
+
+            my $col = $table->add_field(
                               name        => $$columnhash{'attname'},
                               default_value => $$columnhash{'adsrc'},
-                              data_type   => $$columnhash{'typename'},
+                              data_type   => $$columnhash{'typname'},
                               order       => $$columnhash{'attnum'},
-                              size        => $$columnhash{'length'},
-                              nullable    => $$columnhash{'attnotnull'} eq 't'
-                                                ? 0 : 1,
                              ) || die $table->error;
+
+            $col->{size} = [$$columnhash{'length'}] if $$columnhash{'length'}>0;
+            $col->{is_nullable} = $$columnhash{'attnotnull'} ? 0 : 1;
         }
 
         $index_select->execute($table_oid);
@@ -108,9 +109,14 @@ sub parse {
                      or !defined($$indexhash{'indkey'}) );
 
             my $type;
-            if      ($$indexhash{'indisprimary'} eq 't') {
-                $type = PRIMARY_KEY;
-            } elsif ($$indexhash{'indisunique'}  eq 't') {
+            if      ($$indexhash{'indisprimary'}) {
+                $type = UNIQUE; #PRIMARY_KEY;
+
+                #tell sqlt that this is the primary key:
+                my $col_name=$column_names[($$indexhash{'indkey'} - 1)];
+                $table->get_field($col_name)->{is_primary_key}=1;
+
+            } elsif ($$indexhash{'indisunique'}) {
                 $type = UNIQUE;    
             } else {
                 $type = NORMAL;
@@ -125,7 +131,7 @@ sub parse {
             $table->add_index(
                               name         => $$indexhash{'relname'},
                               type         => $type,
-                              fields       => @columns,
+                              fields       => \@columns,
                              ) || die $table->error;
         }
     }