urQL/docs/ref-ch02-types.md
2023-05-17 19:51:26 -07:00

2.3 KiB

Types

All data presentations (nouns) of the Obelisk system available for user interaction -- whether reading, manipulation, or creation -- are strongly typed.

The fundamental data element is an atom typed by an aura. All data cells (the intersection of a table row and table column) are a typed atom. Obelisk supports the following auras:

aura type representation
@c unicode codepoint ~-~45fed.
@da date, absolute ~2020.12.25..7.15.0..1ef5
@dr date, relative ~d71.h19.m26.s24.9d55
@f loobean %.y
@if IPv4 address .195.198.143.90
@is IPv6 address .0.0.0.0.0.1c.c3c6.8f5a
@p phonemic base ~laszod-dozser-fosrum-fanbyr
@q phonemic base, unscrambled .~laszod-dozser-dalteb-hilsyn
@rh IEEE-754 half-precision, 16-bit .~~3.14
@rs IEEE-754 single-precision, 32-bit .3.141592653589793
@rd IEEE-754 double-precision, 64-bit .~3.141592653589793
@rq IEEE-754 quadruple-precision, 128-bit .~~~3.141592653589793
@s integer, signed (sign bit low)
@sb signed binary --0b10.0000
@sd signed decimal --1.000
@sv signed base-32 --0v201.4gvml.245kc
@sw signed base-64 --0w2.04AfS.G8xqc
@sx signed hexadecimal --0x2004.90fd
@t UTF-8 text (cord) 'urbit'
@ta ASCII text (knot) ~.urbit
@tas ASCII text symbol (term) %urbit
@ub unsigned binary 0b10.1011
@ud unsigned decimal 8.675.309
@uv unsigned base-32 0v88nvd
@uw unsigned base-64 0wx5~J
@ux unsigned hexadecimal 0x84.5fed

All datasets in Obelisk are tables. All tables either are, or derive from, base-tables spawned by CREATE TABLE.

Base-table (<table>} rows have exactly one type, the table's atomic aura-typed columns in a fixed order.

<row-type> ::= 
  list <aura>

Each base-table is itself typed by its own definition.

<table-type> ::= 
  list <row-type>

Base-table definitions include a unique primary ordering of rows, hence its type. This is not the case for every other instance of table (dataset).

<table-set-type> ::= 
  set <row-type>
  | set list <row-type>

Rows from <view>s, <common-table-expression>'s, and command output from <query>, <merge>, or any other table that is not a base-table can only have an immutable row ordering, if it was so specified. In general all these other tables have types are unions of <row-type>.