From c058100ffab1404f366952dd58577a9e9bfbd4d0 Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Wed, 8 Nov 2023 10:15:28 +0530 Subject: [PATCH] Handle nested entity sorting for distinct on type queries --- packages/util/src/database.ts | 4 ++-- packages/util/src/graph/database.ts | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/util/src/database.ts b/packages/util/src/database.ts index 1f0ff548..a4b0e402 100644 --- a/packages/util/src/database.ts +++ b/packages/util/src/database.ts @@ -1145,7 +1145,7 @@ export class Database { subQuery = await this.applyBlockHeightFilter(queryRunner, subQuery, block, 'subTable'); - // Join with self to select required columns + // Self join to select required columns const latestRelatedEntitiesAlias = `latest${relationField}Entities`; const relationSubQuery: SelectQueryBuilder = relationRepo.createQueryBuilder(relationTableName, queryRunner) .select(`${relationTableName}.id`, 'id') @@ -1157,7 +1157,7 @@ export class Database { ) .setParameters(subQuery.getParameters()); - // Join with related table to get the required fields + // Join with related table to get the required field to sort on const relatedEntitiesAlias = `related${relationField}`; selectQueryBuilder = selectQueryBuilder .innerJoin( diff --git a/packages/util/src/graph/database.ts b/packages/util/src/graph/database.ts index 6e4a7d26..c224bdfa 100644 --- a/packages/util/src/graph/database.ts +++ b/packages/util/src/graph/database.ts @@ -503,16 +503,14 @@ export class GraphDatabase { subQuery = this._baseDatabase.buildQuery(repo, subQuery, where, relationsMap.get(entityType), block); let selectQueryBuilder = queryRunner.manager.createQueryBuilder() - .from( - `(${subQuery.getQuery()})`, - 'latestEntities' - ) + .select('"latestEntities".*') + .from(`(${subQuery.getQuery()})`, 'latestEntities') .setParameters(subQuery.getParameters()) as SelectQueryBuilder; if (queryOptions.orderBy) { - selectQueryBuilder = await this._baseDatabase.orderQuery(repo, selectQueryBuilder, queryOptions, {}, {}, 'subTable_'); + selectQueryBuilder = await this._baseDatabase.orderQuery(repo, selectQueryBuilder, queryOptions, relationsMap.get(entityType), block, 'subTable_'); if (queryOptions.orderBy !== 'id') { - // Order by id if ordered by some non-id column (for rows having same value for the ordered column) + // Order by id if ordered by some non-id column (for rows having same value for the column ordered on) selectQueryBuilder = await this._baseDatabase.orderQuery(repo, selectQueryBuilder, { ...queryOptions, orderBy: 'id' }, {}, {}, 'subTable_'); } }