@@ -922,7 +922,7 @@ async function readHeaderFooter(tuple) {
922922 } ) ;
923923}
924924
925- function readEntry ( rntuple , fieldName , entryIndex ) {
925+ function readEntry ( rntuple , fieldName , clusterIndex , entryIndex ) {
926926 const builder = rntuple . builder ,
927927 field = builder . fieldDescriptors . find ( f => f . fieldName === fieldName ) ,
928928 columns = rntuple . fieldToColumns [ fieldName ] ;
@@ -932,16 +932,27 @@ function readEntry(rntuple, fieldName, entryIndex) {
932932 if ( ! columns )
933933 throw new Error ( `No columns field ${ fieldName } ` ) ;
934934
935+
936+ const pages = builder . pageLocations [ clusterIndex ] ?. [ columns [ 0 ] . index ] ?. pages ;
937+ if ( ! pages )
938+ throw new Error ( `No pages found ${ fieldName } ` ) ;
939+
940+ let pageid = 0 ;
941+ while ( ( pageid < pages . length - 1 ) && ( entryIndex >= Number ( pages [ pageid ] . numElements ) ) ) {
942+ entryIndex -= Number ( pages [ pageid ] . numElements ) ;
943+ pageid ++ ;
944+ }
945+
935946 if ( field . typeName === 'std::string' ) {
936947 // string extracted from two columns
937- const offsets = rntuple . _clusterData [ columns [ 0 ] . index ] [ 0 ] ,
938- payload = rntuple . _clusterData [ columns [ 1 ] . index ] [ 0 ] ,
948+ const offsets = rntuple . _clusterData [ columns [ 0 ] . index ] [ pageid ] ,
949+ payload = rntuple . _clusterData [ columns [ 1 ] . index ] [ pageid ] ,
939950 start = entryIndex === 0 ? 0 : Number ( offsets [ entryIndex - 1 ] ) ,
940951 end = Number ( offsets [ entryIndex ] ) ;
941952 return payload . slice ( start , end ) . join ( '' ) ; // Convert to string
942953 }
943954 const values = rntuple . _clusterData [ columns [ 0 ] . index ] ;
944- return values [ 0 ] [ entryIndex ] ;
955+ return values [ pageid ] [ entryIndex ] ;
945956}
946957
947958/** @summary Return field name for specified branch index
@@ -1066,7 +1077,7 @@ function readNextCluster(rntuple, selector) {
10661077 const fieldName = getSelectorFieldName ( selector , b ) ,
10671078 tgtName = selector . nameOfBranch ( b ) ;
10681079
1069- selector . tgtobj [ tgtName ] = readEntry ( rntuple , fieldName , i ) ;
1080+ selector . tgtobj [ tgtName ] = readEntry ( rntuple , fieldName , clusterIndex , i ) ;
10701081 }
10711082 selector . Process ( i ) ;
10721083 }
0 commit comments