Newer
Older
<?php
/**
Dries Buytaert
committed
* Implements hook_query_alter().
*/
Dries Buytaert
committed
function database_test_query_alter(QueryAlterableInterface $query) {
if ($query->hasTag('database_test_alter_add_range')) {
$query->range(0, 2);
}
if ($query->hasTag('database_test_alter_add_join')) {
Dries Buytaert
committed
$people_alias = $query->join('test', 'people', "test_task.pid = %alias.id");
$name_field = $query->addField($people_alias, 'name', 'name');
$query->condition($people_alias . '.id', 2);
}
if ($query->hasTag('database_test_alter_change_conditional')) {
$conditions =& $query->conditions();
$conditions[0]['value'] = 2;
}
if ($query->hasTag('database_test_alter_change_fields')) {
$fields =& $query->getFields();
unset($fields['age']);
}
if ($query->hasTag('database_test_alter_change_expressions')) {
$expressions =& $query->getExpressions();
$expressions['double_age']['expression'] = 'age*3';
}
Dries Buytaert
committed
/**
Dries Buytaert
committed
* Implements hook_query_TAG_alter().
*
* Called by DatabaseTestCase::testAlterRemoveRange.
Dries Buytaert
committed
*/
function database_test_query_database_test_alter_remove_range_alter(QueryAlterableInterface $query) {
$query->range();
}
Dries Buytaert
committed
* Implements hook_menu().
*/
function database_test_menu() {
Dries Buytaert
committed
$items['database_test/db_query_temporary'] = array(
'access callback' => TRUE,
'page callback' => 'database_test_db_query_temporary',
);
Dries Buytaert
committed
$items['database_test/pager_query_even'] = array(
'access callback' => TRUE,
'page callback' => 'database_test_even_pager_query',
);
$items['database_test/pager_query_odd'] = array(
'access callback' => TRUE,
'page callback' => 'database_test_odd_pager_query',
);
$items['database_test/tablesort'] = array(
'access callback' => TRUE,
'page callback' => 'database_test_tablesort',
);
Dries Buytaert
committed
$items['database_test/tablesort_first'] = array(
'access callback' => TRUE,
'page callback' => 'database_test_tablesort_first',
);
Angie Byron
committed
$items['database_test/tablesort_default_sort'] = array(
'access callback' => TRUE,
'page callback' => 'drupal_get_form',
'page arguments' => array('database_test_theme_tablesort'),
);
return $items;
}
/**
Dries Buytaert
committed
* Run a db_query_temporary and output the table name and its number of rows.
*
* We need to test that the table created is temporary, so we run it here, in a
* separate menu callback request; After this request is done, the temporary
* table should automatically dropped.
*/
function database_test_db_query_temporary() {
Dries Buytaert
committed
$table_name = db_query_temporary('SELECT status FROM {system}', array());
Dries Buytaert
committed
drupal_json_output(array(
Dries Buytaert
committed
'table_name' => $table_name,
'row_count' => db_select($table_name)->countQuery()->execute()->fetchField(),
));
exit;
}
Dries Buytaert
committed
/**
* Run a pager query and return the results.
*
* This function does care about the page GET parameter, as set by the
* simpletest HTTP call.
*/
function database_test_even_pager_query($limit) {
$query = db_select('test', 't');
$query
->fields('t', array('name'))
->orderBy('age');
// This should result in 2 pages of results.
$query = $query->extend('PagerDefault')->limit($limit);
$names = $query->execute()->fetchCol();
Dries Buytaert
committed
drupal_json_output(array(
Dries Buytaert
committed
'names' => $names,
));
exit;
}
/**
* Run a pager query and return the results.
*
* This function does care about the page GET parameter, as set by the
* simpletest HTTP call.
*/
function database_test_odd_pager_query($limit) {
$query = db_select('test_task', 't');
$query
->fields('t', array('task'))
->orderBy('pid');
// This should result in 4 pages of results.
$query = $query->extend('PagerDefault')->limit($limit);
$names = $query->execute()->fetchCol();
Dries Buytaert
committed
drupal_json_output(array(
Dries Buytaert
committed
'names' => $names,
));
exit;
}
/**
* Run a tablesort query and return the results.
*
* This function does care about the page GET parameter, as set by the
* simpletest HTTP call.
*/
function database_test_tablesort() {
$header = array(
'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
'task' => array('data' => t('Task'), 'field' => 'task'),
'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
);
$query = db_select('test_task', 't');
$query
->fields('t', array('tid', 'pid', 'task', 'priority'));
Angie Byron
committed
Dries Buytaert
committed
$query = $query->extend('TableSort')->orderByHeader($header);
// We need all the results at once to check the sort.
$tasks = $query->execute()->fetchAll();
Dries Buytaert
committed
drupal_json_output(array(
Dries Buytaert
committed
'tasks' => $tasks,
));
exit;
}
/**
* Run a tablesort query with a second order_by after and return the results.
*
* This function does care about the page GET parameter, as set by the
* simpletest HTTP call.
*/
function database_test_tablesort_first() {
$header = array(
'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
'task' => array('data' => t('Task'), 'field' => 'task'),
'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
);
$query = db_select('test_task', 't');
$query
->fields('t', array('tid', 'pid', 'task', 'priority'));
Angie Byron
committed
Dries Buytaert
committed
$query = $query->extend('TableSort')->orderByHeader($header)->orderBy('priority');
Dries Buytaert
committed
// We need all the results at once to check the sort.
$tasks = $query->execute()->fetchAll();
Dries Buytaert
committed
drupal_json_output(array(
Dries Buytaert
committed
'tasks' => $tasks,
));
exit;
Dries Buytaert
committed
}
Angie Byron
committed
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
/**
* Output a form without setting a header sort.
*/
function database_test_theme_tablesort($form, &$form_state) {
$header = array(
'username' => array('data' => t('Username'), 'field' => 'u.name'),
'status' => array('data' => t('Status'), 'field' => 'u.status'),
);
$query = db_select('users', 'u');
$query->condition('u.uid', 0, '<>');
user_build_filter_query($query);
$count_query = clone $query;
$count_query->addExpression('COUNT(u.uid)');
$query = $query->extend('PagerDefault')->extend('TableSort');
$query
->fields('u', array('uid', 'name', 'status', 'created', 'access'))
->limit(50)
->orderByHeader($header)
->setCountQuery($count_query);
$result = $query->execute();
$options = array();
$status = array(t('blocked'), t('active'));
$accounts = array();
foreach ($result as $account) {
$options[$account->uid] = array(
'username' => check_plain($account->name),
'status' => $status[$account->status],
);
}
$form['accounts'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#empty' => t('No people available.'),
);
return $form;
}