improving formatting
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Parts.pm
index 95f7069..dc8f25c 100644 (file)
@@ -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;