diff options
Diffstat (limited to 'app/services/plan-service.ts')
-rw-r--r-- | app/services/plan-service.ts | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/app/services/plan-service.ts b/app/services/plan-service.ts index b5f8102..0e399ff 100644 --- a/app/services/plan-service.ts +++ b/app/services/plan-service.ts @@ -36,6 +36,9 @@ export class PlanService { PLANNER_ESTIMATE_FACTOR: string = '*Planner Row Estimate Factor'; PLANNER_ESIMATE_DIRECTION: string = '*Planner Row Estimate Direction'; + CTE_SCAN_PROP = 'CTE Scan'; + CTE_NAME_PROP = 'CTE Name'; + ARRAY_INDEX_KEY: string = 'arrayIndex'; PEV_PLAN_TAG: string = 'plan_'; @@ -49,11 +52,14 @@ export class PlanService { for (var i in localStorage) { if (_.startsWith(i, this.PEV_PLAN_TAG)) { - plans.push(JSON.parse(localStorage[i])); + plans.push(JSON.parse(localStorage[i])); } } - return plans; + return _.chain(plans) + .sortBy('createdOn') + .reverse() + .value(); } getPlan(id: string): IPlan { @@ -73,6 +79,15 @@ export class PlanService { return plan; } + isJsonString(str) { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; + } + analyzePlan(plan: IPlan) { this.processNode(plan.content.Plan); plan.content[this.MAXIMUM_ROWS_PROP] = this._maxRows; @@ -150,9 +165,15 @@ export class PlanService { node[this.ACTUAL_DURATION_PROP] = node[this.ACTUAL_TOTAL_TIME_PROP]; node[this.ACTUAL_COST_PROP] = node[this.TOTAL_COST_PROP]; + console.log (node); _.each(node.Plans, subPlan => { - node[this.ACTUAL_DURATION_PROP] = node[this.ACTUAL_DURATION_PROP] - subPlan[this.ACTUAL_TOTAL_TIME_PROP]; - node[this.ACTUAL_COST_PROP] = node[this.ACTUAL_COST_PROP] - subPlan[this.TOTAL_COST_PROP]; + console.log('processing chldren', subPlan) + // since CTE scan duration is already included in its subnodes, it should be be + // subtracted from the duration of this node + if (subPlan[this.NODE_TYPE_PROP] !== this.CTE_SCAN_PROP) { + node[this.ACTUAL_DURATION_PROP] = node[this.ACTUAL_DURATION_PROP] - subPlan[this.ACTUAL_TOTAL_TIME_PROP]; + node[this.ACTUAL_COST_PROP] = node[this.ACTUAL_COST_PROP] - subPlan[this.TOTAL_COST_PROP]; + } }); if (node[this.ACTUAL_COST_PROP] < 0) { |