From 227ed1bfcca870842b23003cb80690d881406c22 Mon Sep 17 00:00:00 2001 From: Xetera Date: Fri, 10 Apr 2026 19:16:00 +0300 Subject: [PATCH] fix: properly negative cost changes --- src/remote/query-optimizer.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/remote/query-optimizer.ts b/src/remote/query-optimizer.ts index 8a0dee7..f27e312 100644 --- a/src/remote/query-optimizer.ts +++ b/src/remote/query-optimizer.ts @@ -457,15 +457,9 @@ export class QueryOptimizer extends EventEmitter { switch (result.kind) { case "ok": { const indexRecommendations = mapIndexRecommandations(result); - const percentageReduction = costDifferencePercentage( - result.baseCost, - result.finalCost, - ); const indexesUsed = Array.from(result.existingIndexes); - const costReductionPercentage = Math.trunc( - Math.abs(percentageReduction), - ); - if (costReductionPercentage < MINIMUM_COST_CHANGE_PERCENTAGE) { + const reduction = costReductionPercentage(result.baseCost, result.finalCost); + if (reduction < MINIMUM_COST_CHANGE_PERCENTAGE) { this.onNoImprovements( recent, result.baseCost, @@ -484,7 +478,7 @@ export class QueryOptimizer extends EventEmitter { state: "improvements_available", cost: result.baseCost, optimizedCost: result.finalCost, - costReductionPercentage, + costReductionPercentage: reduction, indexRecommendations, indexesUsed, explainPlan: result.baseExplainPlan, @@ -558,16 +552,12 @@ export class QueryOptimizer extends EventEmitter { const indexRecommendations = Array.from(result.newIndexes) .map((n) => result.triedIndexes.get(n)) .filter((n) => n !== undefined); - const percentageReduction = costDifferencePercentage( - result.baseCost, - result.finalCost, - ); - const costReductionPercentage = Math.trunc(Math.abs(percentageReduction)); + const reduction = costReductionPercentage(result.baseCost, result.finalCost); return { state: "improvements_available", cost: result.baseCost, optimizedCost: result.finalCost, - costReductionPercentage, + costReductionPercentage: reduction, indexRecommendations, indexesUsed, explainPlan, @@ -651,3 +641,11 @@ export function costDifferencePercentage( ): PercentageDifference { return ((newVal - oldVal) / oldVal) * 100; } + +/** + * The % at which cost was reduced. Returns a negative number + * if the cost increased + */ +export function costReductionPercentage(oldVal: number, newVal: number): number { + return Math.trunc(-costDifferencePercentage(oldVal, newVal)); +}