DB-Object
view release on metacpan or search on metacpan
lib/DB/Object/Tables.pm view on Meta::CPAN
return( $self->{reverse} );
}
sub stat
{
my $self = shift( @_ );
my $class = ref( $self );
return( $self->error( "stat() is not implemented by $class." ) );
}
# sub structure must be superseded by sub classes
sub structure
{
my $self = shift( @_ );
my $class = ref( $self );
return( $self->error( "structure() is not implemented by $class." ) );
}
sub table { return( shift->{table} ); }
sub tie
{
my $self = shift( @_ );
my $q = $self->_reset_query;
return( $q->tie( @_ ) );
}
sub type { return( shift->_set_get_scalar( 'type', @_ ) ); }
sub types
{
my $self = shift( @_ );
$self->structure || return( $self->pass_error );
# my $types = $self->{types};
my $fields = $self->fields;
my $types = +{ map{ $_ => $fields->{ $_ }->type } keys( %$fields ) };
# return( $self->_clone( $types ) );
return( $types );
}
sub types_const
{
my $self = shift( @_ );
$self->structure || return( $self->pass_error );
my $fields = $self->fields;
# my $types = $self->{types_const};
my $types = +{ map{ $_ => $fields->{ $_ }->datatype } keys( %$fields ) };
# return( $self->_clone( $types ) );
return( $types );
}
sub unlock
{
my $self = shift( @_ );
my $class = ref( $self );
return( $self->error( "unlock() is not implemented by $class." ) );
}
sub unix_timestamp { return( shift->_method_to_query( 'unix_timestamp', @_ ) ); }
sub update
{
my $self = shift( @_ );
my $q = $self->_reset_query;
# If the user wants to execute this, then we reset the query,
# but if the user wants to call other methods chained like as_string we don't do anything
# CORE::delete( $self->{query_reset} ) if( !defined( wantarray() ) );
if( want('VOID') || want('OBJECT') )
{
CORE::delete( $self->{query_reset} ) if( want('VOID') );
# return( $q->select( @_ ) );
# return( $q->select( @_ ) ) if( !defined( wantarray() ) );
return( $q->update( @_ ) );
}
# CORE::delete( $self->{query_reset} ) if( !defined( wantarray() ) );
# return( $q->update( @_ ) );
# return( $q->update( @_ ) ) if( !defined( wantarray() ) );
if( wantarray() )
{
my( @val ) = $q->update( @_ ) || return( $self->pass_error( $q->error ) );
$self->reset;
return( @val );
}
else
{
my $val = $q->update( @_ ) || return( $self->pass_error( $q->error ) );
$self->reset;
return( $val );
}
}
sub where { return( shift->_method_to_query( 'where', @_ ) ); }
sub _method_to_query
{
my $self = shift( @_ );
my $meth = shift( @_ );
my $q = $self->_reset_query;
my $code = $q->can( $meth ) || return( $self->error( "Query class '", ref( $q ), "' has no method '$meth'." ) );
my $rv = $code->( $q, @_ );
return( $self->pass_error( $q->error ) ) if( !defined( $rv ) && $q->error );
return( $rv );
}
sub AUTOLOAD
{
my( $method ) = our $AUTOLOAD =~ /([^:]+)$/;
no overloading;
my $self = shift( @_ );
my $fields = $self->fields;
# User called a field on a table object, instead of using the method fields_object or its shortcut 'fo'
if( CORE::exists( $fields->{ $method } ) )
{
warn( "You have called a field name '$method' using a table object. This practice is discouraged, although it works for now. Best to use something like: \$tbl->fo->$method rather than just \$tbl->$method\n" );
return( $self->fields_object->_initiate_field_object( $method ) );
}
else
{
warn( "You called table '", $self->name, "' object \$tbl->$method, but no such method exist.\n" );
return( $self->error( "You called table '", $self->name, "' object \$tbl->$method, but no such method exist." ) );
}
( run in 0.858 second using v1.01-cache-2.11-cpan-39bf76dae61 )