DBIx-Fast

 view release on metacpan or  search on metacpan

lib/DBIx/Fast.pm  view on Meta::CPAN

      push @p,$skeel->{$K}->{$key};
    } else {
      $key = '=';
      push @p,$skeel->{$K};
    }

    $sql .= qq{$K $key ? };
  }

  $sql =~ s/,$//;

  $self->sql($self->sql.$sql);
  $self->p(\@p);
}

sub execute {
  my $self = shift;
  my $sql  = shift;
  my $extra = shift;
  my $type  = shift // 'arrayref';
  my $res;

  $self->sql($sql);

  ## Extra Arguments
  $self->make_sen($extra) if $extra;

  if ( $type eq 'hash' ) {
    my $sth = $self->db->dbh->prepare($self->sql);
    if ( $self->p ) {
      $sth->execute(@{$self->p});
    } else {
      $sth->execute;
    }
    $res = $sth->fetchrow_hashref;
  } else {
    if ($self->p ) {
      $res = $self->db->dbh->selectall_arrayref($self->sql,
						{ Slice => {} },@{$self->p});
    } else {
      $res = $self->db->dbh->selectall_arrayref($self->sql,
						{ Slice => {} } );
    }
  }

  $self->Exception("execute()") if $DBI::err;

  $self->results($res);
}

sub up {
  my ($self,$table,$data,$where,$time) = @_;

  if ( $time ) {
    $self->update( $self->TableName($table) , { sen => $data , where => $where } , time => $time );
  } else {
    $self->update( $self->TableName($table) , { sen => $data , where => $where } );
  }
}

sub update {
  my $self  = shift;
  my $table = $self->TableName(shift);
  my $skeel = shift;

  $skeel->{sen} = $self->extra_args($skeel->{sen},@_) if scalar @_ > 0;

  my @p;
  my $sql = "UPDATE $table SET ";

  for ( keys %{$skeel->{sen}} ) {
    push @p,$skeel->{sen}->{$_};
    $sql .= $_.' = ? ,';
  }

  $sql =~ s/,$//;
  $sql .= 'WHERE ';

  for my $K ( keys %{$skeel->{where}} ) {
    push @p,$skeel->{where}->{$K};
    $sql .= $K.' = ? AND ';
  }

  $sql =~ s/AND $//;

  $self->sql($sql);
  $self->execute_prepare(@p);
}

sub insert {
  my $self  = shift;
  my $table = $self->TableName(shift);
  my $skeel = shift;

  $skeel = $self->extra_args($skeel,@_) if scalar @_ > 0;

  my @p;
  my $sql= "INSERT INTO $table ( ";

  for ( keys %{$skeel} ) {
    push @p,$skeel->{$_};
    $sql .= $_.',';
  }

  $sql =~ s/,$/ )/;
  $sql .= ' VALUES ( '.join(',', ('?') x @p).' )';

  $self->sql($sql);
  $self->execute_prepare(@p);

  if ( $self->dbd eq 'MariaDB' ) {
    $self->last_id($self->db->dbh->{mariadb_insertid});
  } elsif ( $self->dbd eq 'mysql' ) {
    $self->last_id($self->db->dbh->{mysql_insertid});
  } elsif ( $self->dbd eq 'SQLite' ) {
    $self->last_id($self->db->dbh->sqlite_last_insert_rowid());
  } elsif ( $self->dbd eq 'Pg' ) {
    $self->last_id($self->db->dbh->last_insert_id(undef,undef,$table,undef));
  }
}



( run in 1.012 second using v1.01-cache-2.11-cpan-13bb782fe5a )