X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FPostgreSQL.pm;h=47736c3dff48cb3ee1be75a84b75f0898b84fc0f;hb=44ffdb73cb42c65f11e6f1d005255fba30588fe3;hp=3281f7a59902cd105897c1df9f579a300c772067;hpb=8c12c4066e7b70bfa3aee7185f831a30d2bf9025;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Parser/PostgreSQL.pm b/lib/SQL/Translator/Parser/PostgreSQL.pm index 3281f7a..47736c3 100644 --- a/lib/SQL/Translator/Parser/PostgreSQL.pm +++ b/lib/SQL/Translator/Parser/PostgreSQL.pm @@ -1,12 +1,9 @@ package SQL::Translator::Parser::PostgreSQL; # ------------------------------------------------------------------- -# $Id: PostgreSQL.pm,v 1.36 2004-02-04 17:32:22 dlc Exp $ +# $Id: PostgreSQL.pm,v 1.39 2004-08-11 22:00:39 kycl4rk Exp $ # ------------------------------------------------------------------- -# Copyright (C) 2003 Ken Y. Clark , -# Allen Day , -# darren chamberlain , -# Chris Mungall +# 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 @@ -111,7 +108,7 @@ View table: use strict; use vars qw[ $DEBUG $VERSION $GRAMMAR @EXPORT_OK ]; -$VERSION = sprintf "%d.%02d", q$Revision: 1.36 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.39 $ =~ /(\d+)\.(\d+)/; $DEBUG = 0 unless defined $DEBUG; use Data::Dumper; @@ -258,15 +255,15 @@ create_definition : field | table_constraint | -table_comment : comment - { - my $comment = $item[1]; +comment : /^\s*(?:#|-{2})(.*)\n/ + { + my $comment = $item[1]; + $comment =~ s/^\s*(#|-*)\s*//; + $comment =~ s/\s*$//; $return = $comment; push @table_comments, $comment; } -comment : /^\s*(?:#|-{2}).*\n/ - comment_on_table : /comment/i /on/i /table/i table_name /is/i comment_phrase ';' { push @{ $tables{ $item{'table_name'} }{'comments'} }, $item{'comment_phrase'}; @@ -290,7 +287,7 @@ comment_phrase : /'.*?'|NULL/ $return = $val; } -field : comment(s?) field_name data_type field_meta(s?) comment(s?) +field : field_comment(s?) field_name data_type field_meta(s?) field_comment(s?) { my ( $default, @constraints, $is_pk ); my $is_nullable = 1; @@ -326,6 +323,14 @@ field : comment(s?) field_name data_type field_meta(s?) comment(s?) } | +field_comment : /^\s*(?:#|-{2})(.*)\n/ + { + my $comment = $item[1]; + $comment =~ s/^\s*(#|-*)\s*//; + $comment =~ s/\s*$//; + $return = $comment; + } + field_meta : default_val | column_constraint @@ -402,7 +407,9 @@ data_type : pg_data_type parens_value_list(?) # # We can deduce some sizes from the data type's name. # - $data_type->{'size'} ||= $item[2][0]; + if ( my $size = $item[2][0] ) { + $data_type->{'size'} = $size; + } $return = $data_type; } @@ -873,6 +880,8 @@ sub parse { name => $tdata->{'table_name'}, ) or die "Couldn't create table '$table_name': " . $schema->error; + $table->comments( $tdata->{'comments'} ); + my @fields = sort { $tdata->{'fields'}->{ $a }->{'order'} <=> @@ -889,6 +898,7 @@ sub parse { default_value => $fdata->{'default'}, is_auto_increment => $fdata->{'is_auto_increment'}, is_nullable => $fdata->{'is_nullable'}, + comments => $fdata->{'comments'}, ) or die $table->error; $table->primary_key( $field->name ) if $fdata->{'is_primary_key'};