未验证 提交 85543b5b 编写于 作者: V Vlad Zarytovskii 提交者: GitHub

Revert "IL: optimize attribute cluster reading (#13821)" (#14497)

This reverts commit 179db4ed.
上级 73714c94
......@@ -1220,12 +1220,9 @@ type ISeekReadIndexedRowReader<'RowT, 'KeyT, 'T when 'RowT: struct> =
abstract CompareKey: 'KeyT -> int
abstract ConvertRow: byref<'RowT> -> 'T
let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowReader<'RowT, _, _>) =
let seekReadIndexedRowsByInterface numRows binaryChop (reader: ISeekReadIndexedRowReader<'RowT, _, _>) =
let mutable row = Unchecked.defaultof<'RowT>
let mutable startRid = -1
let mutable endRid = -1
if binaryChop then
let mutable low = 0
let mutable high = numRows + 1
......@@ -1244,12 +1241,12 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
elif c < 0 then high <- mid
else fin <- true
let res = ImmutableArray.CreateBuilder()
if high - low > 1 then
// now read off rows, forward and backwards
let mid = (low + high) / 2
startRid <- mid
// read backwards
let mutable fin = false
let mutable curr = mid - 1
......@@ -1261,12 +1258,14 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
reader.GetRow(curr, &row)
if reader.CompareKey(reader.GetKey(&row)) = 0 then
startRid <- curr
res.Add(reader.ConvertRow(&row))
else
fin <- true
curr <- curr - 1
res.Reverse()
// read forward
let mutable fin = false
let mutable curr = mid
......@@ -1278,47 +1277,23 @@ let seekReadIndexedRowsRange numRows binaryChop (reader: ISeekReadIndexedRowRead
reader.GetRow(curr, &row)
if reader.CompareKey(reader.GetKey(&row)) = 0 then
endRid <- curr
res.Add(reader.ConvertRow(&row))
else
fin <- true
curr <- curr + 1
res.ToArray()
else
let mutable rid = 1
let res = ImmutableArray.CreateBuilder()
while rid <= numRows && startRid = -1 do
reader.GetRow(rid, &row)
for i = 1 to numRows do
reader.GetRow(i, &row)
if reader.CompareKey(reader.GetKey(&row)) = 0 then
startRid <- rid
endRid <- rid
rid <- rid + 1
let mutable fin = false
while rid <= numRows && not fin do
reader.GetRow(rid, &row)
if reader.CompareKey(reader.GetKey(&row)) = 0 then
endRid <- rid
else
fin <- true
startRid, endRid
let seekReadIndexedRowsByInterface numRows binaryChop (reader: ISeekReadIndexedRowReader<'RowT, _, _>) =
let startRid, endRid = seekReadIndexedRowsRange numRows binaryChop reader
if startRid <= 0 || endRid < startRid then
[||]
else
res.Add(reader.ConvertRow(&row))
Array.init (endRid - startRid + 1) (fun i ->
let mutable row = Unchecked.defaultof<'RowT>
reader.GetRow(startRid + i, &row)
reader.ConvertRow(&row))
res.ToArray()
[<Struct>]
type CustomAttributeRow =
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册