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); } } ?>