| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | <?php/** * Implements hook_query_alter(). */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')) {    $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';  }}/** * Implements hook_query_TAG_alter(). * * Called by DatabaseTestCase::testAlterRemoveRange. */function database_test_query_database_test_alter_remove_range_alter(QueryAlterableInterface $query) {  $query->range();}/** * Implements hook_menu(). */function database_test_menu() {  $items['database_test/db_query_temporary'] = array(    'access callback' => TRUE,    'page callback' => 'database_test_db_query_temporary',  );  $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',  );  $items['database_test/tablesort_first'] = array(    'access callback' => TRUE,    'page callback' => 'database_test_tablesort_first',  );  $items['database_test/tablesort_default_sort'] = array(    'access callback' => TRUE,    'page callback' => 'drupal_get_form',    'page arguments' => array('database_test_theme_tablesort'),  );  return $items;}/** * 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() {  $table_name = db_query_temporary('SELECT status FROM {system}', array());  drupal_json_output(array(    'table_name' => $table_name,    'row_count' => db_select($table_name)->countQuery()->execute()->fetchField(),  ));  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_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();  drupal_json_output(array(    '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();  drupal_json_output(array(    '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'));  $query = $query->extend('TableSort')->orderByHeader($header);  // We need all the results at once to check the sort.  $tasks = $query->execute()->fetchAll();  drupal_json_output(array(    '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'));  $query = $query->extend('TableSort')->orderByHeader($header)->orderBy('priority');  // We need all the results at once to check the sort.  $tasks = $query->execute()->fetchAll();  drupal_json_output(array(    'tasks' => $tasks,  ));  exit;}/** * 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;}
 |