X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FParts.pm;h=dc8f25c19d7498150725c202ccea1bb1df872652;hb=b3b54441ca1bfc3522c692f8f49c3a181eba7fce;hp=95f7069cd373f462779f8c81aef42a884ad1109d;hpb=b84764fb689d878da0e77c303b33816ca745d9c4;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract/Parts.pm b/lib/SQL/Abstract/Parts.pm index 95f7069..dc8f25c 100644 --- a/lib/SQL/Abstract/Parts.pm +++ b/lib/SQL/Abstract/Parts.pm @@ -1,19 +1,32 @@ package SQL::Abstract::Parts; +use Module::Runtime (); +use Scalar::Util (); use strict; use warnings; use overload '""' => 'stringify', fallback => 1; sub new { - my ($proto, @args) = @_; - bless(\@args, ref($proto) || $proto); + my ($proto, $join, @parts) = @_; + bless([ + $join, map Scalar::Util::blessed($_) ? [ @$_ ] : $_, @parts + ], ref($proto) || $proto); } sub stringify { my ($self) = @_; my ($join, @parts) = @$self; - return join $join, @parts; + return join $join, map ref() ? stringify($_) : $_, @parts; +} + +sub to_array { return @{$_[0]} } + +sub format { + my ($self, %opts) = @_; + Module::Runtime::use_module('SQL::Abstract::Formatter') + ->new(%opts) + ->format($self->to_array); } 1;