Cursor.pm because I'm an idiot and forgot to svk add it last time
Matt S Trout [Sun, 31 Jul 2005 22:25:34 +0000 (22:25 +0000)]
lib/DBIx/Class/Cursor.pm [new file with mode: 0644]

diff --git a/lib/DBIx/Class/Cursor.pm b/lib/DBIx/Class/Cursor.pm
new file mode 100644 (file)
index 0000000..d492ebb
--- /dev/null
@@ -0,0 +1,53 @@
+package DBIx::Class::Cursor;
+
+use strict;
+use warnings;
+use overload
+        '0+'     => 'count',
+        fallback => 1;
+
+sub new {
+  my ($it_class, $db_class, $sth, $args, $cols) = @_;
+  $sth->execute(@{$args || []}) unless $sth->{Active};
+  my $new = {
+    class => $db_class,
+    sth => $sth,
+    cols => $cols,
+    args => $args };
+  return bless ($new, $it_class);
+}
+
+sub next {
+  my ($self) = @_;
+  my @row = $self->{sth}->fetchrow_array;
+  return unless @row;
+  #unless (@row) { $self->{sth}->finish; return; }
+  return $self->{class}->_row_to_object($self->{cols}, \@row);
+}
+
+sub count {
+  return scalar $_[0]->all; # So inefficient
+}
+
+sub all {
+  my ($self) = @_;
+  $self->reset;
+  my @all;
+  while (my $obj = $self->next) {
+    push(@all, $obj);
+  }
+  $self->reset;
+  return @all;
+}
+
+sub reset {
+  $_[0]->{sth}->finish if $_[0]->{sth}->{Active};
+  $_[0]->{sth}->execute(@{$_[0]->{args} || []});
+  return $_[0];
+}
+
+sub first {
+  return $_[0]->reset->next;
+}
+
+1;