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 )