@@ -414,6 +414,13 @@ <h1>JSONBench — a Benchmark For Data Analytics On JSON</h1>
414414 < a class ="selector " id ="selector-metric-quality "> Data Quality</ a >
415415 </ td >
416416 </ tr >
417+ < tr >
418+ < th > Flattening: </ th >
419+ < td id ="selectors_retain_structure ">
420+ < a class ="selector selector-active " id ="selector-retain-structure-yes "> No</ a >
421+ < a class ="selector " id ="selector-retain-structure-no "> Yes</ a >
422+ </ td >
423+ </ tr >
417424</ table >
418425
419426< table class ="stick-left comparison ">
@@ -457,6 +464,7 @@ <h2>Detailed Comparison</h2>
457464 "scale" : 1000_000_000 ,
458465 "metric" : "hot" ,
459466 "queries" : [ ] ,
467+ "retain_structure" : { "yes" : true , "no" : false }
460468} ;
461469
462470let theme = 'light' ;
@@ -564,6 +572,27 @@ <h2>Detailed Comparison</h2>
564572document . getElementById ( 'selector-metric-size' ) . addEventListener ( 'click' , e => { selectors . metric = 'size' ; render ( ) ; updateHistory ( ) ; } ) ;
565573document . getElementById ( 'selector-metric-quality' ) . addEventListener ( 'click' , e => { selectors . metric = 'quality' ; render ( ) ; updateHistory ( ) ; } ) ;
566574
575+ document . getElementById ( 'selector-retain-structure-yes' ) . addEventListener ( 'click' , e => {
576+ selectors . retain_structure . yes = ! selectors . retain_structure . yes ;
577+ if ( selectors . retain_structure . yes ) {
578+ e . target . classList . add ( 'selector-active' ) ;
579+ } else {
580+ e . target . classList . remove ( 'selector-active' ) ;
581+ }
582+ render ( ) ;
583+ updateHistory ( ) ;
584+ } ) ;
585+ document . getElementById ( 'selector-retain-structure-no' ) . addEventListener ( 'click' , e => {
586+ selectors . retain_structure . no = ! selectors . retain_structure . no ;
587+ if ( selectors . retain_structure . no ) {
588+ e . target . classList . add ( 'selector-active' ) ;
589+ } else {
590+ e . target . classList . remove ( 'selector-active' ) ;
591+ }
592+ render ( ) ;
593+ updateHistory ( ) ;
594+ } ) ;
595+
567596selectors . queries = queries . map ( ( ) => true ) ;
568597
569598function updateSelectors ( ) {
@@ -574,6 +603,12 @@ <h2>Detailed Comparison</h2>
574603 [ ...document . getElementById ( 'selectors_run' ) . querySelectorAll ( 'a' ) ] . map ( elem => {
575604 elem . className = elem . id == 'selector-metric-' + selectors . metric ? 'selector selector-active' : 'selector' } ) ;
576605
606+ // Update retain structure buttons state
607+ document . getElementById ( 'selector-retain-structure-yes' ) . className =
608+ selectors . retain_structure . yes ? 'selector selector-active' : 'selector' ;
609+ document . getElementById ( 'selector-retain-structure-no' ) . className =
610+ selectors . retain_structure . no ? 'selector selector-active' : 'selector' ;
611+
577612 [ ...document . querySelectorAll ( '.query-checkbox' ) ] . map ( ( elem , i ) => { elem . checked = selectors . queries [ i ] } ) ;
578613}
579614
@@ -774,7 +809,11 @@ <h2>Detailed Comparison</h2>
774809
775810 let filtered_data = data . filter ( elem =>
776811 ( selectors . system [ elem . system ] || ( selectors . metric == 'size' && elem . fake ) ) &&
777- selectors . scale == elem . dataset_size ) ;
812+ selectors . scale == elem . dataset_size &&
813+ (
814+ ( selectors . retain_structure . yes && elem . retains_structure === "yes" ) ||
815+ ( selectors . retain_structure . no && elem . retains_structure === "no" )
816+ ) ) ;
778817
779818 let nothing_selected_elem = document . getElementById ( 'nothing-selected' ) ;
780819 if ( filtered_data . length == 0 ) {
@@ -921,13 +960,21 @@ <h2>Detailed Comparison</h2>
921960window . onpopstate = function ( event ) {
922961 if ( ! event . state ) { return ; }
923962 selectors = event . state ;
963+ // Ensure retain_structure exists in loaded state
964+ if ( ! selectors . retain_structure ) {
965+ selectors . retain_structure = { "yes" : true , "no" : false } ;
966+ }
924967 render ( ) ;
925968 updateSelectors ( ) ;
926969} ;
927970
928971if ( window . location . hash ) {
929972 try {
930973 selectors = JSON . parse ( atob ( window . location . hash . substring ( 1 ) ) ) ;
974+ // Ensure retain_structure exists in loaded state
975+ if ( ! selectors . retain_structure ) {
976+ selectors . retain_structure = { "yes" : true , "no" : false } ;
977+ }
931978 } catch { }
932979}
933980
0 commit comments