@@ -195,20 +195,28 @@ func (j *JsonCursor) AdvanceToLocation(ctx context.Context, path jsonLocation, f
195195 return true , nil
196196}
197197
198+ func (j * JsonCursor ) advanceCursor (ctx context.Context ) error {
199+ err := j .cur .advance (ctx )
200+ if err != nil {
201+ return err
202+ }
203+ if ! j .cur .Valid () {
204+ // We hit the end of the tree. This shouldn't happen.
205+ return io .EOF
206+ }
207+ j .jsonScanner = ScanJsonFromMiddle (j .cur .currentValue (), j .jsonScanner .currentPath )
208+ return nil
209+ }
210+
198211func (j * JsonCursor ) AdvanceToNextLocation (ctx context.Context ) (crossedBoundary bool , err error ) {
199212 err = j .jsonScanner .AdvanceToNextLocation ()
200213 if err == io .EOF {
201214 crossedBoundary = true
202215 // We hit the end of the chunk, load the next one
203- err = j .cur . advance (ctx )
216+ err = j .advanceCursor (ctx )
204217 if err != nil {
205- return
206- }
207- if ! j .cur .Valid () {
208- // We hit the end of the tree. This shouldn't happen.
209- return true , io .EOF
218+ return false , err
210219 }
211- j .jsonScanner = ScanJsonFromMiddle (j .cur .currentValue (), j .jsonScanner .currentPath )
212220 return true , j .jsonScanner .AdvanceToNextLocation ()
213221 } else if err != nil {
214222 return
@@ -221,6 +229,12 @@ func (j *JsonCursor) GetCurrentPath() jsonLocation {
221229 return j .jsonScanner .currentPath
222230}
223231
224- func (j * JsonCursor ) nextCharacter () byte {
225- return j .jsonScanner .jsonBuffer [j .jsonScanner .valueOffset ]
232+ func (j * JsonCursor ) nextCharacter (ctx context.Context ) (byte , error ) {
233+ if j .jsonScanner .atEndOfChunk () {
234+ err := j .advanceCursor (ctx )
235+ if err != nil {
236+ return 255 , err
237+ }
238+ }
239+ return j .jsonScanner .jsonBuffer [j .jsonScanner .valueOffset ], nil
226240}
0 commit comments