<Warn priority="low">
  <warning class="Off Topic"/>
  <warning class="Long"/>
</Warn>

I'm not exactly sure where to send this, but here it goes:
Has anyone completed/started an abstract database class at all?  I've written some for 
very specific applications, but I want a more general-purpose tool.  I'm about to 
start development on one, but wanted to get feedback from the world-at-large to see 
what features you would want first (or if anyone has already started one).

The classes I've created/used before, are like:
my $order = new Order( oid => '1234567' );
$order->fetch();
foreach my $order_line ( $order->Lines ) {
  print $order_line->Description, $order_line->Price;
}

I'd like to interact with a database, update data, save data, etc.  without having to 
actually call any SQL code.  And, if I modify my database schema, I'd like the classes 
to automatically adapt.

The way I've done this before, is create a series of classes with AUTOLOAD subs in 
them which intercept the name of the method being called, and then updating that 
specific field in the record.

How I"d like to implement it would be to define an XML file with represents the way my 
data is structured in the database.  This way, the objects can determine when to cache 
data, and when to commit its values to the database for maximum efficiency.  An 
example could be:
<schema name="mp3_site" database="DB0" database_vendor="Oracle" 
database_version="8.1.5" username="nachbaur" password="you_wish">
    <table name="artist" primary_key="id">
        <field name="name" type="varchar" size="256" options="not null"> 
    </table>
    <table name="album" primary_key="id">
        <field name="parent_id" references="artist" options="not null"/> 
        <field name="name" type="varchar" size="256"  options="not null"/> 
        <field name="image" type="varchar" size="4000" /> 
    </table>
    <table name="track" primary_key="id">
        <field name="parent_id" references="album" options="not null"/> 
        <field name="name" type="varchar" size="256"  options="not null"/> 
        <field name="filename" type="varchar" size="4000"/> 
        <field name="filesize" type="integer"/> 
    </table>
</schema>

Now, obviously thats not that perfect of an example (but I"m in a hurry, 'cause I need 
to go get some coffee), but it illustrates that the class could import that XML file, 
which defines the way it should interpret data.  So, it could fetch a particular 
record, and depending on how you tell it to operate, it could suck down all the data 
that the inital record refers to, or could retrieve it as-needed.

It may not operate as efficiently as possible by default, but would give much more 
flexibility to the programmer.  I know that when I'm lazy, I don't want to bind all my 
values, and make sure I'm using optimized SQL statements (explain plan, and that sorta 
thing).  With this, I could "pre-define" SQL statements in this XML file that are 
pre-optimized, and I can just say:
$db->run('do_really_scarry_join', %options);

Sory for the long message.  Would anyone like a module like this, or would I be just 
wasting my time? Anyone already have something like this?  Any feedback would be 
appreciated (except flames and spam).

--man
Michael A. Nachbaur (KE6WIA)
mike(at)nachbaur(dot)com
http://www.nachbaur.com
"Only two things are infinite, the universe and human stupidity, and I'm not sure 
about the former." - Albert Einstein


Reply via email to