Split DBStructure & View to avoid DB-calls and dependencies for basic operations

- new "Definition" classes vor DB and Views
- new "Writer" classes to create SQL definitions for DB and Views
- DBStructure & View are responsible to execute DB-querys
This commit is contained in:
Philipp 2022-07-12 23:21:16 +02:00
parent a2c929d128
commit a910fd8864
No known key found for this signature in database
GPG key ID: 24A7501396EB5432
30 changed files with 898 additions and 608 deletions

View file

@ -466,7 +466,7 @@ class APContact
}
// Limit the length on incoming fields
$apcontact = DBStructure::getFieldsForTable('apcontact', $apcontact);
$apcontact = DI::dbaDefinition()->getFieldsForTable('apcontact', $apcontact);
if (DBA::exists('apcontact', ['url' => $apcontact['url']])) {
DBA::update('apcontact', $apcontact, ['url' => $apcontact['url']]);

View file

@ -23,7 +23,6 @@ namespace Friendica\Model;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Core\Storage\Exception\InvalidClassStorageException;
use Friendica\Core\Storage\Exception\ReferenceStorageException;
@ -46,7 +45,7 @@ class Attach
*/
private static function getFields(): array
{
$allfields = DBStructure::definition(DI::app()->getBasePath(), false);
$allfields = DI::dbaDefinition()->getAll();
$fields = array_keys($allfields['attach']['fields']);
array_splice($fields, array_search('data', $fields), 1);
return $fields;

View file

@ -28,6 +28,7 @@ use Friendica\Core\System;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\ItemURI;
use PDOException;
@ -129,7 +130,7 @@ class User
$fields['rel'] = Contact::SELF;
}
return DBStructure::getFieldsForTable('user-contact', $fields);
return DI::dbaDefinition()->getFieldsForTable('user-contact', $fields);
}
/**

View file

@ -2075,7 +2075,7 @@ class GServer
*/
public static function update(array $fields, array $condition): bool
{
$fields = DBStructure::getFieldsForTable('gserver', $fields);
$fields = DI::dbaDefinition()->getFieldsForTable('gserver', $fields);
return DBA::update('gserver', $fields, $condition);
}

View file

@ -250,7 +250,7 @@ class Photo
*/
private static function getFields(): array
{
$allfields = DBStructure::definition(DI::app()->getBasePath(), false);
$allfields = DI::dbaDefinition()->getAll();
$fields = array_keys($allfields['photo']['fields']);
array_splice($fields, array_search('data', $fields), 1);
return $fields;

View file

@ -27,6 +27,7 @@ use Friendica\Core\System;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Protocol\Activity;
class Post
@ -45,7 +46,7 @@ class Post
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post', $data);
// Additionally assign the key fields
$fields['uri-id'] = $uri_id;
@ -524,7 +525,7 @@ class Post
// To ensure the data integrity we do it in an transaction
DBA::transaction();
$update_fields = DBStructure::getFieldsForTable('post-user', $fields);
$update_fields = DI::dbaDefinition()->getFieldsForTable('post-user', $fields);
if (!empty($update_fields)) {
$affected_count = 0;
$posts = DBA::select('post-user-view', ['post-user-id'], $condition);
@ -541,7 +542,7 @@ class Post
$affected = $affected_count;
}
$update_fields = DBStructure::getFieldsForTable('post-content', $fields);
$update_fields = DI::dbaDefinition()->getFieldsForTable('post-content', $fields);
if (!empty($update_fields)) {
$affected_count = 0;
$posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]);
@ -558,7 +559,7 @@ class Post
$affected = max($affected, $affected_count);
}
$update_fields = DBStructure::getFieldsForTable('post', $fields);
$update_fields = DI::dbaDefinition()->getFieldsForTable('post', $fields);
if (!empty($update_fields)) {
$affected_count = 0;
$posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]);
@ -592,7 +593,7 @@ class Post
$affected = max($affected, $affected_count);
}
$update_fields = DBStructure::getFieldsForTable('post-thread', $fields);
$update_fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $fields);
if (!empty($update_fields)) {
$affected_count = 0;
$posts = DBA::select('post-user-view', ['uri-id'], $thread_condition, ['group_by' => ['uri-id']]);
@ -609,7 +610,7 @@ class Post
$affected = max($affected, $affected_count);
}
$update_fields = DBStructure::getFieldsForTable('post-thread-user', $fields);
$update_fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $fields);
if (!empty($update_fields)) {
$affected_count = 0;
$posts = DBA::select('post-user-view', ['post-user-id'], $thread_condition);

View file

@ -26,6 +26,7 @@ use Friendica\Core\Protocol;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Post;
class Content
@ -44,7 +45,7 @@ class Content
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-content', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-content', $data);
// Additionally assign the key fields
$fields['uri-id'] = $uri_id;
@ -67,7 +68,7 @@ class Content
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-content', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-content', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -24,7 +24,7 @@ namespace Friendica\Model\Post;
use Friendica\Core\Logger;
use Friendica\Database\DBA;
use Friendica\Database\Database;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Post;
class History
@ -37,7 +37,7 @@ class History
*/
public static function add(int $uri_id, array $item)
{
$allfields = DBStructure::definition('', false);
$allfields = DI::dbaDefinition()->getAll();
$fields = array_keys($allfields['post-history']['fields']);
$post = Post::selectFirstPost($fields, ['uri-id' => $uri_id]);
@ -52,7 +52,7 @@ class History
}
$update = false;
$changed = DBStructure::getFieldsForTable('post-history', $item);
$changed = DI::dbaDefinition()->getFieldsForTable('post-history', $item);
unset($changed['uri-id']);
unset($changed['edited']);
foreach ($changed as $field => $content) {

View file

@ -24,6 +24,7 @@ namespace Friendica\Model\Post;
use BadMethodCallException;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
class Question
{
@ -42,7 +43,7 @@ class Question
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-question', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-question', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -24,6 +24,7 @@ namespace Friendica\Model\Post;
use BadMethodCallException;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
class QuestionOption
{
@ -43,7 +44,7 @@ class QuestionOption
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-question-option', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-question-option', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -25,6 +25,7 @@ use \BadMethodCallException;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
class Thread
{
@ -42,7 +43,7 @@ class Thread
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-thread', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $data);
// Additionally assign the key fields
$fields['uri-id'] = $uri_id;
@ -65,7 +66,7 @@ class Thread
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-thread', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-thread', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -25,6 +25,7 @@ use \BadMethodCallException;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
class ThreadUser
{
@ -43,7 +44,7 @@ class ThreadUser
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-thread-user', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $data);
// Additionally assign the key fields
$fields['uri-id'] = $uri_id;
@ -68,7 +69,7 @@ class ThreadUser
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-thread-user', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-thread-user', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -25,6 +25,7 @@ use Friendica\Database\DBA;
use \BadMethodCallException;
use Friendica\Database\Database;
use Friendica\Database\DBStructure;
use Friendica\DI;
class User
{
@ -47,7 +48,7 @@ class User
return false;
}
$fields = DBStructure::getFieldsForTable('post-user', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-user', $data);
// Additionally assign the key fields
$fields['uri-id'] = $uri_id;
@ -81,7 +82,7 @@ class User
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-user', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-user', $data);
// Remove the key fields
unset($fields['uri-id']);

View file

@ -67,7 +67,7 @@ class UserNotification
throw new BadMethodCallException('Empty URI_id');
}
$fields = DBStructure::getFieldsForTable('post-user-notification', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('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 = DBStructure::getFieldsForTable('post-user-notification', $data);
$fields = DI::dbaDefinition()->getFieldsForTable('post-user-notification', $data);
// Remove the key fields
unset($fields['uri-id']);