@@ -1220,12 +1220,9 @@ type ISeekReadIndexedRowReader<'RowT, 'KeyT, 'T when 'RowT: struct> =
12201220 abstract CompareKey: 'KeyT -> int
12211221 abstract ConvertRow: byref < 'RowT > -> 'T
12221222
1223- let seekReadIndexedRowsRange numRows binaryChop ( reader : ISeekReadIndexedRowReader < 'RowT , _ , _ >) =
1223+ let seekReadIndexedRowsByInterface numRows binaryChop ( reader : ISeekReadIndexedRowReader < 'RowT , _ , _ >) =
12241224 let mutable row = Unchecked.defaultof< 'RowT>
12251225
1226- let mutable startRid = - 1
1227- let mutable endRid = - 1
1228-
12291226 if binaryChop then
12301227 let mutable low = 0
12311228 let mutable high = numRows + 1
@@ -1244,12 +1241,12 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
12441241 elif c < 0 then high <- mid
12451242 else fin <- true
12461243
1244+ let res = ImmutableArray.CreateBuilder()
1245+
12471246 if high - low > 1 then
12481247 // now read off rows, forward and backwards
12491248 let mid = ( low + high) / 2
12501249
1251- startRid <- mid
1252-
12531250 // read backwards
12541251 let mutable fin = false
12551252 let mutable curr = mid - 1
@@ -1261,12 +1258,14 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
12611258 reader.GetRow( curr, & row)
12621259
12631260 if reader.CompareKey( reader.GetKey(& row)) = 0 then
1264- startRid <- curr
1261+ res.Add ( reader.ConvertRow (& row ))
12651262 else
12661263 fin <- true
12671264
12681265 curr <- curr - 1
12691266
1267+ res.Reverse()
1268+
12701269 // read forward
12711270 let mutable fin = false
12721271 let mutable curr = mid
@@ -1278,47 +1277,23 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
12781277 reader.GetRow( curr, & row)
12791278
12801279 if reader.CompareKey( reader.GetKey(& row)) = 0 then
1281- endRid <- curr
1280+ res.Add ( reader.ConvertRow (& row ))
12821281 else
12831282 fin <- true
12841283
12851284 curr <- curr + 1
12861285
1286+ res.ToArray()
12871287 else
1288- let mutable rid = 1
1288+ let res = ImmutableArray.CreateBuilder ()
12891289
1290- while rid <= numRows && startRid = - 1 do
1291- reader.GetRow( rid , & row)
1290+ for i = 1 to numRows do
1291+ reader.GetRow( i , & row)
12921292
12931293 if reader.CompareKey( reader.GetKey(& row)) = 0 then
1294- startRid <- rid
1295- endRid <- rid
1296-
1297- rid <- rid + 1
1298-
1299- let mutable fin = false
1300-
1301- while rid <= numRows && not fin do
1302- reader.GetRow( rid, & row)
1303-
1304- if reader.CompareKey( reader.GetKey(& row)) = 0 then
1305- endRid <- rid
1306- else
1307- fin <- true
1308-
1309- startRid, endRid
1310-
1311- let seekReadIndexedRowsByInterface numRows binaryChop ( reader : ISeekReadIndexedRowReader < 'RowT , _ , _ >) =
1312- let startRid , endRid = seekReadIndexedRowsRange numRows binaryChop reader
1313-
1314- if startRid <= 0 || endRid < startRid then
1315- [||]
1316- else
1294+ res.Add( reader.ConvertRow(& row))
13171295
1318- Array.init ( endRid - startRid + 1 ) ( fun i ->
1319- let mutable row = Unchecked.defaultof< 'RowT>
1320- reader.GetRow( startRid + i, & row)
1321- reader.ConvertRow(& row))
1296+ res.ToArray()
13221297
13231298[<Struct>]
13241299type CustomAttributeRow =
0 commit comments