<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
*
* @return string with either "pdo" or "mysqli"
*/
- public static function getDriver()
+ public static function getDriver(): string
{
return DI::dba()->getDriver();
}
* Please use DBA::delete, DBA::insert, DBA::update, ... instead
*
* @param string $sql SQL statement
- * @return boolean Was the query successfull? False is returned only if an error occurred
+ * @return boolean Was the query successful? False is returned only if an error occurred
* @throws \Exception
*/
public static function e(string $sql): bool
/**
* Check if data exists
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $condition Array of fields for condition
* @return boolean Are there rows for that condition?
* @throws \Exception
/**
* Insert a row into a table
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $param parameter array
* @param int $duplicate_mode What to do on a duplicated entry
* @return boolean was the insert successful?
* Inserts a row with the provided data in the provided table.
* If the data corresponds to an existing row through a UNIQUE or PRIMARY index constraints, it updates the row instead.
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $param parameter array
* @return boolean was the insert successful?
* @throws \Exception
*
* This function can be extended in the future to accept a table array as well.
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @return boolean was the lock successful?
* @throws \Exception
*/
* Only set $old_fields to a boolean value when you are sure that you will update a single row.
* When you set $old_fields to "true" then $fields must contain all relevant fields!
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $fields contains the fields that are updated
* @param array $condition condition array with the key values
* @param array|boolean $old_fields array with the old field values that are about to be replaced (true = update on duplicate, false = don't update identical fields)
* @param array $params Parameters: "ignore" If set to "true" then the update is done with the ignore parameter
*
- * @return boolean was the update successfull?
+ * @return boolean was the update successful?
* @throws \Exception
*/
public static function update(string $table, array $fields, array $condition, $old_fields = [], array $params = []): bool
/**
* Retrieve a single record from a table and returns it in an associative array
*
- * @param string|array $table Table name or array [schema => table]
+ * @param string|array $table Table name in format schema.table (where schema is optional)
* @param array $fields
* @param array $condition
* @param array $params
/**
* Select rows from a table and fills an array with the data
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $fields Array of selected fields, empty for all
* @param array $condition Array of fields for condition
* @param array $params Array of several parameters
/**
* Select rows from a table
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $fields Array of selected fields, empty for all
* @param array $condition Array of fields for condition
* @param array $params Array of several parameters
/**
* Counts the rows from a table satisfying the provided condition
*
- * @param string $table Table name or array [schema => table]
+ * @param string $table Table name in format schema.table (where schema is optional)
* @param array $condition array of fields for condition
* @param array $params Array of several parameters
*
* Build the table query substring from one or more tables, with or without a schema.
*
* Expected formats:
- * - table
+ * - [table]
* - [table1, table2, ...]
* - [schema1 => table1, schema2 => table2, table3, ...]
*
*/
public static function buildTableString(array $tables): string
{
- $quotedTables = [];
-
- foreach ($tables as $schema => $table) {
- if (is_numeric($schema)) {
- $quotedTables[] = self::quoteIdentifier($table);
- } else {
- $quotedTables[] = self::quoteIdentifier($schema) . '.' . self::quoteIdentifier($table);
- }
- }
-
- return implode(', ', $quotedTables);
+ // Quote each entry
+ return implode(',', array_map([self::class, 'quoteIdentifier'], $tables));
}
/**
- * Escape an identifier (table or field name)
+ * Escape an identifier (table or field name) optional with a schema like ((schema.)table.)field
*
- * @param $identifier
- * @return string
+ * @param string $identifier Table, field name
+ * @return string Quotes table or field name
*/
public static function quoteIdentifier(string $identifier): string
{
- return '`' . str_replace('`', '``', $identifier) . '`';
+ return implode(
+ '.',
+ array_map(
+ function (string $identifier) { return '`' . str_replace('`', '``', $identifier) . '`'; },
+ explode('.', $identifier)
+ )
+ );
}
/**
public static function buildCondition(array &$condition = []): string
{
$condition = self::collapseCondition($condition);
-
+
$condition_string = '';
if (count($condition) > 0) {
$condition_string = " WHERE (" . array_shift($condition) . ")";
{
$groupby_string = '';
if (!empty($params['group_by'])) {
- $groupby_string = " GROUP BY " . implode(', ', array_map(['self', 'quoteIdentifier'], $params['group_by']));
+ $groupby_string = " GROUP BY " . implode(', ', array_map([self::class, 'quoteIdentifier'], $params['group_by']));
}
$order_string = '';
return DI::dba()->processlist();
}
+ /**
+ * Optimizes tables
+ *
+ * @param string $table a given table
+ *
+ * @return bool True, if successfully optimized, otherwise false
+ * @throws \Exception
+ */
+ public static function optimizeTable(string $table): bool
+ {
+ return DI::dba()->optimizeTable($table);
+ }
+
+ /**
+ * Kill sleeping database processes
+ */
+ public static function deleteSleepingProcesses()
+ {
+ DI::dba()->deleteSleepingProcesses();
+ }
+
/**
* Fetch a database variable
*