database_test.module

Same filename in other branches
  1. 9 core/modules/system/tests/modules/database_test/database_test.module
  2. 8.9.x core/modules/system/tests/modules/database_test/database_test.module
  3. 10 core/modules/system/tests/modules/database_test/database_test.module
  4. 11.x core/modules/system/tests/modules/database_test/database_test.module

File

modules/simpletest/tests/database_test.module

View source
<?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;
}

Functions

Title Deprecated Summary
database_test_db_query_temporary Run a db_query_temporary and output the table name and its number of rows.
database_test_even_pager_query Run a pager query and return the results.
database_test_menu Implements hook_menu().
database_test_odd_pager_query Run a pager query and return the results.
database_test_query_alter Implements hook_query_alter().
database_test_query_database_test_alter_remove_range_alter Implements hook_query_TAG_alter().
database_test_tablesort Run a tablesort query and return the results.
database_test_tablesort_first Run a tablesort query with a second order_by after and return the results.
database_test_theme_tablesort Output a form without setting a header sort.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.