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=people.id"); $name_field = $query->addField('people', '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'; } } /** * Implement hook_query_TAG_alter(). Called by DatabaseTestCase::testAlterRemoveRange. */ function database_test_query_database_test_alter_remove_range_alter(QueryAlterableInterface $query) { $query->range(); } /** * Implement 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', ); 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; }