Skip to content

Commit d96cfed

Browse files
committed
fix: resolve index names
1 parent 8193d9f commit d96cfed

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

src/remote/query-optimizer.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export class QueryOptimizer extends EventEmitter<EventMap> {
4949
private readonly queries = new Map<QueryHash, OptimizedQuery>();
5050
private readonly disabledIndexes = new DisabledIndexes();
5151

52+
private existingIndexes: IndexedTable[] = [];
5253
private target?: Target;
5354
private semaphore = new Sema(QueryOptimizer.MAX_CONCURRENCY);
5455
private _finish = Promise.withResolvers<void>();
@@ -104,6 +105,10 @@ export class QueryOptimizer extends EventEmitter<EventMap> {
104105
return this.target?.statistics.mode ?? QueryOptimizer.defaultStatistics;
105106
}
106107

108+
getExistingIndexes(): IndexedTable[] {
109+
return this.existingIndexes;
110+
}
111+
107112
getDisabledIndexes(): PgIdentifier[] {
108113
return [...this.disabledIndexes];
109114
}
@@ -132,8 +137,8 @@ export class QueryOptimizer extends EventEmitter<EventMap> {
132137
const pg = this.manager.getOrCreateConnection(this.connectable);
133138
const ownStats = await Statistics.dumpStats(pg, version, "full");
134139
const statistics = new Statistics(pg, version, ownStats, statsMode);
135-
const existingIndexes = await statistics.getExistingIndexes();
136-
const filteredIndexes = this.filterDisabledIndexes(existingIndexes);
140+
this.existingIndexes = await statistics.getExistingIndexes();
141+
const filteredIndexes = this.filterDisabledIndexes(this.existingIndexes);
137142
const optimizer = new IndexOptimizer(pg, statistics, filteredIndexes, {
138143
trace: false,
139144
});

src/runner.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ export class Runner {
144144
await this.remote.optimizer.finish;
145145

146146
const optimizedQueries = this.remote.optimizer.getQueries();
147+
const existingIndexes = this.remote.optimizer.getExistingIndexes();
148+
149+
const resolveIndexNames = (names: string[]) =>
150+
names.map((name) => {
151+
const idx = existingIndexes.find((e) => e.index_name === name);
152+
return idx
153+
? `${idx.schema_name}.${idx.table_name}(${idx.index_columns.map((c) => `"${c.name}" ${c.order}`).join(", ")})`
154+
: name;
155+
});
147156

148157
console.log(
149158
`Matched ${this.remote.optimizer.validQueriesProcessed} queries out of ${total}`,
@@ -157,8 +166,14 @@ export class Runner {
157166
if (this.ignoredQueryHashes.has(q.hash)) {
158167
continue;
159168
}
160-
allResults.push(q);
161169
const { optimization } = q;
170+
if (
171+
optimization.state === "improvements_available" ||
172+
optimization.state === "no_improvement_found"
173+
) {
174+
optimization.indexesUsed = resolveIndexNames(optimization.indexesUsed);
175+
}
176+
allResults.push(q);
162177
if (optimization.state === "improvements_available") {
163178
recommendations.push({
164179
fingerprint: q.hash,

0 commit comments

Comments
 (0)