--- node.module.1 2004-12-11 01:31:17.000000000 +0100 +++ node.module 2004-12-24 13:17:13.000000000 +0100 @@ -390,7 +390,7 @@ function node_load($conditions, $revisio } // Retrieve the node. - $node = db_fetch_object(db_query('SELECT n.*, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE '. implode(' AND ', $cond))); + $node = db_fetch_object(db_query(node_query('SELECT n.*, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE '. implode(' AND ', $cond)))); $node = drupal_unpack($node); // Unserialize the revisions and user data fields. @@ -1779,4 +1779,41 @@ function node_access_grants($op, $uid = * @} End of "defgroup node_access". */ +function node_sql($op) { + switch ($op) { + case 'join': + return node_access_join_sql(); + case 'where': + return node_access_where_sql(); + } +} + + function node_query($query) { + $join = implode('', module_invoke_all('sql','join')); + $where = implode('', module_invoke_all('sql','where')); + $query = preg_replace('/FROM[ {},[:lower:]]+/','\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; +} + ?>