Current section
Files
Jump to
Current section
Files
src/ducky@types.erl
-module(ducky@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ducky/types.gleam").
-export([get/2]).
-export_type([value/0, row/0, data_frame/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(" Type mappings between DuckDB and Gleam.\n").
-type value() :: null |
{boolean, boolean()} |
{tiny_int, integer()} |
{small_int, integer()} |
{integer, integer()} |
{big_int, integer()} |
{float, float()} |
{double, float()} |
{text, binary()} |
{blob, bitstring()} |
{timestamp, integer()} |
{date, integer()} |
{time, integer()} |
{interval, integer()} |
{list, list(value())}.
-type row() :: {row, list(value())}.
-type data_frame() :: {data_frame, list(binary()), list(row())}.
-file("src/ducky/types.gleam", 41).
-spec list_at(list(DUD), integer()) -> gleam@option:option(DUD).
list_at(List, Index) ->
case {List, Index} of
{[], _} ->
none;
{[First | _], 0} ->
{some, First};
{[_ | Rest], N} when N > 0 ->
list_at(Rest, N - 1);
{_, _} ->
none
end.
-file("src/ducky/types.gleam", 35).
?DOC(" Get a value from a row by column index.\n").
-spec get(row(), integer()) -> gleam@option:option(value()).
get(Row, Index) ->
case Row of
{row, Values} ->
list_at(Values, Index)
end.