function services_resource_build_index_query in Services 6.3
Same name and namespace in other branches
- 7.3 services.module \services_resource_build_index_query()
Helper function to build index queries.
Parameters
$query: Object database query object.
$page: Integer page number we are requesting.
$fields: Array fields to return.
$service_params: Array parameters to add to the index query.
$page_size: Integer number of items to be returned.
$resource: String name of the resource building the index query
6 calls to services_resource_build_index_query()
- _comment_resource_index in resources/
comment_resource.inc - Return an array of optionally paged cids baed on a set of criteria.
- _file_resource_index in resources/
file_resource.inc - Return an array of optionally paged fids baed on a set of criteria.
- _node_resource_index in resources/
node_resource.inc - Return an array of optionally paged nids baed on a set of criteria.
- _taxonomy_term_resource_index in resources/
taxonomy_resource.inc - Return an array of optionally paged tids baed on a set of criteria.
- _taxonomy_vocabulary_resource_index in resources/
taxonomy_resource.inc - Return an array of optionally paged vids baed on a set of criteria.
File
- ./
services.module, line 507 - Provides a generic but powerful API for web services.
Code
function services_resource_build_index_query($schema, $order, $page, $fields, $service_params = array(), $primary_table, $primary_field, $page_size, $resource) {
$where = array();
$query_params = array();
$fields = db_escape_string($fields);
// need to append table prefix
if ($fields_array = explode(',', $fields)) {
foreach ($fields_array as &$field) {
$field = $primary_table . '.' . trim($field);
}
$fields = implode(',', $fields_array);
}
$schema = db_escape_string($schema);
$table = $schema;
$schema = drupal_get_schema($schema);
// Build an array of fields with the appropriate placeholders for use in
// db_query().
if (is_array($service_params)) {
foreach ($service_params as $param_field => $param_value) {
if (!$schema['fields'][$param_field]) {
services_error('Parameter "' . $param_field . '" is not valid.');
}
$in_placeholders = array();
foreach (services_str_getcsv($param_value) as $single_value) {
$in_placeholders[] = db_type_placeholder($schema['fields'][$param_field]['type']);
$query_params[] = $single_value;
}
$where[] = $primary_table . '.' . $param_field . ' IN (' . implode(',', $in_placeholders) . ')';
}
}
// Now implode that array into an actual WHERE clause.
$where = !empty($where) ? ' WHERE ' . implode(' AND ', $where) : '';
// Apply page size limits.
$default_limit = variable_get("services_{$resource}_index_page_size", 20);
if (!user_access('perform unlimited index queries') && $page_size > $default_limit) {
$page_size = $default_limit;
}
// Run through db_rewrite_sql to make sure proper access checks are applied.
$sql = "SELECT {$fields} FROM {{$table}} AS {$primary_table} {$where} ORDER BY {$order}";
$sql = db_rewrite_sql($sql, $primary_table, $primary_field);
$result = db_query_range($sql, $query_params, $page * $page_size, $page_size);
return $result;
}