1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- /**
- * Implements hook_uninstall().
- */
- function search_api_db_uninstall() {
- if (module_exists('search_api')) {
- db_delete('search_api_server')
- ->condition('class', 'search_api_db_service')
- ->execute();
- }
- foreach (db_find_tables(Database::getConnection()->prefixTables('{search_api_db}') . '%') as $table) {
- if (preg_match('/search_api_db_.*$/', $table, $matches)) {
- db_drop_table($matches[0]);
- }
- }
- }
- /**
- * Implements hook_update_dependencies().
- */
- function search_api_db_update_dependencies() {
- // This update should run after primary IDs have been changed to machine names in the framework.
- $dependencies['search_api_db'][7101] = array(
- 'search_api' => 7102,
- );
- return $dependencies;
- }
- /**
- * Re-arranges the $server->options['indexes'] array to be keyed by machine_name
- * instead of by id.
- */
- function search_api_db_update_7101() {
- $query = db_select('search_api_server', 's');
- $query->addField('s', 'machine_name');
- $query->condition('class', 'search_api_db_service');
- $index_names = db_select('search_api_index', 'i')
- ->fields('i', array('id', 'machine_name'))
- ->condition('server', clone $query, 'IN')
- ->execute()
- ->fetchAllKeyed();
- $query->addField('s', 'options');
- $servers = $query->execute();
- foreach ($servers->fetchAllKeyed() as $name => $options) {
- $options = unserialize($options);
- if (empty($options['indexes'])) {
- continue;
- }
- $indexes = array();
- foreach ($options['indexes'] as $id => $info) {
- if (isset($index_names[$id])) {
- $indexes[$index_names[$id]] = $info;
- }
- }
- $options['indexes'] = $indexes;
- $options = serialize($options);
- db_update('search_api_server')
- ->fields(array(
- 'options' => $options,
- ))
- ->condition('machine_name', $name)
- ->execute();
- }
- }
- /**
- * Solves index problems with umlauts, accented characters, etc. on MySQL servers.
- */
- function search_api_db_update_7102() {
- global $databases;
- $server_options = db_select('search_api_server', 's')
- ->fields('s', array('options'))
- ->condition('class', 'search_api_db_service')
- ->execute()
- ->fetchCol();
- foreach ($server_options as $options) {
- $options = unserialize($options);
- list($key, $target) = explode(':', $options['database'], 2);
- $db_driver = $databases[$key][$target]['driver'];
- if ($db_driver === 'mysql' && !empty($options['indexes'])) {
- $prev_db = db_set_active($key);
- foreach ($options['indexes'] as $fields) {
- foreach ($fields as $field) {
- db_query("ALTER TABLE {{$field['table']}} CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_bin'", array(), array('target' => $target));
- }
- }
- db_set_active($prev_db);
- }
- }
- }
|