summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/QueryService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-10-09 18:13:53 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-10-09 18:13:53 +0900
commit04971ca5654ce900429de29388910324e89926c3 (patch)
tree676b5f47176fe08940dd8780c7e6870868624698 /packages/backend/src/core/QueryService.ts
parentfix(backend): 「ファイル付きのみ」のTLでファイル無しの新... (diff)
downloadsharkey-04971ca5654ce900429de29388910324e89926c3.tar.gz
sharkey-04971ca5654ce900429de29388910324e89926c3.tar.bz2
sharkey-04971ca5654ce900429de29388910324e89926c3.zip
perf(backend): untilDate/sinceDate指定時のクエリパフォーマンスを向上
Diffstat (limited to 'packages/backend/src/core/QueryService.ts')
-rw-r--r--packages/backend/src/core/QueryService.ts17
1 files changed, 10 insertions, 7 deletions
diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts
index 60333a5b91..50d1d2e65b 100644
--- a/packages/backend/src/core/QueryService.ts
+++ b/packages/backend/src/core/QueryService.ts
@@ -9,6 +9,7 @@ import { DI } from '@/di-symbols.js';
import type { MiUser } from '@/models/User.js';
import type { UserProfilesRepository, FollowingsRepository, ChannelFollowingsRepository, BlockingsRepository, NoteThreadMutingsRepository, MutingsRepository, RenoteMutingsRepository } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
import type { SelectQueryBuilder } from 'typeorm';
@Injectable()
@@ -34,6 +35,8 @@ export class QueryService {
@Inject(DI.renoteMutingsRepository)
private renoteMutingsRepository: RenoteMutingsRepository,
+
+ private idService: IdService,
) {
}
@@ -49,15 +52,15 @@ export class QueryService {
q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId });
q.orderBy(`${q.alias}.id`, 'DESC');
} else if (sinceDate && untilDate) {
- q.andWhere(`${q.alias}.createdAt > :sinceDate`, { sinceDate: new Date(sinceDate) });
- q.andWhere(`${q.alias}.createdAt < :untilDate`, { untilDate: new Date(untilDate) });
- q.orderBy(`${q.alias}.createdAt`, 'DESC');
+ q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.genId(new Date(sinceDate)) });
+ q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.genId(new Date(untilDate)) });
+ q.orderBy(`${q.alias}.id`, 'DESC');
} else if (sinceDate) {
- q.andWhere(`${q.alias}.createdAt > :sinceDate`, { sinceDate: new Date(sinceDate) });
- q.orderBy(`${q.alias}.createdAt`, 'ASC');
+ q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.genId(new Date(sinceDate)) });
+ q.orderBy(`${q.alias}.id`, 'ASC');
} else if (untilDate) {
- q.andWhere(`${q.alias}.createdAt < :untilDate`, { untilDate: new Date(untilDate) });
- q.orderBy(`${q.alias}.createdAt`, 'DESC');
+ q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.genId(new Date(untilDate)) });
+ q.orderBy(`${q.alias}.id`, 'DESC');
} else {
q.orderBy(`${q.alias}.id`, 'DESC');
}