DB-Object

 view release on metacpan or  search on metacpan

lib/DB/Object.pm  view on Meta::CPAN

    } @found;
    return( wantarray() ? () : undef() ) if( !%$hash );
    return( wantarray() ? %$hash : $hash );
}

sub database
{
    # Read only
    return( shift->{database} );
}

sub databases { return( shift->error( "Method databases() is not implemented by driver." ) ); }

sub datatype_dict
{
    my $self = shift( @_ );
    my $class = ( ref( $self ) || $self );
    no strict 'refs';
    my $sym = $self->_get_symbol( $class => '$DATATYPES_DICT' );
    if( !defined( $sym ) )
    {
        return( $self->pass_error ) if( $self->error );
        return( $self->error( "No global variable \$DATATYPES_DICT defined in class $class" ) );
    }
    my $dict = $$sym;
    return( $self->error( "Symbol found for \$DATATYPES_DICT in class $class did not resolve into an expecxted hash reference." ) ) if( ref( $dict ) ne 'HASH' );
    if( @_ )
    {
        return( $dict->{ lc( shift( @_ ) ) } );
    }
    return( $dict );
}

# See also constant_to_datatype()
sub datatype_to_constant
{
    my $self = shift( @_ );
    my $ref = $self->datatypes || return( $self->pass_error );
    return unless( scalar( @_ ) && defined( $_[0] ) );
    return( $ref->{ lc( shift( @_ ) ) } );
}

# Returns an hash of SQL constant name to its value
sub datatypes
{
    my $self = shift( @_ );
    my $dict = $self->datatype_dict || return( $self->pass_error );
    my $ref = +{ map{ $_ => $dict->{ $_ }->{constant} } keys( %$dict ) };
    return( $ref );
}

sub disconnect($)
{
    my $self = shift( @_ );
    # my( $pack, $file, $line ) = caller();
    # print( STDERR "disconnect() called from package '$pack' in file '$file' at line '$line'.\n" );
    my $rc = $self->{dbh}->disconnect( @_ );
    return( $rc );
}

sub do($;$@)
{
    my $self = shift( @_ );
    # $rc  = $dbh->do( $statement )           || die( $dbh->errstr );
    # $rc  = $dbh->do( $statement, \%attr )   || die( $dbh->errstr );
    # $rv  = $dbh->do( $statement, \%attr, @bind_values ) || ...
    # my( $rows_deleted ) = $dbh->do( 
    # q{
    #     DELETE FROM table WHERE status = ?
    # }, undef(), 'DONE' ) || die( $dbh->errstr );
    my $query     = shift( @_ );
    my $opt_ref   = shift( @_ ) || undef();
    my $param_ref = shift( @_ ) || [];
    my $dbh = $self->can( 'database_object' ) ? $self->database_object : $self;
    $dbh or return( $self->error( "Could not find database handler." ) );
    my $sth = $dbh->prepare( $query, $opt_ref ) || 
        return( $self->error( "Error while preparing do query:\n$query", $dbh->errstr() ) );
    $sth->execute( @$param_ref ) || 
        return( $self->error( "Error while executing do query:\n$query", $sth->errstr() ) );
    # my $rows = $sth->rows();
    # return( ( $rows == 0 ) ? "0E0" : $rows );
    return( $sth );
}

sub driver { return( shift->_set_get( 'driver' ) ); }

sub enhance
{
    my $self = shift( @_ );
    my $prev = $self->{enhance};
    $self->{enhance} = shift( @_ ) if( @_ );
    return( $prev );
}

sub err(@)
{
    my $self = shift( @_ );
    # $rv = $h->err;
    if( defined( $self->{sth} ) )
    {
        return( $self->{sth}->err() );
    }
    elsif( $self->{dbh} )
    {
        return( $self->{dbh}->err() );
    }
    #else
    #{
        # return( $self->{ 'drh' }->err() );
    # return( DBI::err();
    #}
}

sub errno
{
    goto( &err );
}

sub errmesg
{
    goto( &errstr );



( run in 0.591 second using v1.01-cache-2.11-cpan-5b529ec07f3 )