package DBIx::DataSource::Pg;

use strict;
use vars qw($VERSION @ISA);
use DBIx::DataSource::Driver;
@ISA = qw( DBIx::DataSource::Driver );

$VERSION = '0.02';

=head1 NAME

DBIx::DataSource::Pg - PostgreSQL driver for DBIx::DataSource

=head1 SYNOPSIS

  use DBIx::DataSource;

  use DBIx::DataSource qw( create_database drop_database );

  create_database( "dbi:Pg:dbname=$dbname", $username, $password )
    or warn $DBIx::DataSource::errstr;

  create_database( "dbi:Pg:dbname=$dbname;host=$host;port=$port",
                   $username, $password )
    or warn $DBIx::DataSource::errstr;

  drop_database( "dbi:Pg:dbname=$dbname", $username, $password )
    or warn $DBIx::DataSource::errstr;

  drop_database( "dbi:Pg:dbname=$dbname;host=$host;port=$port",
                  $username, $password )
    or warn $DBIx::DataSource::errstr;

=head1 DESCRIPTION

This is the PostgresSQL driver for DBIx::DataSource.

=cut

sub parse_dsn {
  my( $class, $action, $dsn ) = @_;
  $dsn =~ s/^(dbi:(\w*?)(?:\((.*?)\))?:)//i #nicked from DBI->connect
                        or '' =~ /()/; # ensure $1 etc are empty if match fails
  my $prefix = $1 or die "can't parse data source: $dsn";

  my $database;
  if ( $dsn =~ s/(^|[;:])dbname=([^=:;]+)([;:]|$)/$1dbname=template1$3/ ) {
    $database = $2;
    die "Pg database names must be lowercase\n" if $database ne lc($database);
  } else {
    die "can't parse data source: $prefix$dsn";
  }

  ( "$prefix$dsn", "\U$action\E DATABASE $database" );
}

=head1 AUTHOR

Ivan Kohler <ivan-dbix-datasource@420.am>

=head1 COPYRIGHT

Copyright (c) 2000 Ivan Kohler
Copyright (c) 2000 Mail Abuse Prevention System LLC
All rights reserved.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

=head1 BUGS

=head1 SEE ALSO

L<DBIx::DataSource::Driver>, L<DBIx::DataSource>, L<DBD::Pg>, L<DBI>

=cut 

1;

