plugin registration
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Parts.pm
index 95f7069..e4a2033 100644 (file)
@@ -1,19 +1,37 @@
 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 formatter {
+  my ($self, %opts) = @_;
+  Module::Runtime::use_module('SQL::Abstract::Formatter')
+    ->new(%opts)
+}
+
+sub format {
+  my ($self, %opts) = @_;
+  $self->formatter(%opts)
+       ->format($self->to_array);
 }
 
 1;