#145

Last updated
on 9. apr 2010 22:38

Preparing for Drupal 7 by changing the way to make parameters for db_query.

After attending DrupalCon in Szeged and following the new database stuff, I thought a bit about how to make the transition easier when Drupal 7 comes out.

I didn't think that it was anything special, but Robert Douglass encouraged me to share it, so here you are:

I figured out that you can actually use the Drupal 7-style of arguments to db_query right now (more or less).

The thing is that db_query in Drupal 6 allows you to use either the classic way with an arbitrary number of extra arguments to the db_query function or arguments as an array which is the future style.

The deal is that Drupal 6 takes the arguments in order, where Drupal 7 will use array keys (so I'd have :title in my query instead of %s).

So you can use the same arguments in Drupal 6 and Drupal 7, because Drupal 6 doesn't care about which keys you have in your arguments array.

So whithout further ado, an example query from my TSearch module (the implementation of PostgreSQL's TSearch in Drupal):

db_query("UPDATE {tsearch_node} SET vid = %d, node_tsvector = setweight(to_tsvector('%s'), 'A') || setweight(to_tsvector('%s'), 'B') || setweight(to_tsvector('%s'), 'C') || setweight(to_tsvector('%s'), 'D'), updated = %d WHERE nid = %d", array(':vid' => $node->vid, ':title' => $text['title'], ':extra' => $text['extra'], ':teaser' => $text['teaser'], ':body' => $text['body'], ':time' => $_SERVER['REQUEST_TIME'], ':nid' => $nid, ));

Isn't that neat? I've become quite fond of this syntax, because I think it's easier to see what's going on, and it'll be even better in Drupal 7, where I don't have to care about the ordering any longer.