sql fields stored in static

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-05-07 12:36:55 -01:00
parent 85b7f99868
commit 660facc5da
25 changed files with 245 additions and 152 deletions

View file

@ -11,7 +11,7 @@
"authors": [
{
"name": "Maxence Lange",
"email": "maxence@nextcloud.com"
"email": "maxence@artificial-owl.com"
}
],
"autoload": {

View file

@ -30,6 +30,12 @@ namespace OCA\Circles\Db;
use OCA\Circles\Exceptions\GSStatusException;
/**
* @deprecated
* Class CircleProviderRequest
*
* @package OCA\Circles\Db
*/
class CircleProviderRequest extends CircleProviderRequestBuilder {

View file

@ -39,6 +39,12 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\NotFoundException;
use OCP\Share\IShare;
/**
* @deprecated
* Class CircleProviderRequestBuilder
*
* @package OCA\Circles\Db
*/
class CircleProviderRequestBuilder extends DeprecatedRequestBuilder {

View file

@ -75,22 +75,9 @@ class CircleRequestBuilder extends CoreRequestBuilder {
*/
protected function getCircleSelectSql(string $alias = CoreQueryBuilder::CIRCLE): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->selectDistinct($alias . '.unique_id')
->addSelect(
$alias . '.name',
$alias . '.display_name',
$alias . '.source',
$alias . '.description',
$alias . '.settings',
$alias . '.config',
$alias . '.contact_addressbook',
$alias . '.contact_groupname',
$alias . '.creation'
)
->from(self::TABLE_CIRCLE, $alias)
->groupBy($alias . '.unique_id')
->orderBy($alias . '.creation', 'asc')
->setDefaultSelectAlias($alias);
$qb->generateSelect(self::TABLE_CIRCLE, self::$tables[self::TABLE_CIRCLE], $alias, true)
->generateGroupBy(self::$tables[self::TABLE_CIRCLE], $alias)
->orderBy($alias . '.creation', 'asc');
return $qb;
}

View file

@ -62,6 +62,7 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
const CIRCLE = 'circle';
const MEMBER = 'member';
const OWNER = 'owner';
const FEDERATED_EVENT = 'federatedEvent';
const REMOTE = 'remote';
const BASED_ON = 'basedOn';
const INITIATOR = 'initiator';
@ -192,6 +193,7 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
/** @var array */
private $options = [];
/**
* CoreRequestBuilder constructor.
*/
@ -1134,13 +1136,13 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
$aliasFileCache = $this->generateAlias($aliasShare, self::FILE_CACHE);
$aliasStorages = $this->generateAlias($aliasFileCache, self::STORAGES);
$fieldsFileCache = [
'fileid', 'path', 'permissions', 'storage', 'path_hash', 'parent', 'name', 'mimetype', 'mimepart',
'size', 'mtime', 'storage_mtime', 'encrypted', 'unencrypted_size', 'etag', 'checksum'
];
$this->generateSelectAlias($fieldsFileCache, $aliasFileCache, $aliasFileCache, [])
->generateSelectAlias(['id'], $aliasStorages, $aliasStorages, [])
$this->generateSelectAlias(
CoreRequestBuilder::$outsideTables[self::FILE_CACHE],
$aliasFileCache,
$aliasFileCache,
[]
)
->generateSelectAlias(CoreRequestBuilder::$outsideTables[self::STORAGES], $aliasStorages, $aliasStorages, [])
->leftJoin(
$aliasShare, CoreRequestBuilder::TABLE_FILE_CACHE, $aliasFileCache,
$expr->eq($aliasShare . '.file_source', $aliasFileCache . '.fileid')
@ -1236,12 +1238,12 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
* @return CoreQueryBuilder
*/
private function generateCircleSelectAlias(string $alias, array $default = []): self {
$fields = [
'unique_id', 'name', 'display_name', 'source', 'description', 'settings', 'config',
'contact_addressbook', 'contact_groupname', 'creation'
];
$this->generateSelectAlias($fields, $alias, $alias, $default);
$this->generateSelectAlias(
CoreRequestBuilder::$tables[CoreRequestBuilder::TABLE_CIRCLE],
$alias,
$alias,
$default
);
return $this;
}
@ -1253,12 +1255,12 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
* @return $this
*/
private function generateMemberSelectAlias(string $alias, array $default = []): self {
$fields = [
'circle_id', 'single_id', 'user_id', 'user_type', 'member_id', 'instance', 'cached_name',
'cached_update', 'status', 'level', 'note', 'contact_id', 'contact_meta', 'joined'
];
$this->generateSelectAlias($fields, $alias, $alias, $default);
$this->generateSelectAlias(
CoreRequestBuilder::$tables[CoreRequestBuilder::TABLE_MEMBER],
$alias,
$alias,
$default
);
return $this;
}
@ -1276,11 +1278,12 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
string $prefix = '',
array $default = []
): self {
$fields = [
'single_id', 'circle_id', 'level', 'inheritance_first', 'inheritance_last', 'inheritance_path',
'inheritance_depth'
];
$this->generateSelectAlias($fields, $alias, ($prefix === '') ? $alias : $prefix, $default);
$this->generateSelectAlias(
CoreRequestBuilder::$tables[CoreRequestBuilder::TABLE_MEMBERSHIP],
$alias,
($prefix === '') ? $alias : $prefix,
$default
);
return $this;
}
@ -1293,9 +1296,12 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
* @return $this
*/
private function generateRemoteInstanceSelectAlias(string $alias, array $default = []): self {
$fields = ['id', 'type', 'uid', 'instance', 'href', 'item', 'creation'];
$this->generateSelectAlias($fields, $alias, $alias, $default);
$this->generateSelectAlias(
CoreRequestBuilder::$tables[CoreRequestBuilder::TABLE_REMOTE],
$alias,
$alias,
$default
);
return $this;
}

View file

@ -73,23 +73,123 @@ class CoreRequestBuilder {
const NC_TABLE_GROUP_USER = 'group_user';
/** @var array */
private $tables = [
self::TABLE_CIRCLE,
self::TABLE_MEMBER,
self::TABLE_MEMBERSHIP,
self::TABLE_REMOTE,
self::TABLE_EVENT,
self::TABLE_MOUNT,
self::TABLE_MOUNTPOINT,
self::TABLE_SHARE_LOCKS,
self::TABLE_TOKENS,
self::TABLE_GSSHARES,
self::TABLE_GSSHARES_MOUNTPOINT
static $tables = [
self::TABLE_CIRCLE => [
'unique_id',
'name',
'display_name',
'source',
'description',
'settings',
'config',
'contact_addressbook',
'contact_groupname',
'creation'
],
self::TABLE_MEMBER => [
'circle_id',
'member_id',
'single_id',
'user_id',
'instance',
'user_type',
'level',
'status',
'note',
'contact_id',
'cached_name',
'cached_update',
'contact_meta',
'joined'
],
self::TABLE_MEMBERSHIP => [
'single_id',
'circle_id',
'level',
'inheritance_first',
'inheritance_last',
'inheritance_path',
'inheritance_depth'
],
self::TABLE_REMOTE => [
'id',
'type',
'uid',
'instance',
'href',
'item',
'creation'
],
self::TABLE_EVENT => [
'token',
'event',
'result',
'instance',
'severity',
'status',
'creation'
],
self::TABLE_MOUNT => [
'id',
'mount_id',
'circle_id',
'single_id',
'token',
'parent',
'mountpoint',
'mountpoint_hash'
],
self::TABLE_MOUNTPOINT => [],
self::TABLE_SHARE_LOCKS => [],
self::TABLE_TOKENS => [],
self::TABLE_GSSHARES => [],
self::TABLE_GSSHARES_MOUNTPOINT => []
];
static $outsideTables = [
self::TABLE_SHARE => [
'id',
'share_type',
'share_with',
'uid_owner',
'uid_initiator',
'parent',
'item_type',
'item_source',
'item_target',
'file_source',
'file_target',
'permissions',
'stime',
'accepted',
'expiration',
'token',
'mail_send'
],
self::TABLE_FILE_CACHE => [
'fileid',
'path',
'permissions',
'storage',
'path_hash',
'parent',
'name',
'mimetype',
'mimepart',
'size',
'mtime',
'storage_mtime',
'encrypted',
'unencrypted_size',
'etag',
'checksum'
],
self::TABLE_STORAGES => [
'id'
]
];
/** @var TimezoneService */
protected $timezoneService;
@ -145,7 +245,7 @@ class CoreRequestBuilder {
*
*/
public function cleanDatabase(): void {
foreach ($this->tables as $table) {
foreach (array_keys(self::$tables) as $table) {
$qb = $this->getQueryBuilder();
try {
$qb->delete($table);
@ -176,7 +276,7 @@ class CoreRequestBuilder {
$dbConn = \OC::$server->get(Connection::class);
$schema = new SchemaWrapper($dbConn);
foreach ($this->tables as $table) {
foreach (array_keys(self::$tables) as $table) {
if ($schema->hasTable($table)) {
$schema->dropTable($table);
}

View file

@ -73,12 +73,11 @@ class EventWrapperRequestBuilder extends CoreRequestBuilder {
protected function getEventWrapperSelectSql(): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
'gse.token', 'gse.event', 'gse.result', 'gse.instance', 'gse.severity', 'gse.status',
'gse.creation'
)
->from(self::TABLE_EVENT, 'gse')
->setDefaultSelectAlias('gse');
$qb->generateSelect(
self::TABLE_EVENT,
self::$tables[self::TABLE_EVENT],
CoreQueryBuilder::FEDERATED_EVENT
);
return $qb;
}

View file

@ -31,6 +31,12 @@ namespace OCA\Circles\Db;
use OCA\Circles\Exceptions\FederatedLinkDoesNotExistException;
use OCA\Circles\Model\FederatedLink;
/**
* @deprecated
* Class FederatedLinksRequest
*
* @package OCA\Circles\Db
*/
class FederatedLinksRequest extends FederatedLinksRequestBuilder {

View file

@ -36,6 +36,13 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\IL10N;
/**
* @deprecated
* Class FederatedLinksRequestBuilder
*
* @package OCA\Circles\Db
*/
class FederatedLinksRequestBuilder extends DeprecatedRequestBuilder {

View file

@ -32,6 +32,7 @@ use OCA\Circles\Model\DeprecatedMember;
/**
* @deprecated
* Class SharesRequest
*
* @package OCA\Circles\Db

View file

@ -30,6 +30,13 @@ namespace OCA\Circles\Db;
use OCP\DB\QueryBuilder\IQueryBuilder;
/**
* @deprecated
* Class FileSharesRequestBuilder
*
* @package OCA\Circles\Db
*/
class FileSharesRequestBuilder extends DeprecatedRequestBuilder {

View file

@ -37,6 +37,7 @@ use OCP\Share\Exceptions\ShareNotFound;
/**
* @deprecated
* Class GSSharesRequest
*
* @package OCA\Circles\Db

View file

@ -34,7 +34,8 @@ use OCA\Circles\Model\GlobalScale\GSShareMountpoint;
use OCP\DB\QueryBuilder\IQueryBuilder;
/**
/** * @deprecated
* Class GSSharesRequestBuilder
*
* @package OCA\Circles\Db

View file

@ -242,7 +242,7 @@ class MemberRequest extends MemberRequestBuilder {
$aliasMembership = $qb->generateAlias(CoreQueryBuilder::MEMBER, CoreQueryBuilder::MEMBERSHIPS);
$qb->orderBy($aliasMembership . '.inheritance_depth', 'asc');
$qb->groupBy(CoreQueryBuilder::MEMBER . '.single_id');
// $qb->groupBy(CoreQueryBuilder::MEMBER . '.single_id');
return $this->getItemsFromRequest($qb);
}
@ -279,7 +279,7 @@ class MemberRequest extends MemberRequestBuilder {
$qb->limitToCircleId($circleId);
$qb->andwhere($qb->expr()->nonEmptyString(CoreQueryBuilder::MEMBER . '.instance'));
$qb->groupBy(CoreQueryBuilder::MEMBER . '.instance');
// $qb->groupBy(CoreQueryBuilder::MEMBER . '.instance');
return array_map(
function(Member $member): string {
@ -335,7 +335,7 @@ class MemberRequest extends MemberRequestBuilder {
public function searchFederatedUsers(string $needle): array {
$qb = $this->getMemberSelectSql();
$qb->searchInDBField('user_id', '%' . $needle . '%');
$qb->groupBy('single_id');
// $qb->groupBy('single_id');
return $this->getItemsFromRequest($qb, true);
}

View file

@ -83,26 +83,13 @@ class MemberRequestBuilder extends CoreRequestBuilder {
bool $getBasedOn = true
): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
CoreQueryBuilder::MEMBER . '.circle_id',
CoreQueryBuilder::MEMBER . '.member_id',
CoreQueryBuilder::MEMBER . '.single_id',
CoreQueryBuilder::MEMBER . '.user_id',
CoreQueryBuilder::MEMBER . '.instance',
CoreQueryBuilder::MEMBER . '.user_type',
CoreQueryBuilder::MEMBER . '.level',
CoreQueryBuilder::MEMBER . '.status',
CoreQueryBuilder::MEMBER . '.note',
CoreQueryBuilder::MEMBER . '.contact_id',
CoreQueryBuilder::MEMBER . '.cached_name',
CoreQueryBuilder::MEMBER . '.cached_update',
CoreQueryBuilder::MEMBER . '.contact_meta',
CoreQueryBuilder::MEMBER . '.joined'
$qb->generateSelect(
self::TABLE_MEMBER,
self::$tables[self::TABLE_MEMBER],
CoreQueryBuilder::MEMBER
)
->from(self::TABLE_MEMBER, CoreQueryBuilder::MEMBER)
->orderBy(CoreQueryBuilder::MEMBER . '.joined')
->groupBy(CoreQueryBuilder::MEMBER . '.member_id')
->setDefaultSelectAlias(CoreQueryBuilder::MEMBER);
->generateGroupBy(self::$tables[self::TABLE_MEMBER], CoreQueryBuilder::MEMBER)
->orderBy(CoreQueryBuilder::MEMBER . '.joined');
if ($getBasedOn) {
$qb->leftJoinBasedOn(CoreQueryBuilder::MEMBER, $initiator);

View file

@ -72,17 +72,11 @@ class MembershipRequestBuilder extends CoreRequestBuilder {
*/
protected function getMembershipSelectSql(): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
CoreQueryBuilder::MEMBER . '.single_id',
CoreQueryBuilder::MEMBER . '.circle_id',
CoreQueryBuilder::MEMBER . '.level',
CoreQueryBuilder::MEMBER . '.inheritance_first',
CoreQueryBuilder::MEMBER . '.inheritance_last',
CoreQueryBuilder::MEMBER . '.inheritance_path',
CoreQueryBuilder::MEMBER . '.inheritance_depth'
)
->from(self::TABLE_MEMBERSHIP, CoreQueryBuilder::MEMBER)
->setDefaultSelectAlias(CoreQueryBuilder::MEMBER);
$qb->generateSelect(
self::TABLE_MEMBERSHIP,
self::$tables[self::TABLE_MEMBERSHIP],
CoreQueryBuilder::MEMBERSHIPS
);
return $qb;
}

View file

@ -74,19 +74,7 @@ class MountRequestBuilder extends CoreRequestBuilder {
*/
protected function getMountSelectSql(string $alias = CoreQueryBuilder::MOUNT): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
$alias . '.id',
$alias . '.mount_id',
$alias . '.circle_id',
$alias . '.single_id',
$alias . '.token',
$alias . '.parent',
$alias . '.mountpoint',
$alias . '.mountpoint_hash'
)
->from(self::TABLE_MOUNT, $alias)
->setDefaultSelectAlias($alias);
$qb->generateSelect(self::TABLE_MOUNT, self::$tables[self::TABLE_MOUNT], $alias);
return $qb;
}

View file

@ -198,7 +198,7 @@ class RemoteRequest extends RemoteRequestBuilder {
}
$qb->andWhere($orX)
->groupBy(CoreQueryBuilder::REMOTE . '.instance');
->generateGroupBy(self::$tables[self::TABLE_REMOTE], CoreQueryBuilder::REMOTE);
return $this->getItemsFromRequest($qb);
}

View file

@ -77,17 +77,7 @@ class RemoteRequestBuilder extends CoreRequestBuilder {
*/
protected function getRemoteSelectSql(string $alias = CoreQueryBuilder::REMOTE): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
$alias . '.id',
$alias . '.type',
$alias . '.uid',
$alias . '.instance',
$alias . '.href',
$alias . '.item',
$alias . '.creation'
)
->from(self::TABLE_REMOTE, $alias)
->setDefaultSelectAlias($alias);
$qb->generateSelect(self::TABLE_REMOTE, self::$tables[self::TABLE_REMOTE], $alias);
return $qb;
}

View file

@ -162,7 +162,11 @@ class ShareWrapperRequest extends ShareWrapperRequestBuilder {
}
if ($completeDetails) {
$qb->addGroupBy($aliasMembership . '.single_id');
$qb->generateGroupBy(
self::$tables[self::TABLE_MEMBERSHIP],
$aliasMembership,
true
);
}
return $this->getItemsFromRequest($qb);
@ -230,7 +234,11 @@ class ShareWrapperRequest extends ShareWrapperRequestBuilder {
$qb->leftJoinInheritedMembers(CoreQueryBuilder::SHARE, 'share_with');
$qb->leftJoinShareChild(CoreQueryBuilder::SHARE);
$qb->addGroupBy($aliasMembership . '.single_id');
$qb->generateGroupBy(
self::$tables[self::TABLE_MEMBERSHIP],
$aliasMembership,
true
);
}
return $this->getItemsFromRequest($qb);
@ -313,7 +321,11 @@ class ShareWrapperRequest extends ShareWrapperRequestBuilder {
$qb->leftJoinInheritedMembers(CoreQueryBuilder::SHARE, 'share_with');
$qb->leftJoinFileCache(CoreQueryBuilder::SHARE);
$qb->leftJoinShareChild(CoreQueryBuilder::SHARE, $aliasMembership);
$qb->addGroupBy($aliasMembership . '.single_id');
$qb->generateGroupBy(
self::$tables[self::TABLE_MEMBERSHIP],
$aliasMembership,
true
);
}
$qb->chunk($offset, $limit);

View file

@ -69,35 +69,16 @@ class ShareWrapperRequestBuilder extends CoreRequestBuilder {
/**
* @param string $alias
*
* @return CoreQueryBuilder
*/
protected function getShareSelectSql(): CoreQueryBuilder {
protected function getShareSelectSql(string $alias = CoreQueryBuilder::SHARE): CoreQueryBuilder {
$qb = $this->getQueryBuilder();
$qb->select(
CoreQueryBuilder::SHARE . '.id',
CoreQueryBuilder::SHARE . '.share_type',
CoreQueryBuilder::SHARE . '.share_with',
CoreQueryBuilder::SHARE . '.uid_owner',
CoreQueryBuilder::SHARE . '.uid_initiator',
CoreQueryBuilder::SHARE . '.parent',
CoreQueryBuilder::SHARE . '.item_type',
CoreQueryBuilder::SHARE . '.item_source',
CoreQueryBuilder::SHARE . '.item_target',
CoreQueryBuilder::SHARE . '.file_source',
CoreQueryBuilder::SHARE . '.file_target',
CoreQueryBuilder::SHARE . '.permissions',
CoreQueryBuilder::SHARE . '.stime',
CoreQueryBuilder::SHARE . '.accepted',
CoreQueryBuilder::SHARE . '.expiration',
CoreQueryBuilder::SHARE . '.token',
CoreQueryBuilder::SHARE . '.mail_send'
)
->from(self::TABLE_SHARE, CoreQueryBuilder::SHARE)
->setDefaultSelectAlias(CoreQueryBuilder::SHARE)
->groupBy(CoreQueryBuilder::SHARE . '.id')
$qb->generateSelect(self::TABLE_SHARE, self::$outsideTables[self::TABLE_SHARE], $alias)
->generateGroupBy(self::$outsideTables[self::TABLE_SHARE], $alias)
->limitToShareType(Share::TYPE_CIRCLE);
return $qb;
}

View file

@ -31,6 +31,12 @@ namespace OCA\Circles\Db;
use OCA\Circles\Exceptions\SharingFrameDoesNotExistException;
use OCA\Circles\Model\SharingFrame;
/**
* @deprecated
* Class SharingFrameRequest
*
* @package OCA\Circles\Db
*/
class SharingFrameRequest extends SharingFrameRequestBuilder {

View file

@ -37,6 +37,12 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\IL10N;
/**
* @deprecated
* Class SharingFrameRequestBuilder
*
* @package OCA\Circles\Db
*/
class SharingFrameRequestBuilder extends DeprecatedRequestBuilder {
/** @var DeprecatedCirclesRequest */

View file

@ -35,6 +35,7 @@ use OCA\Circles\Model\SharesToken;
/**
* @deprecated
* Class TokensRequest
*
* @package OCA\Circles\Db

View file

@ -35,6 +35,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
/**
* @deprecated
* Class TokensRequestBuilder
*
* @package OCA\Circles\Db