diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php index b7eafaafd..7bb7120fa 100644 --- a/src/Console/DatabaseStructure.php +++ b/src/Console/DatabaseStructure.php @@ -40,25 +40,19 @@ class DatabaseStructure extends \Asika\SimpleConsole\Console { protected $helpOptions = ['h', 'help', '?']; - /** - * @var Database - */ + /** @var Database */ private $dba; - /** - * @var Cache - */ + + /** @var Cache */ private $configCache; - /** - * @var DbaDefinition - */ + + /** @var DbaDefinition */ private $dbaDefinition; - /** - * @var ViewDefinition - */ + + /** @var ViewDefinition */ private $viewDefinition; - /** - * @var string - */ + + /** @var string */ private $basePath; protected function getHelp() diff --git a/src/Core/Installer.php b/src/Core/Installer.php index 8ed6c9afa..ff759c9fe 100644 --- a/src/Core/Installer.php +++ b/src/Core/Installer.php @@ -192,7 +192,7 @@ class Installer * @return bool true if the installation was successful, otherwise false * @throws Exception */ - public function installDatabase() + public function installDatabase(): bool { $result = DBStructure::install(); diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index b4f8ed132..441116d16 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -142,6 +142,7 @@ class DBStructure * Print out database error messages * * @param string $message Message to be added to the error message + * * @return string Error message */ private static function printUpdateError(string $message): string @@ -155,6 +156,7 @@ class DBStructure /** * Perform a database structure dryrun (means: just simulating) * + * @return string Empty string if the update is successful, error messages otherwise * @throws Exception */ public static function dryRun(): string @@ -513,28 +515,28 @@ class DBStructure $fields = DBA::selectToArray('INFORMATION_SCHEMA.COLUMNS', ['COLUMN_NAME', 'COLUMN_TYPE', 'IS_NULLABLE', 'COLUMN_DEFAULT', 'EXTRA', - 'COLUMN_KEY', 'COLLATION_NAME', 'COLUMN_COMMENT'], + 'COLUMN_KEY', 'COLLATION_NAME', 'COLUMN_COMMENT'], ["`TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?", - DBA::databaseName(), $table]); + DBA::databaseName(), $table]); $foreign_keys = DBA::selectToArray('INFORMATION_SCHEMA.KEY_COLUMN_USAGE', ['COLUMN_NAME', 'CONSTRAINT_NAME', 'REFERENCED_TABLE_NAME', 'REFERENCED_COLUMN_NAME'], ["`TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `REFERENCED_TABLE_SCHEMA` IS NOT NULL", - DBA::databaseName(), $table]); + DBA::databaseName(), $table]); $table_status = DBA::selectFirst('INFORMATION_SCHEMA.TABLES', ['ENGINE', 'TABLE_COLLATION', 'TABLE_COMMENT'], ["`TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?", - DBA::databaseName(), $table]); + DBA::databaseName(), $table]); - $fielddata = []; - $indexdata = []; + $fielddata = []; + $indexdata = []; $foreigndata = []; if (DBA::isResult($foreign_keys)) { foreach ($foreign_keys as $foreign_key) { - $parameters = ['foreign' => [$foreign_key['REFERENCED_TABLE_NAME'] => $foreign_key['REFERENCED_COLUMN_NAME']]]; - $constraint = self::getConstraintName($table, $foreign_key['COLUMN_NAME'], $parameters); + $parameters = ['foreign' => [$foreign_key['REFERENCED_TABLE_NAME'] => $foreign_key['REFERENCED_COLUMN_NAME']]]; + $constraint = self::getConstraintName($table, $foreign_key['COLUMN_NAME'], $parameters); $foreigndata[$constraint] = $foreign_key; } } @@ -562,8 +564,8 @@ class DBStructure $fielddata = []; if (DBA::isResult($fields)) { foreach ($fields as $field) { - $search = ['tinyint(1)', 'tinyint(3) unsigned', 'tinyint(4)', 'smallint(5) unsigned', 'smallint(6)', 'mediumint(8) unsigned', 'mediumint(9)', 'bigint(20)', 'int(10) unsigned', 'int(11)']; - $replace = ['boolean', 'tinyint unsigned', 'tinyint', 'smallint unsigned', 'smallint', 'mediumint unsigned', 'mediumint', 'bigint', 'int unsigned', 'int']; + $search = ['tinyint(1)', 'tinyint(3) unsigned', 'tinyint(4)', 'smallint(5) unsigned', 'smallint(6)', 'mediumint(8) unsigned', 'mediumint(9)', 'bigint(20)', 'int(10) unsigned', 'int(11)']; + $replace = ['boolean', 'tinyint unsigned', 'tinyint', 'smallint unsigned', 'smallint', 'mediumint unsigned', 'mediumint', 'bigint', 'int unsigned', 'int']; $field['COLUMN_TYPE'] = str_replace($search, $replace, $field['COLUMN_TYPE']); $fielddata[$field['COLUMN_NAME']]['type'] = $field['COLUMN_TYPE']; @@ -585,13 +587,13 @@ class DBStructure } $fielddata[$field['COLUMN_NAME']]['Collation'] = $field['COLLATION_NAME']; - $fielddata[$field['COLUMN_NAME']]['comment'] = $field['COLUMN_COMMENT']; + $fielddata[$field['COLUMN_NAME']]['comment'] = $field['COLUMN_COMMENT']; } } return [ - 'fields' => $fielddata, - 'indexes' => $indexdata, + 'fields' => $fielddata, + 'indexes' => $indexdata, 'foreign_keys' => $foreigndata, 'table_status' => $table_status ]; @@ -722,7 +724,7 @@ class DBStructure { return DBA::exists('INFORMATION_SCHEMA.KEY_COLUMN_USAGE', ["`TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `REFERENCED_TABLE_SCHEMA` IS NOT NULL", - DBA::databaseName(), $table, $field]); + DBA::databaseName(), $table, $field]); } /** @@ -795,8 +797,8 @@ class DBStructure if (self::existsTable('user') && !DBA::exists('user', ['uid' => 0])) { $user = [ - 'verified' => true, - 'page-flags' => User::PAGE_FLAGS_SOAPBOX, + 'verified' => true, + 'page-flags' => User::PAGE_FLAGS_SOAPBOX, 'account-type' => User::ACCOUNT_TYPE_RELAY, ]; DBA::insert('user', $user); @@ -872,7 +874,7 @@ class DBStructure $permission = ''; } $fields = ['id' => $set['psid'], 'uid' => $set['uid'], 'allow_cid' => $permission, - 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']; + 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']; DBA::insert('permissionset', $fields); } DBA::close($sets); @@ -902,7 +904,7 @@ class DBStructure $isUpdate = false; $processes = DBA::select('information_schema.processlist', ['info'], [ - 'db' => DBA::databaseName(), + 'db' => DBA::databaseName(), 'command' => ['Query', 'Execute'] ]); diff --git a/src/Database/Definition/DbaDefinition.php b/src/Database/Definition/DbaDefinition.php index 9f42d176a..27eb17522 100644 --- a/src/Database/Definition/DbaDefinition.php +++ b/src/Database/Definition/DbaDefinition.php @@ -61,13 +61,14 @@ class DbaDefinition } /** - * Get field data for the given table + * Truncate field data for the given table + * + * @param string $table Name of the table to load field definitions for + * @param array $data data fields * - * @param string $table Tavle to load field definitions for - * @param array $data data fields * @return array fields for the given */ - public function getFieldsForTable(string $table, array $data = []): array + public function truncateFieldsForTable(string $table, array $data): array { $definition = $this->definition; if (empty($definition[$table])) { diff --git a/src/Model/APContact.php b/src/Model/APContact.php index bc51f37aa..d07d24b42 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -466,7 +466,7 @@ class APContact } // Limit the length on incoming fields - $apcontact = DI::dbaDefinition()->getFieldsForTable('apcontact', $apcontact); + $apcontact = DI::dbaDefinition()->truncateFieldsForTable('apcontact', $apcontact); if (DBA::exists('apcontact', ['url' => $apcontact['url']])) { DBA::update('apcontact', $apcontact, ['url' => $apcontact['url']]); diff --git a/src/Model/Contact/User.php b/src/Model/Contact/User.php index bc500d523..1452369e5 100644 --- a/src/Model/Contact/User.php +++ b/src/Model/Contact/User.php @@ -130,7 +130,7 @@ class User $fields['rel'] = Contact::SELF; } - return DI::dbaDefinition()->getFieldsForTable('user-contact', $fields); + return DI::dbaDefinition()->truncateFieldsForTable('user-contact', $fields); } /** diff --git a/src/Model/GServer.php b/src/Model/GServer.php index e6f81a53f..a48f6e4ca 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -2075,7 +2075,7 @@ class GServer */ public static function update(array $fields, array $condition): bool { - $fields = DI::dbaDefinition()->getFieldsForTable('gserver', $fields); + $fields = DI::dbaDefinition()->truncateFieldsForTable('gserver', $fields); return DBA::update('gserver', $fields, $condition); } diff --git a/src/Model/Post.php b/src/Model/Post.php index a83a0920a..2b71e2f14 100644 --- a/src/Model/Post.php +++ b/src/Model/Post.php @@ -46,7 +46,7 @@ class Post throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; @@ -525,7 +525,7 @@ class Post // To ensure the data integrity we do it in an transaction DBA::transaction(); - $update_fields = DI::dbaDefinition()->getFieldsForTable('post-user', $fields); + $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post-user', $fields); if (!empty($update_fields)) { $affected_count = 0; $posts = DBA::select('post-user-view', ['post-user-id'], $condition); @@ -542,7 +542,7 @@ class Post $affected = $affected_count; } - $update_fields = DI::dbaDefinition()->getFieldsForTable('post-content', $fields); + $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post-content', $fields); if (!empty($update_fields)) { $affected_count = 0; $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); @@ -559,7 +559,7 @@ class Post $affected = max($affected, $affected_count); } - $update_fields = DI::dbaDefinition()->getFieldsForTable('post', $fields); + $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post', $fields); if (!empty($update_fields)) { $affected_count = 0; $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); @@ -593,7 +593,7 @@ class Post $affected = max($affected, $affected_count); } - $update_fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $fields); + $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $fields); if (!empty($update_fields)) { $affected_count = 0; $posts = DBA::select('post-user-view', ['uri-id'], $thread_condition, ['group_by' => ['uri-id']]); @@ -610,7 +610,7 @@ class Post $affected = max($affected, $affected_count); } - $update_fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $fields); + $update_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread-user', $fields); if (!empty($update_fields)) { $affected_count = 0; $posts = DBA::select('post-user-view', ['post-user-id'], $thread_condition); diff --git a/src/Model/Post/Content.php b/src/Model/Post/Content.php index e7723f1d1..63ea9b8cd 100644 --- a/src/Model/Post/Content.php +++ b/src/Model/Post/Content.php @@ -45,7 +45,7 @@ class Content throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-content', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-content', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; @@ -68,7 +68,7 @@ class Content throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-content', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-content', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/History.php b/src/Model/Post/History.php index 29e0cf8c1..e7699e20c 100644 --- a/src/Model/Post/History.php +++ b/src/Model/Post/History.php @@ -52,7 +52,7 @@ class History } $update = false; - $changed = DI::dbaDefinition()->getFieldsForTable('post-history', $item); + $changed = DI::dbaDefinition()->truncateFieldsForTable('post-history', $item); unset($changed['uri-id']); unset($changed['edited']); foreach ($changed as $field => $content) { diff --git a/src/Model/Post/Question.php b/src/Model/Post/Question.php index d73c54a58..6729e9f52 100644 --- a/src/Model/Post/Question.php +++ b/src/Model/Post/Question.php @@ -43,7 +43,7 @@ class Question throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-question', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-question', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/QuestionOption.php b/src/Model/Post/QuestionOption.php index 03ac0633c..88617b21f 100644 --- a/src/Model/Post/QuestionOption.php +++ b/src/Model/Post/QuestionOption.php @@ -44,7 +44,7 @@ class QuestionOption throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-question-option', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-question-option', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/Thread.php b/src/Model/Post/Thread.php index c432c6d7f..002b5ecb5 100644 --- a/src/Model/Post/Thread.php +++ b/src/Model/Post/Thread.php @@ -43,7 +43,7 @@ class Thread throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; @@ -66,7 +66,7 @@ class Thread throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/ThreadUser.php b/src/Model/Post/ThreadUser.php index 2e850de05..a6a3bbd92 100644 --- a/src/Model/Post/ThreadUser.php +++ b/src/Model/Post/ThreadUser.php @@ -44,7 +44,7 @@ class ThreadUser throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread-user', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; @@ -69,7 +69,7 @@ class ThreadUser throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread-user', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/User.php b/src/Model/Post/User.php index efbcaf635..9da971806 100644 --- a/src/Model/Post/User.php +++ b/src/Model/Post/User.php @@ -48,7 +48,7 @@ class User return false; } - $fields = DI::dbaDefinition()->getFieldsForTable('post-user', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-user', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; @@ -82,7 +82,7 @@ class User throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-user', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-user', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Model/Post/UserNotification.php b/src/Model/Post/UserNotification.php index 127857db4..4a57ff6ff 100644 --- a/src/Model/Post/UserNotification.php +++ b/src/Model/Post/UserNotification.php @@ -67,7 +67,7 @@ class UserNotification throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-user-notification', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-user-notification', $data); $fields['uri-id'] = $uri_id; $fields['uid'] = $uid; @@ -91,7 +91,7 @@ class UserNotification throw new BadMethodCallException('Empty URI_id'); } - $fields = DI::dbaDefinition()->getFieldsForTable('post-user-notification', $data); + $fields = DI::dbaDefinition()->truncateFieldsForTable('post-user-notification', $data); // Remove the key fields unset($fields['uri-id']); diff --git a/src/Util/Writer/DbaDefinitionSqlWriter.php b/src/Util/Writer/DbaDefinitionSqlWriter.php index 556957a85..f5e41847f 100644 --- a/src/Util/Writer/DbaDefinitionSqlWriter.php +++ b/src/Util/Writer/DbaDefinitionSqlWriter.php @@ -74,7 +74,7 @@ class DbaDefinitionSqlWriter $foreign_keys = []; foreach ($tableStructure['fields'] as $fieldName => $field) { - $sql_rows[] = '`' . static::escape($fieldName) . '` ' . self::FieldCommand($field); + $sql_rows[] = '`' . static::escape($fieldName) . '` ' . self::fieldCommand($field); if (!empty($field['primary'])) { $primary_keys[] = $fieldName; } @@ -170,7 +170,7 @@ class DbaDefinitionSqlWriter */ public static function addTableField(string $fieldName, array $parameters): string { - return sprintf("ADD `%s` %s", static::escape($fieldName), static::FieldCommand($parameters)); + return sprintf("ADD `%s` %s", static::escape($fieldName), static::fieldCommand($parameters)); } /** @@ -183,7 +183,7 @@ class DbaDefinitionSqlWriter */ public static function modifyTableField(string $fieldName, array $parameters): string { - return sprintf("MODIFY `%s` %s", static::escape($fieldName), self::FieldCommand($parameters, false)); + return sprintf("MODIFY `%s` %s", static::escape($fieldName), self::fieldCommand($parameters, false)); } /** @@ -193,7 +193,7 @@ class DbaDefinitionSqlWriter * @param boolean $create Whether to include PRIMARY KEY statement (unused) * @return string SQL statement part */ - public static function FieldCommand(array $parameters, bool $create = true): string + public static function fieldCommand(array $parameters, bool $create = true): string { $fieldstruct = $parameters['type']; diff --git a/src/Worker/ExpirePosts.php b/src/Worker/ExpirePosts.php index 704e8bd94..d09376d60 100644 --- a/src/Worker/ExpirePosts.php +++ b/src/Worker/ExpirePosts.php @@ -122,7 +122,7 @@ class ExpirePosts $rows = 0; $userposts = DBA::select('post-user', [], ["`uri-id` not in (select `uri-id` from `post`)"]); while ($fields = DBA::fetch($userposts)) { - $post_fields = DI::dbaDefinition()->getFieldsForTable('post', $fields); + $post_fields = DI::dbaDefinition()->truncateFieldsForTable('post', $fields); DBA::insert('post', $post_fields, Database::INSERT_IGNORE); $rows++; } @@ -136,7 +136,7 @@ class ExpirePosts $rows = 0; $userposts = DBA::select('post-user', [], ["`gravity` = ? AND `uri-id` not in (select `uri-id` from `post-thread`)", GRAVITY_PARENT]); while ($fields = DBA::fetch($userposts)) { - $post_fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $fields); + $post_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread', $fields); $post_fields['commented'] = $post_fields['changed'] = $post_fields['created']; DBA::insert('post-thread', $post_fields, Database::INSERT_IGNORE); $rows++; @@ -151,7 +151,7 @@ class ExpirePosts $rows = 0; $userposts = DBA::select('post-user', [], ["`gravity` = ? AND `id` not in (select `post-user-id` from `post-thread-user`)", GRAVITY_PARENT]); while ($fields = DBA::fetch($userposts)) { - $post_fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $fields); + $post_fields = DI::dbaDefinition()->truncateFieldsForTable('post-thread-user', $fields); $post_fields['commented'] = $post_fields['changed'] = $post_fields['created']; DBA::insert('post-thread-user', $post_fields, Database::INSERT_IGNORE); $rows++;