Skip to main content

lib/quack_db/cursor.ex

defmodule QuackDB.Cursor do
  @moduledoc """
  Cursor metadata used by `DBConnection` streaming.

  A cursor tracks the remote Quack result UUID plus column/type metadata needed
  to fetch and materialize subsequent result chunks.
  """

  defstruct [:ref, :result_uuid, :columns, :result_types, :connection_id, :statement]
end

defimpl Inspect, for: QuackDB.Cursor do
  import Inspect.Algebra

  alias QuackDB.Inspect, as: QuackInspect

  def inspect(cursor, opts) do
    fields = [
      result_uuid: cursor.result_uuid,
      columns: cursor.columns,
      connection_id: QuackInspect.short_id(cursor.connection_id),
      statement: QuackInspect.truncate(cursor.statement)
    ]

    concat(QuackInspect.container("QuackDB.Cursor", fields, opts))
  end
end