diff --git a/index.html b/index.html
index fb72530..c0dad06 100644
--- a/index.html
+++ b/index.html
@@ -414,6 +414,13 @@
JSONBench — a Benchmark For Data Analytics On JSON
Data Quality
+
+ Flattening: |
+
+ No
+ Yes
+ |
+
@@ -457,6 +464,7 @@ Detailed Comparison
"scale": 1000_000_000,
"metric": "hot",
"queries": [],
+ "retain_structure": {"yes": true, "no": false}
};
let theme = 'light';
@@ -564,6 +572,27 @@ Detailed Comparison
document.getElementById('selector-metric-size').addEventListener('click', e => { selectors.metric = 'size'; render(); updateHistory(); });
document.getElementById('selector-metric-quality').addEventListener('click', e => { selectors.metric = 'quality'; render(); updateHistory(); });
+document.getElementById('selector-retain-structure-yes').addEventListener('click', e => {
+ selectors.retain_structure.yes = !selectors.retain_structure.yes;
+ if (selectors.retain_structure.yes) {
+ e.target.classList.add('selector-active');
+ } else {
+ e.target.classList.remove('selector-active');
+ }
+ render();
+ updateHistory();
+});
+document.getElementById('selector-retain-structure-no').addEventListener('click', e => {
+ selectors.retain_structure.no = !selectors.retain_structure.no;
+ if (selectors.retain_structure.no) {
+ e.target.classList.add('selector-active');
+ } else {
+ e.target.classList.remove('selector-active');
+ }
+ render();
+ updateHistory();
+});
+
selectors.queries = queries.map(() => true);
function updateSelectors() {
@@ -574,6 +603,12 @@ Detailed Comparison
[...document.getElementById('selectors_run').querySelectorAll('a')].map(elem => {
elem.className = elem.id == 'selector-metric-' + selectors.metric ? 'selector selector-active' : 'selector' });
+ // Update retain structure buttons state
+ document.getElementById('selector-retain-structure-yes').className =
+ selectors.retain_structure.yes ? 'selector selector-active' : 'selector';
+ document.getElementById('selector-retain-structure-no').className =
+ selectors.retain_structure.no ? 'selector selector-active' : 'selector';
+
[...document.querySelectorAll('.query-checkbox')].map((elem, i) => { elem.checked = selectors.queries[i] });
}
@@ -774,7 +809,11 @@ Detailed Comparison
let filtered_data = data.filter(elem =>
(selectors.system[elem.system] || (selectors.metric == 'size' && elem.fake)) &&
- selectors.scale == elem.dataset_size);
+ selectors.scale == elem.dataset_size &&
+ (
+ (selectors.retain_structure.yes && elem.retains_structure === "yes") ||
+ (selectors.retain_structure.no && elem.retains_structure === "no")
+ ));
let nothing_selected_elem = document.getElementById('nothing-selected');
if (filtered_data.length == 0) {
@@ -921,6 +960,10 @@ Detailed Comparison
window.onpopstate = function(event) {
if (!event.state) { return; }
selectors = event.state;
+ // Ensure retain_structure exists in loaded state
+ if (!selectors.retain_structure) {
+ selectors.retain_structure = {"yes": true, "no": false};
+ }
render();
updateSelectors();
};
@@ -928,6 +971,10 @@ Detailed Comparison
if (window.location.hash) {
try {
selectors = JSON.parse(atob(window.location.hash.substring(1)));
+ // Ensure retain_structure exists in loaded state
+ if (!selectors.retain_structure) {
+ selectors.retain_structure = {"yes": true, "no": false};
+ }
} catch {}
}