QuackDB.Protocol.DataChunk (quackdb v0.2.0)

Copy Markdown View Source

Decoder for DuckDB Quack DataChunk payloads.

Data chunks carry a row count, logical types, and column vectors. This module validates the chunk wrapper and converts decoded vectors into row-oriented results for the current DBConnection/Ecto-facing API.

Summary

Types

column()

@type column() :: %{
  type: QuackDB.Protocol.LogicalType.t(),
  vector_type: atom(),
  values: [term()]
}

row()

@type row() :: map() | Keyword.t()

t()

@type t() :: %QuackDB.Protocol.DataChunk{
  columns: [column()],
  row_count: non_neg_integer(),
  types: [QuackDB.Protocol.LogicalType.t()]
}

Functions

columns_from_rows(rows, options \\ [])

@spec columns_from_rows([row()], Keyword.t()) ::
  {:ok, [map()]} | {:error, QuackDB.Error.t()}

decode_wrapper(binary)

@spec decode_wrapper(binary()) :: QuackDB.Protocol.Reader.read_result(t())

encode(chunk)

@spec encode(t()) :: iodata()

encode_wrapper(chunk)

@spec encode_wrapper(t()) :: iodata()

from_rows(rows, options \\ [])

@spec from_rows([row()], Keyword.t()) :: {:ok, t()} | {:error, QuackDB.Error.t()}

rows(chunk, names \\ nil)

@spec rows(t(), [String.t()] | nil) :: [[term()]]