Greg Sabino Mullane wrote:
I believe that DBI should go away as an actual piece of code and instead be replaced by an API specification document, taking PSGI as inspiration.

I'm having a hard time envisioning how this would work in practice. What I see is lots of duplicated code across the DBDs. So a "DBI bug" would be handled by updating the API, bumping the version, and waiting for individual DBDs to implement it? A recipe for a large collection of supported API versions out in the wild, I would imagine.

I envision that DBDs will tend to still have a shared dependency with each other as they do now, and that shared code essentially being what DBI is now. So when the API is updated to handle this "DBI bug", then generally only the shared dependency would need to be updated, same as now.

The main difference in my proposal is that this code sharing is no longer *mandatory* to use the API.

The concept of driver-specific methods, like pg_*, just become ordinary DBD methods that are beyond what is defined by the DBI spec.

Seems a sure recipe for namespace collisions. Also makes it much harder to spot any DBMS-specific hacks in your Perl code.

You can still use namespaces under my proposal. The difference is that it is no longer mandatory for the shared code to be updated for a new DBMS to be supported.

As for DBMS-specific hacks, those still abound today, because every DBMS has unique SQL syntax and unique behaviors for some of the same syntax; DBI has never abstracted these away; it just prevents the need for some other kinds of DBMS-specific hacks.

-- Darren Duncan

Reply via email to