Skip to content

Commit 7058205

Browse files
author
Preetam Jinka
committed
remove save button
1 parent b8b8a57 commit 7058205

File tree

4 files changed

+7090
-57
lines changed

4 files changed

+7090
-57
lines changed

README.md

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,37 @@ This is a web-based MySQL explain analyzer.
44

55
You can use it here: https://preetam.github.io/explain-analyzer/#!/explain/
66

7-
Here's an example: https://preetam.github.io/explain-analyzer/#!/explain/0d2828b29fa9eeb73fff6880dee178431e47f26a.json
7+
Try it with
8+
9+
```json
10+
{
11+
"query_block": {
12+
"select_id": 1,
13+
"cost_info": { "query_cost": "0.45" },
14+
"table": {
15+
"table_name": "test",
16+
"access_type": "ALL",
17+
"rows_examined_per_scan": 2,
18+
"rows_produced_per_join": 2,
19+
"filtered": "100.00",
20+
"cost_info": {
21+
"read_cost": "0.25",
22+
"eval_cost": "0.20",
23+
"prefix_cost": "0.45",
24+
"data_read_per_join": "16"
25+
},
26+
"used_columns": ["id"]
27+
}
28+
}
29+
}
30+
```
831

932
### Features
1033

11-
* Table representation of MySQL JSON explain output
12-
* Comments about explain interpretation
13-
* Experimental scalability analysis
14-
* Explain saving and permalinks
34+
- Table representation of MySQL JSON explain output
35+
- Comments about explain interpretation
36+
- Experimental scalability analysis
37+
- Explain saving and permalinks
1538

1639
### Screenshot
1740

html/js/app.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/index.js

Lines changed: 50 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,48 @@
1-
var m = require("mithril")
2-
var Explain = require("./Explain")
3-
var Analysis = require("./Analysis")
4-
var ErrorMessage = require("./ErrorMessage")
1+
var m = require("mithril");
2+
var Explain = require("./Explain");
3+
var Analysis = require("./Analysis");
4+
var ErrorMessage = require("./ErrorMessage");
55

66
var App = {
7-
oninit: function(vnode) {
7+
oninit: function (vnode) {
88
var planID = m.route.param("key");
99
vnode.state.explain = new Explain();
1010
if (planID) {
1111
vnode.state.loading = true;
12-
Explain.load(vnode.state.explain, planID).then(function() {
13-
Explain.parse(vnode.state.explain);
14-
vnode.state.analysis = new Analysis(vnode.state.explain);
15-
vnode.state.loading = false;
16-
vnode.state.initialFieldData = JSON.stringify(vnode.state.explain.data, null, " ");
17-
vnode.state.fieldData = vnode.state.initialFieldData;
18-
}).catch(function(e) {
19-
vnode.state.loading = false;
20-
vnode.state.loadError = e;
21-
})
22-
console.log("fetching plan", planID)
12+
Explain.load(vnode.state.explain, planID)
13+
.then(function () {
14+
Explain.parse(vnode.state.explain);
15+
vnode.state.analysis = new Analysis(vnode.state.explain);
16+
vnode.state.loading = false;
17+
vnode.state.initialFieldData = JSON.stringify(
18+
vnode.state.explain.data,
19+
null,
20+
" "
21+
);
22+
vnode.state.fieldData = vnode.state.initialFieldData;
23+
})
24+
.catch(function (e) {
25+
vnode.state.loading = false;
26+
vnode.state.loadError = e;
27+
});
28+
console.log("fetching plan", planID);
2329
}
2430
vnode.state.analysis = "div";
2531

26-
vnode.state.save = function() {
27-
var explain = this.explain;
28-
Explain.save(explain).then(function() {
29-
m.route.set("/explain/" + explain.id)
30-
})
31-
return false;
32-
}.bind(vnode.state);
33-
34-
vnode.state.analyze = function() {
32+
vnode.state.analyze = function () {
3533
try {
3634
var data = JSON.parse(this.fieldData);
3735
this.explain.data = data;
3836
Explain.parse(this.explain);
3937
this.analysis = new Analysis(this.explain);
4038
vnode.state.unanalyzedChanges = false;
41-
} catch(e) {
42-
this.analysis = new ErrorMessage("Error parsing explain JSON", ""+e)
39+
} catch (e) {
40+
this.analysis = new ErrorMessage("Error parsing explain JSON", "" + e);
4341
}
4442
return false;
4543
}.bind(vnode.state);
4644
},
47-
view: function(vnode) {
45+
view: function (vnode) {
4846
if (vnode.state.loading) {
4947
return m("div", "Loading...");
5048
}
@@ -54,42 +52,43 @@ var App = {
5452
var explainTextareaParams = {
5553
className: "explain-input pure-input-2-3",
5654
placeholder: "MySQL JSON Explain { . . . }",
57-
oninput: function() {
55+
oninput: function () {
5856
vnode.state.initialFieldData = null;
5957
vnode.state.fieldData = this.value;
6058
vnode.state.unanalyzedChanges = true;
61-
}
62-
}
59+
},
60+
};
6361
if (vnode.state.initialFieldData) {
6462
explainTextareaParams.value = vnode.state.initialFieldData;
6563
}
6664
return m("div", [
67-
m("form",
65+
m(
66+
"form",
6867
{
6968
className: "pure-form pure-form-stacked",
7069
},
71-
m("fieldset.pure-group",
72-
m("textarea",
73-
explainTextareaParams
74-
),
75-
m("span", {
76-
class: "pure-form-message mea-explain-input-message"
77-
}, "Paste the output of EXPLAIN FORMAT=JSON ...")
70+
m(
71+
"fieldset.pure-group",
72+
m("textarea", explainTextareaParams),
73+
m(
74+
"span",
75+
{
76+
class: "pure-form-message mea-explain-input-message",
77+
},
78+
"Paste the output of EXPLAIN FORMAT=JSON ..."
79+
)
7880
),
79-
m("fieldset.pure-group",
80-
m("button.pure-button", {onclick: vnode.state.analyze}, "Analyze"),
81-
" ",
82-
m("button.pure-button", {onclick: vnode.state.save, disabled: vnode.state.unanalyzedChanges == true}, "Save")
81+
m(
82+
"fieldset.pure-group",
83+
m("button.pure-button", { onclick: vnode.state.analyze }, "Analyze")
8384
)
8485
),
85-
m("div", [
86-
m(vnode.state.analysis)
87-
])
88-
])
89-
}
90-
}
86+
m("div", [m(vnode.state.analysis)]),
87+
]);
88+
},
89+
};
9190

9291
m.route(document.getElementById("app"), "/explain/", {
9392
"/explain/": App,
94-
"/explain/:key": App
95-
})
93+
"/explain/:key": App,
94+
});

0 commit comments

Comments
 (0)