Fix not using index on short id

This commit is contained in:
Maximilian Ruta 2019-07-06 00:44:40 +02:00
parent 6fb39a4b3e
commit 2edb05eb9e
4 changed files with 16 additions and 31 deletions

View file

@ -226,7 +226,7 @@ class CircleProviderRequestBuilder extends CoreRequestBuilder {
$tmpOrX = $expr->eq( $tmpOrX = $expr->eq(
's.share_with', 's.share_with',
$qb->createFunction('SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')') 'c.unique_short_id'
); );
if ($shareId === -1) { if ($shareId === -1) {
@ -257,7 +257,7 @@ class CircleProviderRequestBuilder extends CoreRequestBuilder {
'c', CoreRequestBuilder::TABLE_MEMBERS, 'mo', $expr->andX( 'c', CoreRequestBuilder::TABLE_MEMBERS, 'mo', $expr->andX(
$expr->eq( $expr->eq(
'mo.circle_id', 'mo.circle_id',
$qb->createFunction('SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')') 'c.unique_short_id'
), $expr->eq('mo.user_type', $qb->createNamedParameter(Member::TYPE_USER)), ), $expr->eq('mo.user_type', $qb->createNamedParameter(Member::TYPE_USER)),
$expr->eq('mo.level', $qb->createNamedParameter(Member::LEVEL_OWNER)) $expr->eq('mo.level', $qb->createNamedParameter(Member::LEVEL_OWNER))
) )
@ -307,9 +307,7 @@ class CircleProviderRequestBuilder extends CoreRequestBuilder {
$andX->add( $andX->add(
$expr->eq( $expr->eq(
'm.circle_id', 'm.circle_id',
$qb->createFunction( 'c.unique_short_id'
'SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')'
)
) )
); );
@ -334,7 +332,7 @@ class CircleProviderRequestBuilder extends CoreRequestBuilder {
$expr->andX( $expr->andX(
$expr->eq( $expr->eq(
'g.circle_id', 'g.circle_id',
$qb->createFunction('SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')') 'c.unique_short_id'
) )
) )
); );

View file

@ -143,7 +143,7 @@ class CirclesRequest extends CirclesRequestBuilder {
$qb = $this->getCirclesSelectSql(); $qb = $this->getCirclesSelectSql();
$this->leftJoinUserIdAsViewer($qb, $userId); $this->leftJoinUserIdAsViewer($qb, $userId);
$this->leftJoinOwner($qb); $this->leftJoinOwner($qb);
$this->leftJoinNCGroupAndUser($qb, $userId, '`c`.`unique_id`'); $this->leftJoinNCGroupAndUser($qb, $userId, 'c.unique_short_id');
if ($level > 0) { if ($level > 0) {
$this->limitToLevel($qb, $level, ['u', 'g']); $this->limitToLevel($qb, $level, ['u', 'g']);
@ -178,7 +178,7 @@ class CirclesRequest extends CirclesRequestBuilder {
$this->leftJoinUserIdAsViewer($qb, $viewerId); $this->leftJoinUserIdAsViewer($qb, $viewerId);
$this->leftJoinOwner($qb); $this->leftJoinOwner($qb);
$this->leftJoinNCGroupAndUser($qb, $viewerId, '`c`.`unique_id`'); $this->leftJoinNCGroupAndUser($qb, $viewerId, 'c.unique_short_id');
$this->limitRegardingCircleType($qb, $viewerId, $circleUniqueId, Circle::CIRCLES_ALL, ''); $this->limitRegardingCircleType($qb, $viewerId, $circleUniqueId, Circle::CIRCLES_ALL, '');

View file

@ -180,9 +180,7 @@ class CirclesRequestBuilder extends CoreRequestBuilder {
->add( ->add(
$expr->eq( $expr->eq(
$qb->createNamedParameter($circleUniqueId), $qb->createNamedParameter($circleUniqueId),
$qb->createFunction( 'c.unique_short_id'
'SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')'
)
) )
); );
@ -263,10 +261,7 @@ class CirclesRequestBuilder extends CoreRequestBuilder {
$expr->andX( $expr->andX(
$expr->eq( $expr->eq(
'u.circle_id', 'u.circle_id',
$qb->createFunction( $this->default_select_alias . '.unique_short_id'
'SUBSTR(' . $pf . '`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH
. ')'
)
), ),
$expr->eq('u.user_id', $qb->createNamedParameter($userId)), $expr->eq('u.user_id', $qb->createNamedParameter($userId)),
$expr->eq('u.user_type', $qb->createNamedParameter(Member::TYPE_USER)) $expr->eq('u.user_type', $qb->createNamedParameter(Member::TYPE_USER))
@ -297,11 +292,8 @@ class CirclesRequestBuilder extends CoreRequestBuilder {
$this->default_select_alias, CoreRequestBuilder::TABLE_MEMBERS, 'o', $this->default_select_alias, CoreRequestBuilder::TABLE_MEMBERS, 'o',
$expr->andX( $expr->andX(
$expr->eq( $expr->eq(
$qb->createFunction( $this->default_select_alias . '.unique_short_id',
'SUBSTR(' . $pf . '`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH 'o.circle_id'
. ')'
)
, 'o.circle_id'
), ),
$expr->eq('o.level', $qb->createNamedParameter(Member::LEVEL_OWNER)), $expr->eq('o.level', $qb->createNamedParameter(Member::LEVEL_OWNER)),
$expr->eq('o.user_type', $qb->createNamedParameter(Member::TYPE_USER)) $expr->eq('o.user_type', $qb->createNamedParameter(Member::TYPE_USER))
@ -357,9 +349,7 @@ class CirclesRequestBuilder extends CoreRequestBuilder {
->where( ->where(
$qb->expr() $qb->expr()
->eq( ->eq(
$qb->createFunction( 'unique_short_id',
'SUBSTR(`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')'
),
$qb->createNamedParameter($circleUniqueId) $qb->createNamedParameter($circleUniqueId)
) )
); );

View file

@ -149,12 +149,13 @@ class CoreRequestBuilder {
*/ */
protected function limitToShortenUniqueId(IQueryBuilder &$qb, $circleUniqueId, $length) { protected function limitToShortenUniqueId(IQueryBuilder &$qb, $circleUniqueId, $length) {
$expr = $qb->expr(); $expr = $qb->expr();
$unqoutedPf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias . '.' : '';
$pf = ($qb->getType() === QueryBuilder::SELECT) ? '`' . $this->default_select_alias . '`.' : ''; $pf = ($qb->getType() === QueryBuilder::SELECT) ? '`' . $this->default_select_alias . '`.' : '';
$qb->andWhere( $qb->andWhere(
$expr->eq( $expr->eq(
$qb->createNamedParameter($circleUniqueId), $qb->createNamedParameter($circleUniqueId),
$qb->createFunction('SUBSTR(' . $pf . '`unique_id`' . ', 1, ' . $length . ')') $unqoutedPf . 'unique_short_id'
) )
); );
@ -326,9 +327,7 @@ class CoreRequestBuilder {
->andWhere( ->andWhere(
$expr->eq( $expr->eq(
$pf . 'circle_id', $pf . 'circle_id',
$qb->createFunction( 'c.unique_short_id'
'SUBSTR(`c`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')'
)
) )
); );
} }
@ -356,9 +355,7 @@ class CoreRequestBuilder {
$this->default_select_alias, CoreRequestBuilder::TABLE_CIRCLES, 'lc', $this->default_select_alias, CoreRequestBuilder::TABLE_CIRCLES, 'lc',
$expr->eq( $expr->eq(
$pf . 'circle_id', $pf . 'circle_id',
$qb->createFunction( 'lc.unique_short_id'
'SUBSTR(`lc`.`unique_id`, 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')'
)
) )
); );
} }
@ -390,7 +387,7 @@ class CoreRequestBuilder {
$expr->eq('ncgu.gid', 'g.group_id'), $expr->eq('ncgu.gid', 'g.group_id'),
$expr->eq( $expr->eq(
'g.circle_id', $qb->createFunction( 'g.circle_id', $qb->createFunction(
'SUBSTR(' . $field . ', 1, ' . Circle::SHORT_UNIQUE_ID_LENGTH . ')' $field
) )
) )
) )