Documentation ¶
Index ¶
- Constants
- func Compare(row Row, colIdx int, ad *types.Datum) int
- func CopySelectedJoinRowsDirect(src *Chunk, selected []bool, dst *Chunk) (bool, error)
- func CopySelectedJoinRowsWithSameOuterRows(src *Chunk, innerColOffset, innerColLen, outerColOffset, outerColLen int, ...) (bool, error)
- func EstimateTypeWidth(colType *types.FieldType) int
- func GetFixedLen(colType *types.FieldType) int
- func NewIterator4RowContainer(c *RowContainer) *iterator4RowContainer
- type Chunk
- func (c *Chunk) Append(other *Chunk, begin, end int)
- func (c *Chunk) AppendBytes(colIdx int, b []byte)
- func (c *Chunk) AppendDatum(colIdx int, d *types.Datum)
- func (c *Chunk) AppendDuration(colIdx int, dur types.Duration)
- func (c *Chunk) AppendEnum(colIdx int, enum types.Enum)
- func (c *Chunk) AppendFloat32(colIdx int, f float32)
- func (c *Chunk) AppendFloat64(colIdx int, f float64)
- func (c *Chunk) AppendInt64(colIdx int, i int64)
- func (c *Chunk) AppendJSON(colIdx int, j json.BinaryJSON)
- func (c *Chunk) AppendMyDecimal(colIdx int, dec *types.MyDecimal)
- func (c *Chunk) AppendNull(colIdx int)
- func (c *Chunk) AppendPartialRow(colOff int, row Row)
- func (c *Chunk) AppendPartialRowByColIdxs(colOff int, row Row, colIdxs []int) (wide int)
- func (c *Chunk) AppendRow(row Row)
- func (c *Chunk) AppendRowByColIdxs(row Row, colIdxs []int) (wide int)
- func (c *Chunk) AppendSet(colIdx int, set types.Set)
- func (c *Chunk) AppendString(colIdx int, str string)
- func (c *Chunk) AppendTime(colIdx int, t types.Time)
- func (c *Chunk) AppendUint64(colIdx int, u uint64)
- func (c *Chunk) Capacity() int
- func (c *Chunk) Column(colIdx int) *Column
- func (c *Chunk) CopyConstruct() *Chunk
- func (c *Chunk) GetRow(idx int) Row
- func (c *Chunk) GrowAndReset(maxChunkSize int)
- func (c *Chunk) IsFull() bool
- func (c *Chunk) LowerBound(colIdx int, d *types.Datum) (index int, match bool)
- func (c *Chunk) MakeRef(srcColIdx, dstColIdx int)
- func (c *Chunk) MakeRefTo(dstColIdx int, src *Chunk, srcColIdx int) error
- func (c *Chunk) MemoryUsage() (sum int64)
- func (c *Chunk) NumCols() int
- func (c *Chunk) NumRows() int
- func (c *Chunk) Prune(usedColIdxs []int) *Chunk
- func (c *Chunk) Reconstruct()
- func (c *Chunk) RequiredRows() int
- func (c *Chunk) Reset()
- func (c *Chunk) Sel() []int
- func (c *Chunk) SetCol(colIdx int, col *Column) *Column
- func (c *Chunk) SetNumVirtualRows(numVirtualRows int)
- func (c *Chunk) SetRequiredRows(requiredRows, maxChunkSize int) *Chunk
- func (c *Chunk) SetSel(sel []int)
- func (c *Chunk) SwapColumn(colIdx int, other *Chunk, otherIdx int) error
- func (c *Chunk) SwapColumns(other *Chunk)
- func (c *Chunk) TruncateTo(numRows int)
- func (c *Chunk) UpperBound(colIdx int, d *types.Datum) int
- type Codec
- type Column
- func (c *Column) AppendBytes(b []byte)
- func (c *Column) AppendDuration(dur types.Duration)
- func (c *Column) AppendEnum(enum types.Enum)
- func (c *Column) AppendFloat32(f float32)
- func (c *Column) AppendFloat64(f float64)
- func (c *Column) AppendInt64(i int64)
- func (c *Column) AppendJSON(j json.BinaryJSON)
- func (c *Column) AppendMyDecimal(dec *types.MyDecimal)
- func (c *Column) AppendNull()
- func (c *Column) AppendSet(set types.Set)
- func (c *Column) AppendString(str string)
- func (c *Column) AppendTime(t types.Time)
- func (c *Column) AppendUint64(u uint64)
- func (c *Column) CopyConstruct(dst *Column) *Column
- func (c *Column) CopyReconstruct(sel []int, dst *Column) *Column
- func (c *Column) Decimals() []types.MyDecimal
- func (c *Column) Float32s() []float32
- func (c *Column) Float64s() []float64
- func (c *Column) GetBytes(rowID int) []byte
- func (c *Column) GetDecimal(rowID int) *types.MyDecimal
- func (c *Column) GetDuration(rowID int, fillFsp int) types.Duration
- func (c *Column) GetEnum(rowID int) types.Enum
- func (c *Column) GetFloat32(rowID int) float32
- func (c *Column) GetFloat64(rowID int) float64
- func (c *Column) GetInt64(rowID int) int64
- func (c *Column) GetJSON(rowID int) json.BinaryJSON
- func (c *Column) GetRaw(rowID int) []byte
- func (c *Column) GetSet(rowID int) types.Set
- func (c *Column) GetString(rowID int) string
- func (c *Column) GetTime(rowID int) types.Time
- func (c *Column) GetUint64(rowID int) uint64
- func (c *Column) GoDurations() []time.Duration
- func (c *Column) Int64s() []int64
- func (c *Column) IsNull(rowIdx int) bool
- func (c *Column) MergeNulls(cols ...*Column)
- func (c *Column) ReserveBytes(n int)
- func (c *Column) ReserveEnum(n int)
- func (c *Column) ReserveJSON(n int)
- func (c *Column) ReserveSet(n int)
- func (c *Column) ReserveString(n int)
- func (c *Column) Reset(eType types.EvalType)
- func (c *Column) ResizeDecimal(n int, isNull bool)
- func (c *Column) ResizeFloat32(n int, isNull bool)
- func (c *Column) ResizeFloat64(n int, isNull bool)
- func (c *Column) ResizeGoDuration(n int, isNull bool)
- func (c *Column) ResizeInt64(n int, isNull bool)
- func (c *Column) ResizeTime(n int, isNull bool)
- func (c *Column) ResizeUint64(n int, isNull bool)
- func (c *Column) SetNull(rowIdx int, isNull bool)
- func (c *Column) SetNulls(begin, end int, isNull bool)
- func (c *Column) SetRaw(rowID int, bs []byte)
- func (c *Column) Times() []types.Time
- func (c *Column) Uint64s() []uint64
- type CompareFunc
- type Decoder
- type Iterator
- type Iterator4Chunk
- func (it *Iterator4Chunk) Begin() Row
- func (it *Iterator4Chunk) Current() Row
- func (it *Iterator4Chunk) End() Row
- func (it *Iterator4Chunk) Error() error
- func (it *Iterator4Chunk) GetChunk() *Chunk
- func (it *Iterator4Chunk) Len() int
- func (it *Iterator4Chunk) Next() Row
- func (it *Iterator4Chunk) ReachEnd()
- type List
- func (l *List) Add(chk *Chunk)
- func (l *List) AppendRow(row Row) RowPtr
- func (l *List) Clear()
- func (l *List) FieldTypes() []*types.FieldType
- func (l *List) GetChunk(chkIdx int) *Chunk
- func (l *List) GetMemTracker() *memory.Tracker
- func (l *List) GetRow(ptr RowPtr) Row
- func (l *List) Insert(ptr RowPtr, row Row)
- func (l *List) Len() int
- func (l *List) NumChunks() int
- func (l *List) NumRowsOfChunk(chkID int) int
- func (l *List) Reset()
- func (l *List) Walk(walkFunc ListWalkFunc) error
- type ListInDisk
- func (l *ListInDisk) Add(chk *Chunk) (err error)
- func (l *ListInDisk) Close() error
- func (l *ListInDisk) GetDiskTracker() *disk.Tracker
- func (l *ListInDisk) GetRow(ptr RowPtr) (row Row, err error)
- func (l *ListInDisk) Len() int
- func (l *ListInDisk) NumChunks() int
- func (l *ListInDisk) NumRowsOfChunk(chkID int) int
- type ListWalkFunc
- type MutRow
- func (mr MutRow) Len() int
- func (mr MutRow) SetDatum(colIdx int, d types.Datum)
- func (mr MutRow) SetDatums(datums ...types.Datum)
- func (mr MutRow) SetRow(row Row)
- func (mr MutRow) SetValue(colIdx int, val interface{})
- func (mr MutRow) SetValues(vals ...interface{})
- func (mr MutRow) ShallowCopyPartialRow(colIdx int, row Row)
- func (mr MutRow) ToRow() Row
- type Pool
- type Row
- func (r Row) Chunk() *Chunk
- func (r Row) CopyConstruct() Row
- func (r Row) GetBytes(colIdx int) []byte
- func (r Row) GetDatum(colIdx int, tp *types.FieldType) types.Datum
- func (r Row) GetDatumRow(fields []*types.FieldType) []types.Datum
- func (r Row) GetDuration(colIdx int, fillFsp int) types.Duration
- func (r Row) GetEnum(colIdx int) types.Enum
- func (r Row) GetFloat32(colIdx int) float32
- func (r Row) GetFloat64(colIdx int) float64
- func (r Row) GetInt64(colIdx int) int64
- func (r Row) GetJSON(colIdx int) json.BinaryJSON
- func (r Row) GetMyDecimal(colIdx int) *types.MyDecimal
- func (r Row) GetRaw(colIdx int) []byte
- func (r Row) GetSet(colIdx int) types.Set
- func (r Row) GetString(colIdx int) string
- func (r Row) GetTime(colIdx int) types.Time
- func (r Row) GetUint64(colIdx int) uint64
- func (r Row) Idx() int
- func (r Row) IsEmpty() bool
- func (r Row) IsNull(colIdx int) bool
- func (r Row) Len() int
- type RowContainer
- func (c *RowContainer) ActionSpill() *SpillDiskAction
- func (c *RowContainer) Add(chk *Chunk) (err error)
- func (c *RowContainer) AllocChunk() (chk *Chunk)
- func (c *RowContainer) AlreadySpilled() bool
- func (c *RowContainer) AlreadySpilledSafe() bool
- func (c *RowContainer) AppendRow(row Row) (RowPtr, error)
- func (c *RowContainer) Close() (err error)
- func (c *RowContainer) GetChunk(chkIdx int) *Chunk
- func (c *RowContainer) GetDiskTracker() *disk.Tracker
- func (c *RowContainer) GetList() *List
- func (c *RowContainer) GetMemTracker() *memory.Tracker
- func (c *RowContainer) GetRow(ptr RowPtr) (Row, error)
- func (c *RowContainer) NumChunks() int
- func (c *RowContainer) NumRow() int
- func (c *RowContainer) NumRowsOfChunk(chkID int) int
- func (c *RowContainer) Reset() error
- func (c *RowContainer) SetOnExceededCallback(f func(rowContainer *RowContainer))
- type RowPtr
- type SpillDiskAction
Constants ¶
const ( InitialCapacity = 32 ZeroCapacity = 0 )
Capacity constants.
Variables ¶
This section is empty.
Functions ¶
func Compare ¶
Compare compares the value with ad. We assume that the collation information of the column is the same with the datum.
func CopySelectedJoinRowsDirect ¶
CopySelectedJoinRowsDirect directly copies the selected joined rows from the source Chunk to the destination Chunk. Return true if at least one joined row was selected.
func CopySelectedJoinRowsWithSameOuterRows ¶
func CopySelectedJoinRowsWithSameOuterRows(src *Chunk, innerColOffset, innerColLen, outerColOffset, outerColLen int, selected []bool, dst *Chunk) (bool, error)
CopySelectedJoinRowsWithSameOuterRows copies the selected joined rows from the source Chunk to the destination Chunk. Return true if at least one joined row was selected.
NOTE: All the outer rows in the source Chunk should be the same.
func EstimateTypeWidth ¶
EstimateTypeWidth estimates the average width of values of the type. This is used by the planner, which doesn't require absolutely correct results; it's OK (and expected) to guess if we don't know for sure.
mostly study from https://github.com/postgres/postgres/blob/REL_12_STABLE/src/backend/utils/cache/lsyscache.c#L2356
func GetFixedLen ¶
GetFixedLen get the memory size of a fixed-length type. if colType is not fixed-length, it returns varElemLen, aka -1.
func NewIterator4RowContainer ¶
func NewIterator4RowContainer(c *RowContainer) *iterator4RowContainer
NewIterator4RowContainer create a new iterator for RowContainer
Types ¶
type Chunk ¶
type Chunk struct {
// contains filtered or unexported fields
}
Chunk stores multiple rows of data in Apache Arrow format. See https://arrow.apache.org/docs/memory_layout.html Values are appended in compact format and can be directly accessed without decoding. When the chunk is done processing, we can reuse the allocated memory by resetting it.
func New ¶
New creates a new chunk.
cap: the limit for the max number of rows. maxChunkSize: the max limit for the number of rows.
func NewChunkWithCapacity ¶
NewChunkWithCapacity creates a new chunk with field types and capacity.
func Renew ¶
Renew creates a new Chunk based on an existing Chunk. The newly created Chunk has the same data schema with the old Chunk. The capacity of the new Chunk might be doubled based on the capacity of the old Chunk and the maxChunkSize.
chk: old chunk(often used in previous call). maxChunkSize: the limit for the max number of rows.
func (*Chunk) AppendBytes ¶
AppendBytes appends a bytes value to the chunk.
func (*Chunk) AppendDatum ¶
AppendDatum appends a datum into the chunk.
func (*Chunk) AppendDuration ¶
AppendDuration appends a Duration value to the chunk.
func (*Chunk) AppendEnum ¶
AppendEnum appends an Enum value to the chunk.
func (*Chunk) AppendFloat32 ¶
AppendFloat32 appends a float32 value to the chunk.
func (*Chunk) AppendFloat64 ¶
AppendFloat64 appends a float64 value to the chunk.
func (*Chunk) AppendInt64 ¶
AppendInt64 appends a int64 value to the chunk.
func (*Chunk) AppendJSON ¶
func (c *Chunk) AppendJSON(colIdx int, j json.BinaryJSON)
AppendJSON appends a JSON value to the chunk.
func (*Chunk) AppendMyDecimal ¶
AppendMyDecimal appends a MyDecimal value to the chunk.
func (*Chunk) AppendNull ¶
AppendNull appends a null value to the chunk.
func (*Chunk) AppendPartialRow ¶
AppendPartialRow appends a row to the chunk.
func (*Chunk) AppendPartialRowByColIdxs ¶
AppendPartialRowByColIdxs appends a row by its colIdxs to the chunk. 1. every columns are used if colIdxs is nil. 2. no columns are used if colIdxs is not nil but the size of colIdxs is 0.
func (*Chunk) AppendRowByColIdxs ¶
AppendRowByColIdxs appends a row by its colIdxs to the chunk. 1. every columns are used if colIdxs is nil. 2. no columns are used if colIdxs is not nil but the size of colIdxs is 0.
func (*Chunk) AppendString ¶
AppendString appends a string value to the chunk.
func (*Chunk) AppendTime ¶
AppendTime appends a Time value to the chunk. TODO: change the time structure so it can be directly written to memory.
func (*Chunk) AppendUint64 ¶
AppendUint64 appends a uint64 value to the chunk.
func (*Chunk) CopyConstruct ¶
CopyConstruct creates a new chunk and copies this chunk's data into it.
func (*Chunk) GrowAndReset ¶
GrowAndReset resets the Chunk and doubles the capacity of the Chunk. The doubled capacity should not be larger than maxChunkSize. TODO: this method will be used in following PR.
func (*Chunk) LowerBound ¶
LowerBound searches on the non-decreasing Column colIdx, returns the smallest index i such that the value at row i is not less than `d`.
func (*Chunk) MakeRefTo ¶
MakeRefTo copies columns `src.columns[srcColIdx]` to `c.columns[dstColIdx]`.
func (*Chunk) MemoryUsage ¶
MemoryUsage returns the total memory usage of a Chunk in B. We ignore the size of Column.length and Column.nullCount since they have little effect of the total memory usage.
func (*Chunk) Prune ¶
Prune creates a new Chunk according to `c` and prunes the columns whose index is not in `usedColIdxs`
func (*Chunk) Reconstruct ¶
func (c *Chunk) Reconstruct()
Reconstruct removes all filtered rows in this Chunk.
func (*Chunk) RequiredRows ¶
RequiredRows returns how many rows is considered full.
func (*Chunk) Reset ¶
func (c *Chunk) Reset()
Reset resets the chunk, so the memory it allocated can be reused. Make sure all the data in the chunk is not used anymore before you reuse this chunk.
func (*Chunk) SetNumVirtualRows ¶
SetNumVirtualRows sets the virtual row number for a Chunk. It should only be used when there exists no Column in the Chunk.
func (*Chunk) SetRequiredRows ¶
SetRequiredRows sets the number of required rows.
func (*Chunk) SwapColumn ¶
SwapColumn swaps Column "c.columns[colIdx]" with Column "other.columns[otherIdx]". If there exists columns refer to the Column to be swapped, we need to re-build the reference.
func (*Chunk) SwapColumns ¶
SwapColumns swaps columns with another Chunk.
func (*Chunk) TruncateTo ¶
TruncateTo truncates rows from tail to head in a Chunk to "numRows" rows.
type Codec ¶
type Codec struct {
// contains filtered or unexported fields
}
Codec is used to: 1. encode a Chunk to a byte slice. 2. decode a Chunk from a byte slice.
func (*Codec) DecodeToChunk ¶
DecodeToChunk decodes a Chunk from a byte slice, return the remained unused bytes.
type Column ¶
type Column struct {
// contains filtered or unexported fields
}
Column stores one column of data in Apache Arrow format. See https://arrow.apache.org/docs/memory_layout.html
func (*Column) AppendBytes ¶
AppendBytes appends a byte slice into this Column.
func (*Column) AppendDuration ¶
AppendDuration appends a duration value into this Column.
func (*Column) AppendEnum ¶
AppendEnum appends a Enum value into this Column.
func (*Column) AppendFloat32 ¶
AppendFloat32 appends a float32 value into this Column.
func (*Column) AppendFloat64 ¶
AppendFloat64 appends a float64 value into this Column.
func (*Column) AppendInt64 ¶
AppendInt64 appends an int64 value into this Column.
func (*Column) AppendJSON ¶
func (c *Column) AppendJSON(j json.BinaryJSON)
AppendJSON appends a BinaryJSON value into this Column.
func (*Column) AppendMyDecimal ¶
AppendMyDecimal appends a MyDecimal value into this Column.
func (*Column) AppendNull ¶
func (c *Column) AppendNull()
AppendNull appends a null value into this Column.
func (*Column) AppendString ¶
AppendString appends a string value into this Column.
func (*Column) AppendTime ¶
AppendTime appends a time value into this Column.
func (*Column) AppendUint64 ¶
AppendUint64 appends a uint64 value into this Column.
func (*Column) CopyConstruct ¶
CopyConstruct copies this Column to dst. If dst is nil, it creates a new Column and returns it.
func (*Column) CopyReconstruct ¶
CopyReconstruct copies this Column to dst and removes unselected rows. If dst is nil, it creates a new Column and returns it.
func (*Column) GetDecimal ¶
GetDecimal returns the decimal in the specific row.
func (*Column) GetDuration ¶
GetDuration returns the Duration in the specific row.
func (*Column) GetFloat32 ¶
GetFloat32 returns the float32 in the specific row.
func (*Column) GetFloat64 ¶
GetFloat64 returns the float64 in the specific row.
func (*Column) GetJSON ¶
func (c *Column) GetJSON(rowID int) json.BinaryJSON
GetJSON returns the JSON in the specific row.
func (*Column) GoDurations ¶
GoDurations returns a Golang time.Duration slice stored in this Column. Different from the Row.GetDuration method, the argument Fsp is ignored, so the user should handle it outside.
func (*Column) MergeNulls ¶
MergeNulls merges these columns' null bitmaps. For a row, if any column of it is null, the result is null. It works like: if col1.IsNull || col2.IsNull || col3.IsNull. The caller should ensure that all these columns have the same length, and data stored in the result column is fixed-length type.
func (*Column) ReserveBytes ¶
ReserveBytes changes the column capacity to store n bytes elements and set the length to zero.
func (*Column) ReserveEnum ¶
ReserveEnum changes the column capacity to store n enum elements and set the length to zero.
func (*Column) ReserveJSON ¶
ReserveJSON changes the column capacity to store n JSON elements and set the length to zero.
func (*Column) ReserveSet ¶
ReserveSet changes the column capacity to store n set elements and set the length to zero.
func (*Column) ReserveString ¶
ReserveString changes the column capacity to store n string elements and set the length to zero.
func (*Column) Reset ¶
Reset resets this Column according to the EvalType. Different from reset, Reset will reset the elemBuf.
func (*Column) ResizeDecimal ¶
ResizeDecimal resizes the column so that it contains n decimal elements.
func (*Column) ResizeFloat32 ¶
ResizeFloat32 resizes the column so that it contains n float32 elements.
func (*Column) ResizeFloat64 ¶
ResizeFloat64 resizes the column so that it contains n float64 elements.
func (*Column) ResizeGoDuration ¶
ResizeGoDuration resizes the column so that it contains n duration elements.
func (*Column) ResizeInt64 ¶
ResizeInt64 resizes the column so that it contains n int64 elements.
func (*Column) ResizeTime ¶
ResizeTime resizes the column so that it contains n Time elements.
func (*Column) ResizeUint64 ¶
ResizeUint64 resizes the column so that it contains n uint64 elements.
func (*Column) SetRaw ¶
SetRaw sets the raw bytes for the rowIdx-th element. NOTE: Two conditions must be satisfied before calling this function: 1. The column should be stored with variable-length elements. 2. The length of the new element should be exactly the same as the old one.
type CompareFunc ¶
CompareFunc is a function to compare the two values in Row, the two columns must have the same type.
func GetCompareFunc ¶
func GetCompareFunc(tp *types.FieldType) CompareFunc
GetCompareFunc gets a compare function for the field type.
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
Decoder decodes the data returned from the coprocessor and stores the result in Chunk. How Decoder works:
- Initialization phase: Decode a whole input byte slice to Decoder.intermChk(intermediate chunk) using Codec.Decode. intermChk is introduced to simplify the implementation of decode phase. This phase uses pointer operations with less CPU and memory cost.
- Decode phase: 2.1 Set the number of rows to be decoded to a value that is a multiple of 8 and greater than `chk.RequiredRows() - chk.NumRows()`. This reduces the overhead of copying the srcCol.nullBitMap into destCol.nullBitMap. 2.2 Append srcCol.offsets to destCol.offsets when the elements is of var-length type. And further adjust the offsets according to descCol.offsets[destCol.length]-srcCol.offsets[0]. 2.3 Append srcCol.nullBitMap to destCol.nullBitMap.
- Go to step 1 when the input byte slice is consumed.
func NewDecoder ¶
NewDecoder creates a new Decoder object for decode a Chunk.
func (*Decoder) Decode ¶
Decode decodes multiple rows of Decoder.intermChk and stores the result in chk.
func (*Decoder) IsFinished ¶
IsFinished indicates whether Decoder.intermChk has been dried up.
func (*Decoder) RemainedRows ¶
RemainedRows indicates Decoder.intermChk has remained rows.
func (*Decoder) Reset ¶
Reset decodes data and store the result in Decoder.intermChk. This decode phase uses pointer operations with less CPU and memory costs.
func (*Decoder) ReuseIntermChk ¶
ReuseIntermChk swaps `Decoder.intermChk` with `chk` directly when `Decoder.intermChk.NumRows()` is no less than `chk.requiredRows * factor` where `factor` is 0.8 now. This can avoid the overhead of appending the data from `Decoder.intermChk` to `chk`. Moreover, the column.offsets needs to be further adjusted according to column.offset[0].
type Iterator ¶
type Iterator interface { // Begin resets the cursor of the iterator and returns the first Row. Begin() Row // Next returns the next Row. Next() Row // End returns the invalid end Row. End() Row // Len returns the length. Len() int // Current returns the current Row. Current() Row // ReachEnd reaches the end of iterator. ReachEnd() // Error returns none-nil error if anything wrong happens during the iteration. Error() error }
Iterator is used to iterate a number of rows.
for row := it.Begin(); row != it.End(); row = it.Next() { ... }
func NewIterator4List ¶
NewIterator4List returns a Iterator for List.
func NewIterator4RowPtr ¶
NewIterator4RowPtr returns a Iterator for RowPtrs.
func NewIterator4Slice ¶
NewIterator4Slice returns a Iterator for Row slice.
func NewMultiIterator ¶
NewMultiIterator creates a new multiIterator
type Iterator4Chunk ¶
type Iterator4Chunk struct {
// contains filtered or unexported fields
}
Iterator4Chunk is used to iterate rows inside a chunk.
func NewIterator4Chunk ¶
func NewIterator4Chunk(chk *Chunk) *Iterator4Chunk
NewIterator4Chunk returns a iterator for Chunk.
func (*Iterator4Chunk) Begin ¶
func (it *Iterator4Chunk) Begin() Row
Begin implements the Iterator interface.
func (*Iterator4Chunk) Current ¶
func (it *Iterator4Chunk) Current() Row
Current implements the Iterator interface.
func (*Iterator4Chunk) End ¶
func (it *Iterator4Chunk) End() Row
End implements the Iterator interface.
func (*Iterator4Chunk) Error ¶
func (it *Iterator4Chunk) Error() error
Error returns none-nil error if anything wrong happens during the iteration.
func (*Iterator4Chunk) GetChunk ¶
func (it *Iterator4Chunk) GetChunk() *Chunk
GetChunk returns the chunk stored in the Iterator4Chunk
func (*Iterator4Chunk) Len ¶
func (it *Iterator4Chunk) Len() int
Len implements the Iterator interface
func (*Iterator4Chunk) Next ¶
func (it *Iterator4Chunk) Next() Row
Next implements the Iterator interface.
func (*Iterator4Chunk) ReachEnd ¶
func (it *Iterator4Chunk) ReachEnd()
ReachEnd implements the Iterator interface.
type List ¶
type List struct {
// contains filtered or unexported fields
}
List holds a slice of chunks, use to append rows with max chunk size properly handled.
func (*List) Add ¶
Add adds a chunk to the List, the chunk may be modified later by the list. Caller must make sure the input chk is not empty and not used any more and has the same field types.
func (*List) Clear ¶
func (l *List) Clear()
Clear triggers GC for all the allocated chunks and reset the list
func (*List) FieldTypes ¶
FieldTypes returns the fieldTypes of the list
func (*List) GetMemTracker ¶
GetMemTracker returns the memory tracker of this List.
func (*List) Insert ¶
Insert inserts `row` on the position specified by `ptr`. Note: Insert will cover the origin data, it should be called after PreAlloc.
func (*List) NumRowsOfChunk ¶
NumRowsOfChunk returns the number of rows of a chunk in the ListInDisk.
func (*List) Walk ¶
func (l *List) Walk(walkFunc ListWalkFunc) error
Walk iterate the list and call walkFunc for each row.
type ListInDisk ¶
type ListInDisk struct {
// contains filtered or unexported fields
}
ListInDisk represents a slice of chunks storing in temporary disk.
func NewListInDisk ¶
func NewListInDisk(fieldTypes []*types.FieldType) *ListInDisk
NewListInDisk creates a new ListInDisk with field types.
func (*ListInDisk) Add ¶
func (l *ListInDisk) Add(chk *Chunk) (err error)
Add adds a chunk to the ListInDisk. Caller must make sure the input chk is not empty and not used any more and has the same field types. Warning: do not mix Add and GetRow (always use GetRow after you have added all the chunks), and do not use Add concurrently.
func (*ListInDisk) GetDiskTracker ¶
func (l *ListInDisk) GetDiskTracker() *disk.Tracker
GetDiskTracker returns the memory tracker of this List.
func (*ListInDisk) GetRow ¶
func (l *ListInDisk) GetRow(ptr RowPtr) (row Row, err error)
GetRow gets a Row from the ListInDisk by RowPtr.
func (*ListInDisk) Len ¶
func (l *ListInDisk) Len() int
Len returns the number of rows in ListInDisk
func (*ListInDisk) NumChunks ¶
func (l *ListInDisk) NumChunks() int
NumChunks returns the number of chunks in the ListInDisk.
func (*ListInDisk) NumRowsOfChunk ¶
func (l *ListInDisk) NumRowsOfChunk(chkID int) int
NumRowsOfChunk returns the number of rows of a chunk in the ListInDisk.
type ListWalkFunc ¶
ListWalkFunc is used to walk the list. If error is returned, it will stop walking.
type MutRow ¶
type MutRow Row
MutRow represents a mutable Row. The underlying columns only contains one row and not exposed to the user.
func MutRowFromDatums ¶
MutRowFromDatums creates a MutRow from a datum slice.
func MutRowFromTypes ¶
MutRowFromTypes creates a MutRow from a FieldType slice, each Column is initialized to zero value.
func MutRowFromValues ¶
func MutRowFromValues(vals ...interface{}) MutRow
MutRowFromValues creates a MutRow from a interface slice.
func (MutRow) SetValues ¶
func (mr MutRow) SetValues(vals ...interface{})
SetValues sets the MutRow with values.
func (MutRow) ShallowCopyPartialRow ¶
ShallowCopyPartialRow shallow copies the data of `row` to MutRow.
type Pool ¶
type Pool struct {
// contains filtered or unexported fields
}
Pool is the Column pool. NOTE: Pool is non-copyable.
type Row ¶
type Row struct {
// contains filtered or unexported fields
}
Row represents a row of data, can be used to access values.
func (Row) CopyConstruct ¶
CopyConstruct creates a new row and copies this row's data into it.
func (Row) GetDatumRow ¶
GetDatumRow converts chunk.Row to types.DatumRow. Keep in mind that GetDatumRow has a reference to r.c, which is a chunk, this function works only if the underlying chunk is valid or unchanged.
func (Row) GetDuration ¶
GetDuration returns the Duration value with the colIdx.
func (Row) GetFloat32 ¶
GetFloat32 returns the float32 value with the colIdx.
func (Row) GetFloat64 ¶
GetFloat64 returns the float64 value with the colIdx.
func (Row) GetJSON ¶
func (r Row) GetJSON(colIdx int) json.BinaryJSON
GetJSON returns the JSON value with the colIdx.
func (Row) GetMyDecimal ¶
GetMyDecimal returns the MyDecimal value with the colIdx.
type RowContainer ¶
type RowContainer struct {
// contains filtered or unexported fields
}
RowContainer provides a place for many rows, so many that we might want to spill them into disk.
func NewRowContainer ¶
func NewRowContainer(fieldType []*types.FieldType, chunkSize int) *RowContainer
NewRowContainer creates a new RowContainer in memory.
func (*RowContainer) ActionSpill ¶
func (c *RowContainer) ActionSpill() *SpillDiskAction
ActionSpill returns a SpillDiskAction for spilling over to disk.
func (*RowContainer) Add ¶
func (c *RowContainer) Add(chk *Chunk) (err error)
Add appends a chunk into the RowContainer.
func (*RowContainer) AllocChunk ¶
func (c *RowContainer) AllocChunk() (chk *Chunk)
AllocChunk allocates a new chunk from RowContainer.
func (*RowContainer) AlreadySpilled ¶
func (c *RowContainer) AlreadySpilled() bool
AlreadySpilled indicates that records have spilled out into disk.
func (*RowContainer) AlreadySpilledSafe ¶
func (c *RowContainer) AlreadySpilledSafe() bool
AlreadySpilledSafe indicates that records have spilled out into disk. It's thread-safe.
func (*RowContainer) AppendRow ¶
func (c *RowContainer) AppendRow(row Row) (RowPtr, error)
AppendRow appends a row to the RowContainer, the row is copied to the RowContainer.
func (*RowContainer) Close ¶
func (c *RowContainer) Close() (err error)
Close close the RowContainer
func (*RowContainer) GetChunk ¶
func (c *RowContainer) GetChunk(chkIdx int) *Chunk
GetChunk returns chkIdx th chunk of in memory records.
func (*RowContainer) GetDiskTracker ¶
func (c *RowContainer) GetDiskTracker() *disk.Tracker
GetDiskTracker returns the underlying disk usage tracker in recordsInDisk.
func (*RowContainer) GetList ¶
func (c *RowContainer) GetList() *List
GetList returns the list of in memory records.
func (*RowContainer) GetMemTracker ¶
func (c *RowContainer) GetMemTracker() *memory.Tracker
GetMemTracker returns the memory tracker in records, panics if the RowContainer has already spilled.
func (*RowContainer) GetRow ¶
func (c *RowContainer) GetRow(ptr RowPtr) (Row, error)
GetRow returns the row the ptr pointed to.
func (*RowContainer) NumChunks ¶
func (c *RowContainer) NumChunks() int
NumChunks returns the number of chunks in the container.
func (*RowContainer) NumRow ¶
func (c *RowContainer) NumRow() int
NumRow returns the number of rows in the container
func (*RowContainer) NumRowsOfChunk ¶
func (c *RowContainer) NumRowsOfChunk(chkID int) int
NumRowsOfChunk returns the number of rows of a chunk in the ListInDisk.
func (*RowContainer) SetOnExceededCallback ¶
func (c *RowContainer) SetOnExceededCallback(f func(rowContainer *RowContainer))
SetOnExceededCallback set a callback function for exceeded memory limit.
type RowPtr ¶
RowPtr is used to get a row from a list. It is only valid for the list that returns it.
type SpillDiskAction ¶
type SpillDiskAction struct {
// contains filtered or unexported fields
}
SpillDiskAction implements memory.ActionOnExceed for chunk.List. If the memory quota of a query is exceeded, SpillDiskAction.Action is triggered.
func (*SpillDiskAction) Action ¶
func (a *SpillDiskAction) Action(t *memory.Tracker)
Action sends a signal to trigger spillToDisk method of RowContainer and if it is already triggered before, call its fallbackAction.
func (*SpillDiskAction) ResetOnce ¶
func (a *SpillDiskAction) ResetOnce()
ResetOnce resets the spill action so that it can be triggered next time.
func (*SpillDiskAction) ResetOnceAndSetRowContainer ¶
func (a *SpillDiskAction) ResetOnceAndSetRowContainer(c *RowContainer)
ResetOnceAndSetRowContainer resets the spill action and sets the RowContainer for the SpillDiskAction.
func (*SpillDiskAction) SetFallback ¶
func (a *SpillDiskAction) SetFallback(fallback memory.ActionOnExceed)
SetFallback sets the fallback action.
func (*SpillDiskAction) SetLogHook ¶
func (a *SpillDiskAction) SetLogHook(hook func(uint64))
SetLogHook sets the hook, it does nothing just to form the memory.ActionOnExceed interface.