class MySql in Search API 8
Represents a MySQL-based database.
Hierarchy
- class \Drupal\search_api_db\DatabaseCompatibility\GenericDatabase implements DatabaseCompatibilityHandlerInterface
- class \Drupal\search_api_db\DatabaseCompatibility\MySql
Expanded class hierarchy of MySql
1 string reference to 'MySql'
- search_api_db.services.yml in modules/
search_api_db/ search_api_db.services.yml - modules/search_api_db/search_api_db.services.yml
1 service uses MySql
File
- modules/
search_api_db/ src/ DatabaseCompatibility/ MySql.php, line 12
Namespace
Drupal\search_api_db\DatabaseCompatibilityView source
class MySql extends GenericDatabase {
/**
* {@inheritdoc}
*/
public function alterNewTable($table, $type = 'text') {
// The Drupal MySQL integration defaults to using a 4-byte-per-character
// encoding, which would make it impossible to use our normal 255 characters
// long varchar fields in a primary key (since that would exceed the key's
// maximum size). Therefore, we have to convert all tables to the "utf8"
// character set – but we only want to make fulltext tables case-sensitive.
$charset = $type === 'text' ? 'utf8mb4' : 'utf8';
$collation = $type === 'text' ? 'utf8mb4_bin' : 'utf8_general_ci';
try {
$this->database
->query("ALTER TABLE {{$table}} CONVERT TO CHARACTER SET '{$charset}' COLLATE '{$collation}'");
} catch (\PDOException $e) {
$class = get_class($e);
$message = $e
->getMessage();
throw new SearchApiException("{$class} while trying to change collation of {$type} search data table '{$table}': {$message}", 0, $e);
} catch (DatabaseException $e) {
$class = get_class($e);
$message = $e
->getMessage();
throw new SearchApiException("{$class} while trying to change collation of {$type} search data table '{$table}': {$message}", 0, $e);
}
}
/**
* {@inheritdoc}
*/
public function preprocessIndexValue($value, $type = 'text') {
$value = parent::preprocessIndexValue($value, $type);
// As MySQL removes trailing whitespace when computing primary keys, we need
// to do the same or pseudo-duplicates could cause an exception ("Integrity
// constraint violation: Duplicate entry") during indexing.
if ($type !== 'text') {
$value = rtrim($value);
}
return $value;
}
/**
* {@inheritdoc}
*/
public function orderByRandom(SelectInterface $query) {
$alias = $query
->addExpression('rand()', 'random_order_field');
$query
->orderBy($alias);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
GenericDatabase:: |
protected | property | The connection to the database. | |
GenericDatabase:: |
protected | property | The transliteration service to use. | |
GenericDatabase:: |
public | function |
Creates a clone of this service for the given database. Overrides DatabaseCompatibilityHandlerInterface:: |
|
GenericDatabase:: |
public | function |
Retrieves the database connection this compatibility handler is based upon. Overrides DatabaseCompatibilityHandlerInterface:: |
|
GenericDatabase:: |
public | function | Constructs a GenericDatabase object. | |
MySql:: |
public | function |
Reacts to a new table being created. Overrides GenericDatabase:: |
|
MySql:: |
public | function |
Applies a random sort to the query. Overrides GenericDatabase:: |
|
MySql:: |
public | function |
Determines the canonical base form of a value. Overrides GenericDatabase:: |