Showing 4 changed files with 26 additions and 14 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.2108
2
+  - select method can be called even if table name is not specified
1 3
 0.2108
2 4
   - added async database access support using AnyEvent
3 5
     and added "async" option to execute method(EXPERIMENTAL)
+15 -12
lib/DBIx/Custom.pm
... ...
@@ -1,7 +1,7 @@
1 1
 package DBIx::Custom;
2 2
 use Object::Simple -base;
3 3
 
4
-our $VERSION = '0.2108';
4
+our $VERSION = '0.2109';
5 5
 use 5.008001;
6 6
 
7 7
 use Carp 'croak';
... ...
@@ -616,8 +616,9 @@ sub execute {
616 616
       poll => 'r',
617 617
       cb   => sub {
618 618
         $cb->($self, $result);
619
-        $watcher = undef;
620
-        $result =undef;
619
+        undef $watcher;
620
+        undef $result;
621
+        undef $cb;
621 622
       },
622 623
     );
623 624
   }
... ...
@@ -959,13 +960,16 @@ sub select {
959 960
   my $self = shift;
960 961
   my $column = shift if @_ % 2;
961 962
   my %opt = @_;
963
+  $opt{statement} = 'select';
962 964
   $opt{column} = $column if defined $column;
963 965
 
964 966
   # Options
967
+  my $table_is_empty;
965 968
   my $tables = ref $opt{table} eq 'ARRAY' ? $opt{table}
966 969
     : defined $opt{table} ? [$opt{table}]
967 970
     : [];
968 971
   $opt{table} = $tables;
972
+  $table_is_empty = 1 unless @$tables;
969 973
   my $where_param = $opt{where_param} || delete $opt{param} || {};
970 974
   warn "select method where_param option is DEPRECATED!"
971 975
     if $opt{where_param};
... ...
@@ -1000,13 +1004,17 @@ sub select {
1000 1004
         
1001 1005
         $column = join(' ', $column->[0], 'as', $self->q($column->[1]));
1002 1006
       }
1003
-      unshift @$tables, @{$self->_search_tables($column)};
1007
+      unshift @$tables, @{$self->_search_tables($column)}
1008
+        unless $table_is_empty;
1004 1009
       $sql .= "$column, ";
1005 1010
     }
1006 1011
     $sql =~ s/, $/ /;
1007 1012
   }
1008 1013
   else { $sql .= '* ' }
1009
-  
1014
+
1015
+  # Execute query without table
1016
+  return $self->execute($sql, {}, %opt) if $table_is_empty;
1017
+
1010 1018
   # Table
1011 1019
   $sql .= 'from ';
1012 1020
   if ($opt{relation}) {
... ...
@@ -1018,8 +1026,6 @@ sub select {
1018 1026
   }
1019 1027
   else { $sql .= $self->q($tables->[-1] || '') . ' ' }
1020 1028
   $sql =~ s/, $/ /;
1021
-  croak "select method table option must be specified " . _subname
1022
-    unless defined $tables->[-1];
1023 1029
 
1024 1030
   # Add tables in parameter
1025 1031
   unshift @$tables,
... ...
@@ -1027,7 +1033,7 @@ sub select {
1027 1033
   
1028 1034
   # Where
1029 1035
   my $w = $self->_where_clause_and_param($opt{where}, $where_param,
1030
-    delete $opt{id}, $opt{primary_key}, $tables->[-1]);
1036
+    delete $opt{id}, $opt{primary_key}, @$tables ? $tables->[-1] : undef);
1031 1037
   
1032 1038
   # Add table names in where clause
1033 1039
   unshift @$tables, @{$self->_search_tables($w->{clause})};
... ...
@@ -1043,10 +1049,7 @@ sub select {
1043 1049
     if $opt{relation};
1044 1050
   
1045 1051
   # Execute query
1046
-  $opt{statement} = 'select';
1047
-  my $result = $self->execute($sql, $w->{param}, %opt);
1048
-  
1049
-  $result;
1052
+  return $self->execute($sql, $w->{param}, %opt);
1050 1053
 }
1051 1054
 
1052 1055
 sub setup_model {
+2 -2
t/common.t
... ...
@@ -1979,8 +1979,8 @@ is($dbi->{_tags}->{b}->(), 2);
1979 1979
 
1980 1980
 test 'table not specify exception';
1981 1981
 $dbi = DBIx::Custom->connect;
1982
-eval {$dbi->select};
1983
-like($@, qr/table/);
1982
+eval {$dbi->select($key1)};
1983
+ok($@);
1984 1984
 
1985 1985
 test 'more tests';
1986 1986
 $dbi = DBIx::Custom->connect;
+7
t/sqlite.t
... ...
@@ -385,3 +385,10 @@ $result = $dbi->select(
385 385
   ]
386 386
 );
387 387
 is_deeply($result->all, [{"table2.key3" => 4}]);
388
+
389
+test 'select table nothing';
390
+eval { $dbi->execute('drop table table1') };
391
+eval { $dbi->select('key1') };
392
+ok($@);
393
+$result = $dbi->select('3');
394
+is($result->fetch_one->[0], 3);