Allow scalar- and arrayrefrefs in select list
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract.pm
index d30a7e3..b09ead0 100644 (file)
@@ -464,17 +464,37 @@ sub select {
   my $where  = shift;
   my $order  = shift;
 
-  my($where_sql, @bind) = $self->where($where, $order);
+  my ($fields_sql, @bind) = $self->_select_fields($fields);
 
-  my $f = (ref $fields eq 'ARRAY') ? join ', ', map { $self->_quote($_) } @$fields
-                                   : $fields;
-  my $sql = join(' ', $self->_sqlcase('select'), $f,
+  my ($where_sql, @where_bind) = $self->where($where, $order);
+  push @bind, @where_bind;
+
+  my $sql = join(' ', $self->_sqlcase('select'), $fields_sql,
                       $self->_sqlcase('from'),   $table)
           . $where_sql;
 
   return wantarray ? ($sql, @bind) : $sql;
 }
 
+sub _select_fields {
+  my ($self, $fields) = @_;
+
+  $self->_SWITCH_refkind($fields, {
+    ARRAYREF => sub { join ', ', map { $self->_quote($_) } @$fields },
+
+    ARRAYREFREF => sub {
+      my ($s, @b) = @$$fields;
+      $self->_assert_bindval_matches_bindtype(@b);
+      ($s, @b);
+    },
+
+    SCALARREF => sub { $$fields },
+
+    # For back-compat
+    SCALAR => sub { $fields },
+  });
+}
+
 #======================================================================
 # DELETE
 #======================================================================