Changeset 559
- Timestamp:
- 01/24/09 00:30:59 (10 months ago)
- Location:
- trunk/lib/Data/ObjectDriver/Driver
- Files:
-
- 1 added
- 1 modified
-
DBI.pm (modified) (6 diffs)
-
GearmanDBI.pm (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/Data/ObjectDriver/Driver/DBI.pm
r552 r559 119 119 } 120 120 121 sub fetch {122 my $driver = shift; 123 my($ rec, $class, $orig_terms, $orig_args) = @_;121 sub prepare_fetch { 122 my $driver = shift; 123 my($class, $orig_terms, $orig_args) = @_; 124 124 125 125 ## Use (shallow) duplicates so the pre_search trigger can modify them. … … 130 130 my $stmt = $driver->prepare_statement($class, $terms, $args); 131 131 132 my $sql = $stmt->as_sql; 133 $sql .= "\nFOR UPDATE" if $orig_args->{for_update}; 134 return ($sql, $stmt->{bind}, $stmt) 135 } 136 137 sub fetch { 138 my $driver = shift; 139 my($rec, $class, $orig_terms, $orig_args) = @_; 140 141 my ($sql, $bind, $stmt) = $driver->prepare_fetch($class, $orig_terms, $orig_args); 142 132 143 my @bind; 133 144 my $map = $stmt->select_map; … … 136 147 } 137 148 138 my $sql = $stmt->as_sql;139 $sql .= "\nFOR UPDATE" if $orig_args->{for_update};140 149 my $dbh = $driver->r_handle($class->properties->{db}); 141 150 $driver->start_query($sql, $stmt->{bind}); 151 142 152 my $sth = $orig_args->{no_cached_prepare} ? $dbh->prepare($sql) : $driver->_prepare_cached($dbh, $sql); 143 153 $sth->execute(@{ $stmt->{bind} }); … … 145 155 146 156 # need to slurp 'offset' rows for DBs that cannot do it themselves 147 if (!$driver->dbd->offset_implemented && $ args->{offset}) {148 for (1..$ args->{offset}) {157 if (!$driver->dbd->offset_implemented && $orig_args->{offset}) { 158 for (1..$orig_args->{offset}) { 149 159 $sth->fetch; 150 160 } … … 152 162 153 163 return $sth; 164 } 165 166 sub load_object_from_rec { 167 my $driver = shift; 168 my ($class, $rec, $no_triggers) = @_; 169 170 my $obj = $class->new; 171 $obj->set_values_internal($rec); 172 ## Don't need a duplicate as there's no previous version in memory 173 ## to preserve. 174 $obj->{__is_stored} = 1; 175 $obj->call_trigger('post_load') unless $no_triggers; 176 return $obj; 154 177 } 155 178 … … 172 195 return; 173 196 } 174 my $obj; 175 $obj = $class->new; 176 $obj->set_values_internal($rec); 177 ## Don't need a duplicate as there's no previous version in memory 178 ## to preserve. 179 $obj->{__is_stored} = 1; 180 $obj->call_trigger('post_load') unless $args->{no_triggers}; 181 $obj; 197 return $driver->load_object_from_rec($class, $rec, $args->{no_triggers}); 182 198 }; 183 199
