Commit 993ea0c6 authored by Dries's avatar Dries

- Patch #16111 by chx: generalized node_rewrite_query to db_rewrite_query.

parent e6d36892
...@@ -21,6 +21,8 @@ Drupal x.x.x, xxxx-xx-xx ...@@ -21,6 +21,8 @@ Drupal x.x.x, xxxx-xx-xx
* added a simple contact module that allows users to contact each other using e-mail. * added a simple contact module that allows users to contact each other using e-mail.
- multi-site configuration: - multi-site configuration:
* made it possible to run multiple sites from a single code base. * made it possible to run multiple sites from a single code base.
- block system:
* extended the block visibility settings.
- theme system: - theme system:
* added new theme functions. * added new theme functions.
- database backend: - database backend:
......
...@@ -168,6 +168,98 @@ function db_queryd($query) { ...@@ -168,6 +168,98 @@ function db_queryd($query) {
return _db_query($query, 1); return _db_query($query, 1);
} }
/**
* Helper function for db_rewrite_sql.
*
* Collects JOIN and WHERE statements via hook_sql.
* Decides whether to select primary_key or DISTINCT(primary_key)
*
* @param $query
* query to be rewritten
* @param $primary_table
* Name or alias of the table which has the primary key field for this query. Possible values are: comments, forum, node, taxonomy, vocabulary
* @param $primary_key
* name of the primary key field.
* @param $args
* array of additional args
* @return
* An array: join statements, where statements, field or DISTINCT(field)
*/
function _db_rewrite_sql($query = '', $primary_table = 'n', $primary_key = 'nid', $args = array()) {
$where = array();
$join = array();
$distinct = FALSE;
foreach (module_implements('db_rewrite_sql') as $module) {
$result = module_invoke($module, 'db_rewrite_sql', $query, $primary_table, $primary_key, $args);
if (is_array($result)) {
if (isset($result['where'])) {
$where[] .= $result['where'];
}
if (isset($result['join'])) {
$join[] .= $result['join'];
}
if (isset($result['distinct']) && $result['distinct']) {
$distinct = TRUE;
}
}
elseif (isset($result)) {
$where[] .= $result;
}
}
$where = empty($where) ? '' : '('. implode(') AND (',$where).')';
$join = empty($join) ? '' : implode(' ',$join);
$field = $primary_table .'.'. $primary_key;
return array($join, $where, $distinct ? 'DISTINCT('. $field .')' : $field);
}
/**
* Rewrites node queries.
*
* @param $query
* query to be rewritten
* @param $primary_table
* Name or alias of the table which has the primary key field for this query. Possible values are: comments, forum, node, taxonomy, vocabulary
* @param $primary_key
* name of the primary key field.
* @param $args
* an array of arguments, passed to the implementations of hook_db_rewrite_sql
* @return
* The original query with JOIN and WHERE statements inserted from hook_db_rewrite_sql implementations. nid is rewritten if needed.
*/
function db_rewrite_sql($query, $primary_table = 'n', $primary_key = 'nid', $args = array()) {
list($join, $where, $field_to_select) = _db_rewrite_sql($query, $primary_table, $primary_key, $args);
// (?<!text) is a negative look-behind (no need to rewrite queries that already use DISTINCT).
$query = preg_replace('/(SELECT.*)('. $primary_table .'\.)?(?<!DISTINCT\()(?<!DISTINCT\('. $primary_table .'\.)'. $primary_key .'(.*FROM)/AUsi', '\1'. $field_to_select .'\3', $query);
$query = preg_replace('|FROM[^[:upper:]/,]+|','\0 '. $join .' ', $query);
if (strpos($query, 'WHERE')) {
$replace = 'WHERE';
$add = 'AND';
}
elseif (strpos($query, 'GROUP')) {
$replace = 'GROUP';
$add = 'GROUP';
}
elseif (strpos($query, 'ORDER')) {
$replace = 'ORDER';
$add = 'ORDER';
}
elseif (strpos($query, 'LIMIT')) {
$replace = 'LIMIT';
$add = 'LIMIT';
}
else {
$query .= ' WHERE '. $where;
}
if (isset($replace)) {
$query = str_replace($replace, 'WHERE '. $where .' '. $add .' ', $query);
}
return $query;
}
/** /**
* @} End of "defgroup database". * @} End of "defgroup database".
*/ */
......
...@@ -131,7 +131,7 @@ function aggregator_menu($may_cache) { ...@@ -131,7 +131,7 @@ function aggregator_menu($may_cache) {
$items[] = array('path' => 'admin/aggregator/add/category', 'title' => t('add category'), $items[] = array('path' => 'admin/aggregator/add/category', 'title' => t('add category'),
'callback' => 'aggregator_admin_edit_category', 'access' => $edit, 'callback' => 'aggregator_admin_edit_category', 'access' => $edit,
'type' => MENU_LOCAL_TASK); 'type' => MENU_LOCAL_TASK);
$items[] = array('path' => 'admin/aggregator/configure', 'title' => t('configure'), $items[] = array('path' => 'admin/settings/aggregator', 'title' => t('configure'),
'callback' => 'aggregator_configure', 'access' => $edit, 'callback' => 'aggregator_configure', 'access' => $edit,
'type' => MENU_LOCAL_TASK); 'type' => MENU_LOCAL_TASK);
......
...@@ -131,7 +131,7 @@ function aggregator_menu($may_cache) { ...@@ -131,7 +131,7 @@ function aggregator_menu($may_cache) {
$items[] = array('path' => 'admin/aggregator/add/category', 'title' => t('add category'), $items[] = array('path' => 'admin/aggregator/add/category', 'title' => t('add category'),
'callback' => 'aggregator_admin_edit_category', 'access' => $edit, 'callback' => 'aggregator_admin_edit_category', 'access' => $edit,
'type' => MENU_LOCAL_TASK); 'type' => MENU_LOCAL_TASK);
$items[] = array('path' => 'admin/aggregator/configure', 'title' => t('configure'), $items[] = array('path' => 'admin/settings/aggregator', 'title' => t('configure'),
'callback' => 'aggregator_configure', 'access' => $edit, 'callback' => 'aggregator_configure', 'access' => $edit,
'type' => MENU_LOCAL_TASK); 'type' => MENU_LOCAL_TASK);
......
...@@ -73,7 +73,7 @@ function archive_calendar($original = 0) { ...@@ -73,7 +73,7 @@ function archive_calendar($original = 0) {
$next = mktime(23, 59, 59, $month + 1, min(date('t', $nextmonth), $day), $year); $next = mktime(23, 59, 59, $month + 1, min(date('t', $nextmonth), $day), $year);
$sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created'; $sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created';
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query($sql, $start_of_month, $end_of_month); $result = db_query($sql, $start_of_month, $end_of_month);
$days_with_posts = array(); $days_with_posts = array();
...@@ -242,7 +242,7 @@ function archive_page($year = 0, $month = 0, $day = 0) { ...@@ -242,7 +242,7 @@ function archive_page($year = 0, $month = 0, $day = 0) {
if ($year && $month && $day) { if ($year && $month && $day) {
// Fetch nodes for the selected date, if one was specified. // Fetch nodes for the selected date, if one was specified.
$sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created'; $sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created';
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query_range($sql, $date, $date_end, 0, 20); $result = db_query_range($sql, $date, $date_end, 0, 20);
while ($nid = db_fetch_object($result)) { while ($nid = db_fetch_object($result)) {
......
...@@ -73,7 +73,7 @@ function archive_calendar($original = 0) { ...@@ -73,7 +73,7 @@ function archive_calendar($original = 0) {
$next = mktime(23, 59, 59, $month + 1, min(date('t', $nextmonth), $day), $year); $next = mktime(23, 59, 59, $month + 1, min(date('t', $nextmonth), $day), $year);
$sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created'; $sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created';
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query($sql, $start_of_month, $end_of_month); $result = db_query($sql, $start_of_month, $end_of_month);
$days_with_posts = array(); $days_with_posts = array();
...@@ -242,7 +242,7 @@ function archive_page($year = 0, $month = 0, $day = 0) { ...@@ -242,7 +242,7 @@ function archive_page($year = 0, $month = 0, $day = 0) {
if ($year && $month && $day) { if ($year && $month && $day) {
// Fetch nodes for the selected date, if one was specified. // Fetch nodes for the selected date, if one was specified.
$sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created'; $sql = 'SELECT n.nid, n.created FROM {node} n WHERE n.status = 1 AND n.created > %d AND n.created < %d ORDER BY n.created';
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query_range($sql, $date, $date_end, 0, 20); $result = db_query_range($sql, $date, $date_end, 0, 20);
while ($nid = db_fetch_object($result)) { while ($nid = db_fetch_object($result)) {
......
...@@ -89,7 +89,7 @@ function blog_feed_user($uid = 0) { ...@@ -89,7 +89,7 @@ function blog_feed_user($uid = 0) {
$account = $user; $account = $user;
} }
$result = db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, 15); $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, 15);
$channel['title'] = $account->name ."'s blog"; $channel['title'] = $account->name ."'s blog";
$channel['link'] = url("blog/$uid", NULL, NULL, TRUE); $channel['link'] = url("blog/$uid", NULL, NULL, TRUE);
$channel['description'] = $term->description; $channel['description'] = $term->description;
...@@ -100,7 +100,7 @@ function blog_feed_user($uid = 0) { ...@@ -100,7 +100,7 @@ function blog_feed_user($uid = 0) {
* Displays an RSS feed containing recent blog entries of all users. * Displays an RSS feed containing recent blog entries of all users.
*/ */
function blog_feed_last() { function blog_feed_last() {
$result = db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 15); $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 15);
$channel['title'] = variable_get('site_name', 'drupal') .' blogs'; $channel['title'] = variable_get('site_name', 'drupal') .' blogs';
$channel['link'] = url('blog', NULL, NULL, TRUE); $channel['link'] = url('blog', NULL, NULL, TRUE);
$channel['description'] = $term->description; $channel['description'] = $term->description;
...@@ -144,7 +144,7 @@ function blog_page_user($uid) { ...@@ -144,7 +144,7 @@ function blog_page_user($uid) {
$output = ''; $output = '';
} }
$result = pager_query(node_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid); $result = pager_query(db_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid);
while ($node = db_fetch_object($result)) { while ($node = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $node->nid)), 1); $output .= node_view(node_load(array('nid' => $node->nid)), 1);
} }
...@@ -167,7 +167,7 @@ function blog_page_last() { ...@@ -167,7 +167,7 @@ function blog_page_last() {
$output = ''; $output = '';
$result = pager_query(node_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), variable_get('default_nodes_main', 10)); $result = pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), variable_get('default_nodes_main', 10));
while ($node = db_fetch_object($result)) { while ($node = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $node->nid)), 1); $output .= node_view(node_load(array('nid' => $node->nid)), 1);
...@@ -280,7 +280,7 @@ function blog_block($op = 'list', $delta = 0) { ...@@ -280,7 +280,7 @@ function blog_block($op = 'list', $delta = 0) {
} }
else if ($op == 'view') { else if ($op == 'view') {
if (user_access('access content')) { if (user_access('access content')) {
$block['content'] = node_title_list(db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10)); $block['content'] = node_title_list(db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10));
$block['content'] .= '<div class="more-link">'. l(t('more'), 'blog', array('title' => t('Read the latest blog entries.'))) .'</div>'; $block['content'] .= '<div class="more-link">'. l(t('more'), 'blog', array('title' => t('Read the latest blog entries.'))) .'</div>';
$block['subject'] = t('Recent blog posts'); $block['subject'] = t('Recent blog posts');
} }
......
...@@ -89,7 +89,7 @@ function blog_feed_user($uid = 0) { ...@@ -89,7 +89,7 @@ function blog_feed_user($uid = 0) {
$account = $user; $account = $user;
} }
$result = db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, 15); $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, 15);
$channel['title'] = $account->name ."'s blog"; $channel['title'] = $account->name ."'s blog";
$channel['link'] = url("blog/$uid", NULL, NULL, TRUE); $channel['link'] = url("blog/$uid", NULL, NULL, TRUE);
$channel['description'] = $term->description; $channel['description'] = $term->description;
...@@ -100,7 +100,7 @@ function blog_feed_user($uid = 0) { ...@@ -100,7 +100,7 @@ function blog_feed_user($uid = 0) {
* Displays an RSS feed containing recent blog entries of all users. * Displays an RSS feed containing recent blog entries of all users.
*/ */
function blog_feed_last() { function blog_feed_last() {
$result = db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 15); $result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 15);
$channel['title'] = variable_get('site_name', 'drupal') .' blogs'; $channel['title'] = variable_get('site_name', 'drupal') .' blogs';
$channel['link'] = url('blog', NULL, NULL, TRUE); $channel['link'] = url('blog', NULL, NULL, TRUE);
$channel['description'] = $term->description; $channel['description'] = $term->description;
...@@ -144,7 +144,7 @@ function blog_page_user($uid) { ...@@ -144,7 +144,7 @@ function blog_page_user($uid) {
$output = ''; $output = '';
} }
$result = pager_query(node_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid); $result = pager_query(db_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid);
while ($node = db_fetch_object($result)) { while ($node = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $node->nid)), 1); $output .= node_view(node_load(array('nid' => $node->nid)), 1);
} }
...@@ -167,7 +167,7 @@ function blog_page_last() { ...@@ -167,7 +167,7 @@ function blog_page_last() {
$output = ''; $output = '';
$result = pager_query(node_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), variable_get('default_nodes_main', 10)); $result = pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), variable_get('default_nodes_main', 10));
while ($node = db_fetch_object($result)) { while ($node = db_fetch_object($result)) {
$output .= node_view(node_load(array('nid' => $node->nid)), 1); $output .= node_view(node_load(array('nid' => $node->nid)), 1);
...@@ -280,7 +280,7 @@ function blog_block($op = 'list', $delta = 0) { ...@@ -280,7 +280,7 @@ function blog_block($op = 'list', $delta = 0) {
} }
else if ($op == 'view') { else if ($op == 'view') {
if (user_access('access content')) { if (user_access('access content')) {
$block['content'] = node_title_list(db_query_range(node_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10)); $block['content'] = node_title_list(db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10));
$block['content'] .= '<div class="more-link">'. l(t('more'), 'blog', array('title' => t('Read the latest blog entries.'))) .'</div>'; $block['content'] .= '<div class="more-link">'. l(t('more'), 'blog', array('title' => t('Read the latest blog entries.'))) .'</div>';
$block['subject'] = t('Recent blog posts'); $block['subject'] = t('Recent blog posts');
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -157,7 +157,7 @@ function comment_block($op = 'list', $delta = 0) { ...@@ -157,7 +157,7 @@ function comment_block($op = 'list', $delta = 0) {
return $blocks; return $blocks;
} }
else if ($op == 'view' && user_access('access comments')) { else if ($op == 'view' && user_access('access comments')) {
$result = db_query_range(node_rewrite_sql('SELECT c.nid, c.* FROM {comments} c WHERE status = 0 ORDER BY timestamp DESC', 'c'), 0, 10); $result = db_query_range(db_rewrite_sql('SELECT c.nid, c.* FROM {comments} c WHERE status = 0 ORDER BY timestamp DESC', 'c'), 0, 10);
$items = array(); $items = array();
while ($comment = db_fetch_object($result)) { while ($comment = db_fetch_object($result)) {
$items[] = l($comment->subject, 'node/'. $comment->nid, NULL, NULL, 'comment-'. $comment->cid) .'<br />'. t('%time ago', array('%time' => format_interval(time() - $comment->timestamp))); $items[] = l($comment->subject, 'node/'. $comment->nid, NULL, NULL, 'comment-'. $comment->cid) .'<br />'. t('%time ago', array('%time' => format_interval(time() - $comment->timestamp)));
......
...@@ -157,7 +157,7 @@ function comment_block($op = 'list', $delta = 0) { ...@@ -157,7 +157,7 @@ function comment_block($op = 'list', $delta = 0) {
return $blocks; return $blocks;
} }
else if ($op == 'view' && user_access('access comments')) { else if ($op == 'view' && user_access('access comments')) {
$result = db_query_range(node_rewrite_sql('SELECT c.nid, c.* FROM {comments} c WHERE status = 0 ORDER BY timestamp DESC', 'c'), 0, 10); $result = db_query_range(db_rewrite_sql('SELECT c.nid, c.* FROM {comments} c WHERE status = 0 ORDER BY timestamp DESC', 'c'), 0, 10);
$items = array(); $items = array();
while ($comment = db_fetch_object($result)) { while ($comment = db_fetch_object($result)) {
$items[] = l($comment->subject, 'node/'. $comment->nid, NULL, NULL, 'comment-'. $comment->cid) .'<br />'. t('%time ago', array('%time' => format_interval(time() - $comment->timestamp))); $items[] = l($comment->subject, 'node/'. $comment->nid, NULL, NULL, 'comment-'. $comment->cid) .'<br />'. t('%time ago', array('%time' => format_interval(time() - $comment->timestamp)));
......
...@@ -315,11 +315,11 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) { ...@@ -315,11 +315,11 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) {
case 'view': case 'view':
if (user_access('access content')) { if (user_access('access content')) {
$sql = "SELECT n.nid, n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND n.type='forum' ORDER BY l.last_comment_timestamp DESC"; $sql = "SELECT n.nid, n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND n.type='forum' ORDER BY l.last_comment_timestamp DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$content = node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('Active forum topics:')); $content = node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('Active forum topics:'));
$sql = "SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.type = 'forum' AND n.status = 1 ORDER BY n.nid DESC"; $sql = "SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.type = 'forum' AND n.status = 1 ORDER BY n.nid DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$content .= node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('New forum topics:')); $content .= node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('New forum topics:'));
if ($content) { if ($content) {
...@@ -346,7 +346,7 @@ function forum_link($type, $node = 0, $main = 0) { ...@@ -346,7 +346,7 @@ function forum_link($type, $node = 0, $main = 0) {
// get previous and next topic // get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1)); $sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query($sql, $node->tid); $result = db_query($sql, $node->tid);
while ($topic = db_fetch_object($result)) { while ($topic = db_fetch_object($result)) {
...@@ -559,7 +559,7 @@ function forum_get_forums($tid = 0) { ...@@ -559,7 +559,7 @@ function forum_get_forums($tid = 0) {
$counts = array(); $counts = array();
$sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid"; $sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$_counts = db_query($sql, $forum->tid); $_counts = db_query($sql, $forum->tid);
while ($count = db_fetch_object($_counts)) { while ($count = db_fetch_object($_counts)) {
$counts[$count->tid] = $count; $counts[$count->tid] = $count;
...@@ -584,7 +584,7 @@ function forum_get_forums($tid = 0) { ...@@ -584,7 +584,7 @@ function forum_get_forums($tid = 0) {
// table1 INNER JOIN table2 INNER JOIN table3 ON table2_criteria ON table3_criteria // table1 INNER JOIN table2 INNER JOIN table3 ON table2_criteria ON table3_criteria
// used to join node_comment_statistics to users. // used to join node_comment_statistics to users.
$sql = "SELECT n.nid, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n, {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid ORDER BY l.last_comment_timestamp DESC"; $sql = "SELECT n.nid, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n, {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid ORDER BY l.last_comment_timestamp DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$topic = db_fetch_object(db_query_range($sql, $forum->tid, 0, 1)); $topic = db_fetch_object(db_query_range($sql, $forum->tid, 0, 1));
$last_post = new StdClass(); $last_post = new StdClass();
...@@ -604,10 +604,10 @@ function _forum_topics_read($term, $uid) { ...@@ -604,10 +604,10 @@ function _forum_topics_read($term, $uid) {
// than NODE_NEW_LIMIT are read, and include the recent posts that user has // than NODE_NEW_LIMIT are read, and include the recent posts that user has
// read. // read.
$sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum'"; $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum'";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$ancient = db_result(db_query($sql, $term, NODE_NEW_LIMIT)); $ancient = db_result(db_query($sql, $term, NODE_NEW_LIMIT));
$sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d"; $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$recent = db_result(db_query($sql, $uid, $term, NODE_NEW_LIMIT)); $recent = db_result(db_query($sql, $uid, $term, NODE_NEW_LIMIT));
return $ancient + $recent; return $ancient + $recent;
...@@ -633,10 +633,10 @@ function forum_get_topics($tid, $sortby, $forum_per_page) { ...@@ -633,10 +633,10 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
$term = taxonomy_get_term($tid); $term = taxonomy_get_term($tid);
$sql = node_rewrite_sql("SELECT n.nid, f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) AS last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n, {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = %d AND n.uid = u.uid AND n.nid = f.nid"); $sql = db_rewrite_sql("SELECT n.nid, f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) AS last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n, {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = %d AND n.uid = u.uid AND n.nid = f.nid");
$sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,'); $sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,');
$sql_count = node_rewrite_sql("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum'"); $sql_count = db_rewrite_sql("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum'");
$result = pager_query($sql, $forum_per_page, 0, $sql_count, $tid); $result = pager_query($sql, $forum_per_page, 0, $sql_count, $tid);
...@@ -678,7 +678,7 @@ function _forum_new($tid) { ...@@ -678,7 +678,7 @@ function _forum_new($tid) {
global $user; global $user;
$sql = "SELECT n.nid FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d ORDER BY created"; $sql = "SELECT n.nid FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d ORDER BY created";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$nid = db_result(db_query_range($sql, $user->uid, $tid, NODE_NEW_LIMIT, 0, 1)); $nid = db_result(db_query_range($sql, $user->uid, $tid, NODE_NEW_LIMIT, 0, 1));
return $nid ? $nid : 0; return $nid ? $nid : 0;
......
...@@ -315,11 +315,11 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) { ...@@ -315,11 +315,11 @@ function forum_block($op = 'list', $delta = 0, $edit = array()) {
case 'view': case 'view':
if (user_access('access content')) { if (user_access('access content')) {
$sql = "SELECT n.nid, n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND n.type='forum' ORDER BY l.last_comment_timestamp DESC"; $sql = "SELECT n.nid, n.title, l.last_comment_timestamp, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND n.type='forum' ORDER BY l.last_comment_timestamp DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$content = node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('Active forum topics:')); $content = node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('Active forum topics:'));
$sql = "SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.type = 'forum' AND n.status = 1 ORDER BY n.nid DESC"; $sql = "SELECT n.nid, n.title, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.type = 'forum' AND n.status = 1 ORDER BY n.nid DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$content .= node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('New forum topics:')); $content .= node_title_list(db_query_range($sql, 0, variable_get('forum_block_num', '5')), t('New forum topics:'));
if ($content) { if ($content) {
...@@ -346,7 +346,7 @@ function forum_link($type, $node = 0, $main = 0) { ...@@ -346,7 +346,7 @@ function forum_link($type, $node = 0, $main = 0) {
// get previous and next topic // get previous and next topic
$sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1)); $sql = "SELECT n.nid, n.title, n.sticky, l.comment_count, l.last_comment_timestamp FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' ORDER BY n.sticky DESC, ". _forum_get_topic_order_sql(variable_get('forum_order', 1));
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$result = db_query($sql, $node->tid); $result = db_query($sql, $node->tid);
while ($topic = db_fetch_object($result)) { while ($topic = db_fetch_object($result)) {
...@@ -559,7 +559,7 @@ function forum_get_forums($tid = 0) { ...@@ -559,7 +559,7 @@ function forum_get_forums($tid = 0) {
$counts = array(); $counts = array();
$sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid"; $sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$_counts = db_query($sql, $forum->tid); $_counts = db_query($sql, $forum->tid);
while ($count = db_fetch_object($_counts)) { while ($count = db_fetch_object($_counts)) {
$counts[$count->tid] = $count; $counts[$count->tid] = $count;
...@@ -584,7 +584,7 @@ function forum_get_forums($tid = 0) { ...@@ -584,7 +584,7 @@ function forum_get_forums($tid = 0) {
// table1 INNER JOIN table2 INNER JOIN table3 ON table2_criteria ON table3_criteria // table1 INNER JOIN table2 INNER JOIN table3 ON table2_criteria ON table3_criteria
// used to join node_comment_statistics to users. // used to join node_comment_statistics to users.
$sql = "SELECT n.nid, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n, {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid ORDER BY l.last_comment_timestamp DESC"; $sql = "SELECT n.nid, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) as last_comment_name, l.last_comment_uid FROM {node} n, {node_comment_statistics} l /*! USE INDEX (node_comment_timestamp) */, {users} cu, {term_node} r WHERE n.nid = r.nid AND r.tid = %d AND n.status = 1 AND n.type = 'forum' AND l.last_comment_uid = cu.uid AND n.nid = l.nid ORDER BY l.last_comment_timestamp DESC";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$topic = db_fetch_object(db_query_range($sql, $forum->tid, 0, 1)); $topic = db_fetch_object(db_query_range($sql, $forum->tid, 0, 1));
$last_post = new StdClass(); $last_post = new StdClass();
...@@ -604,10 +604,10 @@ function _forum_topics_read($term, $uid) { ...@@ -604,10 +604,10 @@ function _forum_topics_read($term, $uid) {
// than NODE_NEW_LIMIT are read, and include the recent posts that user has // than NODE_NEW_LIMIT are read, and include the recent posts that user has
// read. // read.
$sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum'"; $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.created <= %d AND n.status = 1 AND n.type = 'forum'";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$ancient = db_result(db_query($sql, $term, NODE_NEW_LIMIT)); $ancient = db_result(db_query($sql, $term, NODE_NEW_LIMIT));
$sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d"; $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND n.created > %d";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$recent = db_result(db_query($sql, $uid, $term, NODE_NEW_LIMIT)); $recent = db_result(db_query($sql, $uid, $term, NODE_NEW_LIMIT));
return $ancient + $recent; return $ancient + $recent;
...@@ -633,10 +633,10 @@ function forum_get_topics($tid, $sortby, $forum_per_page) { ...@@ -633,10 +633,10 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
$term = taxonomy_get_term($tid); $term = taxonomy_get_term($tid);
$sql = node_rewrite_sql("SELECT n.nid, f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) AS last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n, {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = %d AND n.uid = u.uid AND n.nid = f.nid"); $sql = db_rewrite_sql("SELECT n.nid, f.tid, n.title, n.sticky, u.name, u.uid, n.created AS timestamp, n.comment AS comment_mode, l.last_comment_timestamp, IF(l.last_comment_uid, cu.name, l.last_comment_name) AS last_comment_name, l.last_comment_uid, l.comment_count AS num_comments FROM {node} n, {node_comment_statistics} l, {users} cu, {term_node} r, {users} u, {forum} f WHERE n.status = 1 AND l.last_comment_uid = cu.uid AND n.nid = l.nid AND n.nid = r.nid AND r.tid = %d AND n.uid = u.uid AND n.nid = f.nid");
$sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,'); $sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,');
$sql_count = node_rewrite_sql("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum'"); $sql_count = db_rewrite_sql("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum'");
$result = pager_query($sql, $forum_per_page, 0, $sql_count, $tid); $result = pager_query($sql, $forum_per_page, 0, $sql_count, $tid);
...@@ -678,7 +678,7 @@ function _forum_new($tid) { ...@@ -678,7 +678,7 @@ function _forum_new($tid) {
global $user; global $user;
$sql = "SELECT n.nid FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d ORDER BY created"; $sql = "SELECT n.nid FROM {node} n LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d INNER JOIN {term_node} r ON n.nid = r.nid AND r.tid = %d WHERE n.status = 1 AND n.type = 'forum' AND h.nid IS NULL AND n.created > %d ORDER BY created";
$sql = node_rewrite_sql($sql); $sql = db_rewrite_sql($sql);
$nid = db_result(db_query_range($sql, $user->uid, $tid, NODE_NEW_LIMIT, 0, 1)); $nid = db_result(db_query_range($sql, $user->uid, $tid, NODE_NEW_LIMIT, 0, 1));
return $nid ? $nid : 0; return $nid ? $nid : 0;
......
...@@ -585,7 +585,7 @@ function node_search($op = 'search', $keys = null) { ...@@ -585,7 +585,7 @@ function node_search($op = 'search', $keys = null) {
$remaining = db_result(db_query('SELECT COUNT(*) FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE n.status = 1 AND n.moderate = 0 AND (n.created > %d OR n.changed > %d OR c.last_comment_timestamp > %d) ORDER BY GREATEST(n.created, n.changed, c.last_comment_timestamp) ASC', $last, $last, $last)); $remaining = db_result(db_query('SELECT COUNT(*) FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE n.status = 1 AND n.moderate = 0 AND (n.created > %d OR n.changed > %d OR c.last_comment_timestamp > %d) ORDER BY GREATEST(n.created, n.changed, c.last_comment_timestamp) ASC', $last, $last, $last));
return array('remaining' => $remaining, 'total' => $total); return array('remaining' => $remaining, 'total' => $total);
case 'search': case 'search':
list($join, $where) = _node_rewrite_sql(); list($join, $where) = _db_rewrite_sql();
$find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. $join .' INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1 AND '. $where); $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. $join .' INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1 AND '. $where);
$results = array(); $results = array();
foreach ($find as $item) { foreach ($find as $item) {
...@@ -1018,7 +1018,7 @@ function node_feed($nodes = 0, $channel = array()) { ...@@ -1018,7 +1018,7 @@ function node_feed($nodes = 0, $channel = array()) {
global $base_url, $locale; global $base_url, $locale;
if (!$nodes) { if (!$nodes) {
$nodes = db_query_range(node_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.created DESC'), 0, 15); $nodes = db_query_range(db_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.created DESC'), 0, 15);
} }
while ($node = db_fetch_object($nodes)) { while ($node = db_fetch_object($nodes)) {
...@@ -1484,7 +1484,7 @@ function node_delete($edit) { ...@@ -1484,7 +1484,7 @@ function node_delete($edit) {
* Generate a listing of promoted nodes. * Generate a listing of promoted nodes.
*/ */
function node_page_default() { function node_page_default() {
$result = pager_query(node_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10)); $result = pager_query(db_rewrite_sql('SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10));
if (db_num_rows($result)) { if (db_num_rows($result)) {
drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('node/feed', NULL, NULL, TRUE) .'" />'); drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('node/feed', NULL, NULL, TRUE) .'" />');
...@@ -1808,100 +1808,15 @@ function node_access_grants($op, $uid = NULL) { ...@@ -1808,100 +1808,15 @@ function node_access_grants($op, $uid = NULL) {
*/ */
/** /**
* Implementation of hook_node_rewrite_sql * Implementation of hook_db_rewrite_sql
*/ */
function node_node_rewrite_sql() { function node_db_rewrite_sql($query, $primary_table) {
$return['join'] = node_access_join_sql(); if ($primary_table=='n') {
$return['where'] = node_access_where_sql(); $return['join'] = node_access_join_sql();
$return['distinct'] = !empty($return['join']); $return['where'] = node_access_where_sql();
return $return; $return['distinct'] = !empty($return['join']);
} return $return;
/**
* Helper function for node_rewrite_sql.
*
* Collects JOIN and WHERE statements via hook_sql.
* Decides whether to select nid or DISTINCT(nid)
*
* @param $query
* query to be rewritten
* @param $nid_alias
* Alias of the table which has the nid field for this query. Defaults to 'n'.
* @param $args
* array of additional args
* @return
* An associative array: join => join statements, where => where statements, nid_to_select => nid or DISTINCT(nid)
*/
function _node_rewrite_sql($query = '', $nid_alias = 'n', $args = array()) {
$where = array();
$join = array();
$distinct = FALSE;
foreach (module_implements('node_rewrite_sql') as $module) {
$result = module_invoke($module, 'node_rewrite_sql', $query, $nid_alias, $args);
if (is_array($result)) {
if (isset($result['where'])) {
$where[] .= $result['where'];
}
if (isset($result['join'])) {
$join[] .= $result['join'];
}
if (isset($result['distinct']) && $result['distinct']) {
$distinct = TRUE;
}
}
elseif (isset($result)) {
$where[] .= $result;
}
}