diff -r 07239de796bb -r e756a8c72c3d cms/drupal/modules/simpletest/tests/database_test.module --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/drupal/modules/simpletest/tests/database_test.module Fri Sep 08 12:04:06 2017 +0200 @@ -0,0 +1,241 @@ +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; +}