@@ -963,11 +963,11 @@ function getSelectorFieldName(selector, i) {
963963}
964964
965965// Read and process the next data cluster from the RNTuple
966- function readNextCluster ( rntuple , selector ) {
966+ async function readNextCluster ( rntuple , selector ) {
967967 const builder = rntuple . builder ;
968968
969969 // Add validation
970- if ( ! builder . clusterSummaries || builder . clusterSummaries . length === 0 )
970+ if ( ! builder . clusterSummaries )
971971 throw new Error ( 'No cluster summaries available - possibly incomplete file reading' ) ;
972972
973973 const clusterIndex = selector . currentCluster ,
@@ -977,6 +977,11 @@ function readNextCluster(rntuple, selector) {
977977 // Collect only selected field names from selector
978978 selectedFields = [ ] ;
979979
980+ if ( ! clusterSummary ) {
981+ selector . Terminate ( clusterIndex > 0 ) ;
982+ return false ;
983+ }
984+
980985 for ( let i = 0 ; i < selector . numBranches ( ) ; ++ i )
981986 selectedFields . push ( getSelectorFieldName ( selector , i ) ) ;
982987
@@ -1003,7 +1008,7 @@ function readNextCluster(rntuple, selector) {
10031008 // Early exit if no pages to read (i.e., no selected fields matched)
10041009 if ( pages . length === 0 ) {
10051010 selector . Terminate ( false ) ;
1006- return Promise . resolve ( ) ;
1011+ return false ;
10071012 }
10081013
10091014 // Build flat array of [offset, size, offset, size, ...] to read pages
@@ -1079,10 +1084,10 @@ function readNextCluster(rntuple, selector) {
10791084
10801085 selector . tgtobj [ tgtName ] = readEntry ( rntuple , fieldName , clusterIndex , i ) ;
10811086 }
1082- selector . Process ( i ) ;
1087+ selector . Process ( selector . currentEntry ++ ) ;
10831088 }
10841089
1085- selector . Terminate ( true ) ;
1090+ return readNextCluster ( rntuple , selector ) ;
10861091 } ) ;
10871092 } ) ;
10881093}
@@ -1093,6 +1098,7 @@ function rntupleProcess(rntuple, selector, args) {
10931098 return readHeaderFooter ( rntuple ) . then ( ( ) => {
10941099 selector . Begin ( ) ;
10951100 selector . currentCluster = 0 ;
1101+ selector . currentEntry = 0 ;
10961102 return readNextCluster ( rntuple , selector , args ) ;
10971103 } ) . then ( ( ) => selector ) ;
10981104}
0 commit comments