Showing 3 changed files with 48 additions and 10 deletions
+2
Changes
... ...
@@ -1,4 +1,6 @@
1 1
 0.1686
2
+    - select() column option can receive array reference in array.
3
+      This is EXPERIMENTAL
2 4
     - select() EXPERIMETNAL column option hash format
3 5
       return table.column, not table__column
4 6
     - added EXPERIMENTAL col method.
+28 -10
lib/DBIx/Custom.pm
... ...
@@ -873,11 +873,21 @@ sub select {
873 873
     my @sql;
874 874
     push @sql, 'select';
875 875
     
876
+    # Reserved word quote
877
+    my $q = $self->reserved_word_quote;
878
+    
876 879
     # Column clause
877 880
     if ($columns) {
878 881
         $columns = [$columns] unless ref $columns eq 'ARRAY';
879 882
         foreach my $column (@$columns) {
880
-            $column = $self->col(%$column) if ref $column eq 'HASH';
883
+            if (ref $column eq 'HASH') {
884
+                $column = $self->col(%$column) if ref $column eq 'HASH';
885
+            }
886
+            elsif (ref $column eq 'ARRAY') {
887
+                croak "Format must be [COLUMN, as => ALIAS] " . _subname
888
+                  unless @$column == 3 && $column->[1] eq 'as';
889
+                $column = join(' ', $column->[0], 'as', $q . $column->[2] . $q);
890
+            }
881 891
             unshift @$tables, @{$self->_search_tables($column)};
882 892
             push @sql, ($column, ',');
883 893
         }
... ...
@@ -887,7 +897,6 @@ sub select {
887 897
     
888 898
     # Table
889 899
     push @sql, 'from';
890
-    my $q = $self->reserved_word_quote;
891 900
     if ($relation) {
892 901
         my $found = {};
893 902
         foreach my $table (@$tables) {
... ...
@@ -1635,8 +1644,7 @@ L<DBIx::Custom> is L<DBI> wrapper module.
1635 1644
 There are many basic methods to execute various queries.
1636 1645
 C<insert()>, C<update()>, C<update_all()>,C<delete()>,
1637 1646
 C<delete_all()>, C<select()>,
1638
-C<insert_at()>, C<update_at()>, 
1639
-C<delete_at()>, C<select_at()>, C<execute()>
1647
+C<execute()>
1640 1648
 
1641 1649
 =item *
1642 1650
 
... ...
@@ -2388,13 +2396,23 @@ You can specify hash reference. This is EXPERIMENTAL.
2388 2396
         {book => [qw/author title/]},
2389 2397
         {person => [qw/name age/]}
2390 2398
     ]);
2391
-    
2392
-This is expanded to the following one by C<column> method automatically.
2393 2399
 
2394
-    book.author as book__author,
2395
-    book.title as book__title,
2396
-    person.name as person__name,
2397
-    person.age as person__age
2400
+This is expanded to the following one by C<col> method automatically.
2401
+
2402
+    book.author as "book.author",
2403
+    book.title as "book.title",
2404
+    person.name as "person.name",
2405
+    person.age as "person.age"
2406
+
2407
+You can specify array reference in array refernce.
2408
+
2409
+    $dbi->select(column => [
2410
+        ['date(book.register_datetime)', as => 'book.register_date']
2411
+    ]);
2412
+
2413
+These is joined and quoted.
2414
+
2415
+    date(book.register_datetime) as "book.register_date"
2398 2416
 
2399 2417
 =item C<where>
2400 2418
 
+18
t/dbix-custom-core-sqlite.t
... ...
@@ -2125,6 +2125,24 @@ $result = $model->select_at(
2125 2125
 is_deeply($result->one,
2126 2126
           {key1 => 1, 'table2.key1' => 1});
2127 2127
 
2128
+$result = $model->select_at(
2129
+    column => [
2130
+        $model->mycolumn(['key1']),
2131
+        ['table2.key1', as => 'table2.key1']
2132
+    ]
2133
+);
2134
+is_deeply($result->one,
2135
+          {key1 => 1, 'table2.key1' => 1});
2136
+
2137
+eval{
2138
+    $result = $model->select_at(
2139
+        column => [
2140
+            ['table2.key1', asaaaa => 'table2.key1']
2141
+        ]
2142
+    );
2143
+};
2144
+like($@, qr/COLUMN/);
2145
+
2128 2146
 test 'dbi method from model';
2129 2147
 {
2130 2148
     package MyDBI9;