1.20.x select.inc | public SelectQuery::preExecute(SelectQueryInterface $query = NULL) |
Implements SelectQueryInterface::preExecute().
Overrides SelectQueryInterface::preExecute
File
- includes/
database/ select.inc, line 1374
Class
- SelectQuery
- Query builder for SELECT statements.
Code
public function preExecute(SelectQueryInterface $query = NULL) {
// If no query object is passed in, use $this.
if (!isset($query)) {
$query = $this;
}
// Only execute this once.
if ($query->isPrepared()) {
return TRUE;
}
// Modules may alter all queries or only those having a particular tag.
if (!empty($this->alterTags)) {
// Many contrib modules (wrongly) assume that query tags used for
// access-checking purposes follow the pattern $entity_type . '_access'.
// But this is not the case for taxonomy terms, since core used to add
// term_access instead of taxonomy_term_access to its queries. Provide
// backwards compatibility by adding both tags here instead of attempting
// to fix all contrib modules in a coordinated effort.
// TODO:
// - Extract this mechanism into a hook as part of a public (non-security)
// issue.
// - Emit E_USER_DEPRECATED if term_access is used.
$term_access_tags = array('term_access' => 1, 'taxonomy_term_access' => 1);
if (array_intersect_key($this->alterTags, $term_access_tags)) {
$this->alterTags += $term_access_tags;
}
$hooks = array('query');
foreach ($this->alterTags as $tag => $value) {
$hooks[] = 'query_' . $tag;
}
backdrop_alter($hooks, $query);
}
$this->prepared = TRUE;
// Now also prepare any sub-queries.
foreach ($this->tables as $table) {
if ($table['table'] instanceof SelectQueryInterface) {
$table['table']->preExecute();
}
}
foreach ($this->union as $union) {
$union['query']->preExecute();
}
return $this->prepared;
}