function finder_query in Finder 6
3 calls to finder_query()
- finder_load_objects in ./finder.module
- Load objects from the database.
- finder_node_finder_find in modules/finder_node/finder_node.module
- Implementation of hook_finder_find().
- finder_user_finder_find in modules/finder_user/finder_user.module
- Implementation of hook_finder_find().
File
- ./finder.module, line 1046
- The finder module.
Code
function finder_query($query) {
drupal_alter('finder_query', $query);
if (!empty($query['selects'])) {
$selects = "SELECT " . implode(', ', $query['selects']);
}
else {
$selects = "SELECT *";
}
if ($selects && $query['from']) {
$from = " FROM " . $query['from'];
}
elseif ($selects) {
drupal_set_message(t("No 'from' given in finder_query()"), "error");
return FALSE;
}
else {
$from = '';
}
if (!empty($query['joins'])) {
$joins = " " . implode(' ', $query['joins']);
}
else {
$joins = '';
}
if (!empty($query['wheres'])) {
$wheres = " WHERE " . finder_wheres($query['wheres']);
}
else {
$wheres = '';
}
if (!empty($query['groups'])) {
$groups = " GROUP BY " . implode(', ', $query['groups']);
}
else {
$groups = '';
}
if (!empty($query['orders'])) {
$orders = " ORDER BY " . implode(', ', $query['orders']);
}
else {
$orders = '';
}
$query['sql'] = $selects . $from . $joins . $wheres . $groups . $orders;
if (isset($query['primary_table']) && isset($query['primary_field'])) {
$query['sql'] = db_rewrite_sql($query['sql'], $query['primary_table'], $query['primary_field'], $query['arguments']);
}
if (isset($query['pager']) && !empty($query['pager'])) {
$query['limit'] = $query['limit'] ? $query['limit'] : 10;
$query['element'] = $query['element'] ? $query['element'] : 0;
$query['count_sql'] = $query['count_sql'] ? $query['count_sql'] : "SELECT COUNT(*) " . $from . $joins . $wheres;
$query['query_function'] = 'pager_query';
$query['query_function_arguments'] = array(
'query' => $query['sql'],
'limit' => $query['limit'],
'element' => $query['element'],
'count_query' => $query['count_sql'],
'arguments' => isset($query['arguments']) ? $query['arguments'] : array(),
);
}
elseif (isset($query['range']) && !empty($query['range'])) {
$query['from'] = $query['from'] ? $query['from'] : 0;
$query['count'] = $query['count'] ? $query['count'] : 10;
$query['query_function'] = 'db_query_range';
$query['query_function_arguments'] = array(
'query' => $query['sql'],
'arguments' => isset($query['arguments']) ? $query['arguments'] : array(),
'from' => $query['from'],
'count' => $query['count'],
);
}
else {
$query['query_function'] = 'db_query';
$query['query_function_arguments'] = array(
'query' => $query['sql'],
'arguments' => isset($query['arguments']) ? $query['arguments'] : NULL,
);
}
drupal_alter('finder_query_built', $query);
if (isset($query['execute']) && $query['execute'] === FALSE) {
return $query;
}
if ($query['query_function']) {
$result = call_user_func_array($query['query_function'], $query['query_function_arguments']);
}
$db_function = isset($query['db_function']) ? $query['db_function'] : 'db_fetch_object';
$results = array();
while ($row = $db_function($result)) {
$results[] = $row;
}
return $results;
}