Hello,

I'm the Net::IMAP::Simple author (JPAF)
and I would like to submit another module
to CPAN

Suggested Name: Class::DBIStruct
Development Stage: bdpO
Description: declare DBI tables as Perl classes

Class::DBIStruct is similar to Class::Struct,
but is intended for mapping database tables to
Perl objects. It helps building database APIs
that resemble perl Objects. All the usual methods
are automatically defined. You can then implement
your own methods, if needed.


You can take a look at the pod attached.

Regards,
Joao Fonseca




NAME
    Class::DBIStruct - declare DBI tables as Perl classes

SYNOPSIS
        package Person;

        use Class::DBIStruct;

        struct(
            Person => [ 'id', 'name', 'phone' ],
            Keys   => [ 'id' ]
        );

        # Your methods ...
        #
        # You can use $self->where( $dbh ) to get a where clause
        # for your queries:
        # $query = "UPDATE .... WHERE " . $self->where( $dbh )

        1;

        # The resulting class:

        package main;

        use Person;
        use DBI;

        $dbh = DBI->connect( ... );

        # Get an instance from the database
        # The cols you specify will be used in the WHERE clause of the
        # SELECT statement

        $p = new Person( $dbh, id => 1024 ) # SELECT * FROM Person WHERE id = 1024
            or die "$@";

        $p = new Person( $dbh, name => 'John' ) # SELECT * FROM Person WHERE name = 
'John'
            or die "$@";

        # Insert a new record in the database
        # You don't need do specify all columns, if they have
        # default values.
        insert Person( $dbh,
             name => 'John Doe',
             phone => '555-0000' )
        or die "$@";

        # accessors
        $id = $p->id( $dbh ) or die "$@";
        $name = $p->name( $dbh ) or die "$@";
        $phone = $p->phone( $dbh ) or die "$@";
        $id = $p->get( $dbh, 'id' ) or die "$@";
        %all = $p->get( $dbh ) or die "$@";

        # assignment
        $old_name = $p->name( $dbh, $new_name ) or die "$@";
        $old_phone = $p->phone( $dbh, $new_phone ) or die "$@";
        $old_name = $p->set( $dbh, 'name', $new_name ) or die "$@";

        # clears cached values. Further gets will fetch from the DB
        $p->clear( 'name' );
        $p->clear(); # clears all but the keys

DESCRIPTION
    Class::DBIStruct is similar to Class::Struct, but is intended
    for mapping database tables to Perl objects. It helps building
    database APIs that resemble perl Objects. All the usual methods
    are automatically defined. You can then implement your own
    methods, if needed.

    The current implementation caches the values obtained in the
    constructor. This means that the DBI handle is not used on the
    accessor methods, but you should not rely on this!

    Also, don't do this:

        $count = $obj->count( $dbh );
        $obj->count( $dbh, $count + 1 );

    This may not work as expected (increment a value on the count
    column), because someone may do an update in between. You will
    have to implement an increment method that does the update in a
    single SQL query.

    The object constructed is a reference to a hash containing
    column => value entries. You can rely on this for your specific
    method implementations.

AUTHOR
    Joao Fonseca, [EMAIL PROTECTED]

SEE ALSO
    Class::Struct(1).

Reply via email to