in reply to Re^2: Class::DBI weirdness sql error
in thread Class::DBI weirdness sql error

The words you are reading right now are not really words... they are just a sequence of light and dark pixels. By your reasoning, they aren't useful either.
No, that's not what I said. Calling Class::DBI a database abstraction layer is calling a word processor a book writing abstraction layer. It isn't. It's just a different way of stringing letters into words and words into sentences. It still only manipulates words and letters for you - it doesn't deal with characters, plots or styles.

Class::DBI doesn't abstract anything. It just provides a different syntax to get into a table. But a Class::DBI user needs to have an as good idea how entities are layed out in tables as someone writing plain SQL does. He may avoid writing SQL as long as keeps his application doing simple inserts/selects/updates/deletes, but nothing is abstracted.

With a proper abstraction layer, a user of the layer doesn't have to know how the data is put into tables. Or whether an entity is laid out in one or more tables. And the data can be layed out differently (even spread over different databases) without the user of the layer knowing.

And useful database abstraction layers cannot be generalized anyway (as they are dependent on what's being stored anyway).
Sure they can.
I've yet to see one. I've seen many database abstraction layers. Bad ones. Good ones. All geared towards the data stored, and needs of the application(s). But a 1-1 table-module mapping isn't an database abstraction layer. I won't deny it's a layer. But the database layout still shines through.

Replies are listed 'Best First'.
Re^4: Class::DBI weirdness sql error
by trwww (Priest) on Mar 04, 2009 at 02:42 UTC

    I'll concede that Class::DBI doesn't abstract the database perfectly. Not even close. But CDBI abstracts a database well enough to be extremely useful when used within its constraints. When I see someone suggesting otherwise, I feel compelled to respectfully object.

    To keep the talk technical, It seems that your main complaint is that CDBI "gets in the way..." Whenever CDBI is getting in your way, you simply do a:

    my $dbh = CDBI::SubClass->db_Main

    and you are back to doing plain database calls. So at the very least, it is a very handy database connection manager.

    Regards,

      Oh, I'm quite aware how to "get around" Class::DBI. I do that all the time. That's I'm doing it all the time says enough, doesn't? ;-)

      And I still maintain that it doesn't abstract the database one iota. I won't deny you (and many others) find it useful, but that doesn't mean it abstracts the database.