File Coverage

blib/lib/Metabase/Backend/PostgreSQL.pm
Criterion Covered Total %
statement 14 29 48.2
branch 0 2 0.0
condition n/a
subroutine 5 14 35.7
pod n/a
total 19 45 42.2


line stmt bran cond sub pod time code
1 3     3   1452 use 5.008001;
  3         7  
2 3     3   13 use strict;
  3         4  
  3         53  
3 3     3   7 use warnings;
  3         2  
  3         121  
4              
5             package Metabase::Backend::PostgreSQL;
6             # ABSTRACT: Metabase backend implemented using PostgreSQL
7              
8             our $VERSION = '1.001';
9              
10 3     3   11 use Moose::Role;
  3         3  
  3         27  
11 3     3   10119 use namespace::autoclean;
  3         34  
  3         28  
12              
13             with 'Metabase::Backend::SQL';
14              
15             has db_name => (
16             is => 'ro',
17             isa => 'Str',
18             required => 1,
19             );
20              
21             sub _build_dsn {
22 0     0     my $self = shift;
23 0           return "dbi:Pg:dbname=" . $self->db_name;
24             }
25              
26 0     0     sub _build_db_user { return "" }
27              
28 0     0     sub _build_db_pass { return "" }
29              
30 0     0     sub _build_db_type { return "PostgreSQL" }
31              
32             sub _fixup_sql_diff {
33 0     0     my ($self, $diff) = @_;
34             # Strip DROP INDEX
35 0           $diff =~ s/DROP INDEX .*;//mg;
36             # Strip ALTER TABLES constraint drops
37 0           $diff =~ s/ALTER TABLE \S+ ADD CONSTRAINT.*;//mg;
38 0           return $diff;
39             }
40              
41             around _build_dbis => sub {
42             my $orig = shift;
43             my $self = shift;
44             my $dbis = $self->$orig;
45             $dbis->abstract = SQL::Abstract->new(
46             quote_char => q{"},
47             );
48             return $dbis;
49             };
50              
51             sub _build__blob_field_params {
52             return {
53 0     0     data_type => 'text'
54             };
55             }
56              
57             sub _build__guid_field_params {
58             return {
59 0     0     data_type => 'uuid'
60             }
61             }
62              
63             my $hex = qr/[0-9a-f]/i;
64             sub _munge_guid {
65 0     0     my ($self, $guid) = @_;
66 0 0         $guid = "00000000-0000-0000-0000-000000000000"
67             unless $guid =~ /${hex}{8}-${hex}{4}-${hex}{4}-${hex}{4}-${hex}{12}/;
68 0           return $guid;
69             }
70              
71 0     0     sub _unmunge_guid { lc return $_[1] }
72              
73             1;
74              
75              
76             # vim: ts=2 sts=2 sw=2 et:
77              
78             __END__
79              
80             =pod
81              
82             =encoding UTF-8
83              
84             =head1 NAME
85              
86             Metabase::Backend::PostgreSQL - Metabase backend implemented using PostgreSQL
87              
88             =head1 VERSION
89              
90             version 1.001
91              
92             =head1 SYNOPSIS
93              
94             use Metabase::Archive::PostgreSQL;
95             use Metabase::Index::PostgreSQL;
96              
97             my $archive = Metabase::Archive::PostgreSQL->new(
98             db_name => "cpantesters",
99             db_user => "johndoe",
100             db_pass => "PaSsWoRd",
101             );
102              
103             my $index = Metabase::Index::PostgreSQL->new(
104             db_name => "cpantesters",
105             db_user => "johndoe",
106             db_pass => "PaSsWoRd",
107             );
108              
109             =head1 DESCRIPTION
110              
111             This distribution provides a backend for L<Metabase> using PostgreSQL. There
112             are two modules included, L<Metabase::Index::PostgreSQL> and
113             L<Metabase::Archive::PostgreSQL>. They can be used separately or together (see
114             L<Metabase::Librarian> for details).
115              
116             The L<Metabase::Backend::PostgreSQL> module is a L<Moose::Role> that provides
117             common attributes and private helpers and is not intended to be used directly.
118              
119             Common attributes are described further below.
120              
121             =head1 ATTRIBUTES
122              
123             =head2 db_name
124              
125             Database name
126              
127             =head2 db_user
128              
129             Database username
130              
131             =head2 db_pass
132              
133             Database password
134              
135             =for Pod::Coverage method_names_here
136              
137             =head1 AUTHORS
138              
139             =over 4
140              
141             =item *
142              
143             David Golden <dagolden@cpan.org>
144              
145             =item *
146              
147             Leon Brocard <acme@astray.org>
148              
149             =back
150              
151             =head1 COPYRIGHT AND LICENSE
152              
153             This software is Copyright (c) 2011 by David Golden.
154              
155             This is free software, licensed under:
156              
157             The Apache License, Version 2.0, January 2004
158              
159             =cut