5a8ef4eb670d50e5216c2dbe9f897a4cb7fac15d
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Parts.pm
1 package SQL::Abstract::Parts;
2
3 use Module::Runtime ();
4 use Scalar::Util ();
5 use strict;
6 use warnings;
7
8 use overload '""' => 'stringify', fallback => 1;
9
10 sub new {
11   my ($proto, $join, @parts) = @_;
12   bless([
13     $join, map Scalar::Util::blessed($_) ? [ @$_ ] : $_, @parts
14   ], ref($proto) || $proto);
15 }
16
17 sub stringify {
18   my ($self) = @_;
19 ::Dwarn([ STR => $self ]);
20   my ($join, @parts) = @$self;
21   return join($join, map +(ref() ? stringify($_) : $_), @parts);
22 }
23
24 sub to_array { return @{$_[0]} }
25
26 sub formatter {
27   my ($self, %opts) = @_;
28   Module::Runtime::use_module('SQL::Abstract::Formatter')
29     ->new(%opts)
30 }
31
32 sub format {
33   my ($self, %opts) = @_;
34   $self->formatter(%opts)
35        ->format($self->to_array);
36 }
37
38 1;