D7でdb_rewrite_sql()を使いたい

Drupal ではモジュールが、(コアも含めた)他のモジュールのページ構築中に実行しようとしているデータベースクエリを変更操作することができる。D6 では db_rewrite_sql() を使うのだが、これは D7 では使えない。

D7 では hook_query_alter() というのを使うらしい。addTag() でクエリにタグを設定することができるようになっている。

他のモジュールのクエリを操作するときは、設定されているタグでクエリを識別する。

addTag()の例

<?php
  $nids = db_select('node', 'n')
    ->fields('n', array('nid', 'created'))
    ->condition('type', 'blog')
    ->condition('status', 1)
    ->orderBy('created', 'DESC')
    ->range(0, variable_get('feed_default_items', 10))
    ->addTag('node_access')
    ->execute()
    ->fetchCol();

hook_query_alter()の例

<?php
function hook_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('micro_limit')) {
    $query->range(0, 2);
  }
}
?>
コア: 
Drupal7