[development] Referential integrity -- finally?
Larry Garfield
larry at garfieldtech.com
Wed Jan 24 01:32:27 UTC 2007
On Tuesday 23 January 2007 4:08 pm, Gerhard Killesreiter wrote:
> > Conclusion: there is no win-win situation -- each direction has
> > advantages and disadvantages.
>
> Yeah, but we need a decision on what to do.
>
> This is not only valid for db_add_columns & friends, but also for other
> things like db_insert &tc that have been proposed.
db_insert() and friends have been in the helpers module for several months
now. I've used them with great success. (I'd be happy to see them moved
into core, but I don't expect miracles. <g>)
However, I also disagree that there's no win-win situation, because it doesn't
have to be either/or.
I maintain a few small modules. None have particularly complex SQL. My SQL
experience is 95% MySQL, with a wee bit of MS SQL Server thrown in for bad
measure. Currently none of my modules support PostgreSQL. I simply don't
know it, nor do I have any personal motivation to learn it. Similarly I know
almost nothing about Oracle.
Really, there's no way that any of my modules are ever going to support
PostgreSQL and Oracle and SQLite unless there's a common abstracted
create_table_schema() function of some sort, or someone else writes the
install code for it. I'm sure some would say I'm being
lazy/selfish/irresponsible (and maybe I won't disagree with them <g>), but
the way I see it, they're a side hobby for me, for the most part, so I don't
see a reason to spend extra time on learning and supporting a database that I
never use and can't even test on. However, I *would* be willing to learn a
few extra PHP function calls that would let me support "all supported
databases", at least enough to be fully functional if not fully optimized.
For more complex tables or where heavy field-order optimization matters,
there's still raw db_query(). I see nothing at all wrong with an install
function that looks like this:
create_table('foo', array('nid'=>'int', 'title'=>'string'));
switch ($db_type) {
case 'mysql':
// MySQL is faster if we do X instead
db_query("ALTER TABLE {foo} CHANGE ...");
break;
}
Allowing both a "generic" DDL API and an option for more specific tweaks where
needed does create a win-win situation. Module authors can easily make their
code function on all databases Drupal supports while still having the option
of making database-specific optimizations. My modules can "just work"
everywhere, and CCK can be fine-tuned to each database as needed, and
everyone wins.
> Also, I have found a few people in #drupal that help me with with SQL
> related questions. Nobody has yet complained about our API. Of course i
> usually feed them the processed queries from the database logs.
>
> Cheers,
> Gerhard
Well some of us are just PHP people who spend too much time writing SQL. :-)
--
Larry Garfield AIM: LOLG42
larry at garfieldtech.com ICQ: 6817012
"If nature has made any one thing less susceptible than all others of
exclusive property, it is the action of the thinking power called an idea,
which an individual may exclusively possess as long as he keeps it to
himself; but the moment it is divulged, it forces itself into the possession
of every one, and the receiver cannot dispossess himself of it." -- Thomas
Jefferson
More information about the development
mailing list