March Docs

Depot.Schema

Depot.Schema: typed schema definitions for database tables.

A schema is a plain March value produced by Depot.Schema.define/2. It captures the table name, field types/options, associations, and primary key. Schemas drive Gate v2, Repo, Query, and Migration.

Usage:

fn schema() do
  Depot.Schema.define("users", {
    fields = {
      name  = "String",
      email = "String",
      age   = ("Int", { default: 0 }),
      role  = ("String", { default: "user" })
    }
  })
end

let s = schema()
Depot.Schema.table(s)        -- => "users"
Depot.Schema.field_names(s)  -- => ["name", "email", "age", "role"]
Depot.Schema.blank(s)        -- => { name: "", email: "", age: 0, role: "user" }

Types

typeSchemaSchema(a, b) = Schema(String, List((String, (String, List((String, a))))), List((String, String, String, List((String, b)))), String)#

Functions

fnassociationassociation(schema, name)#
fnassociationsassociations(schema)#
fnblankblank(schema)#
fndb_fieldsdb_fields(schema)#
fndefinedefine(table, spec)#
fnfield_entry_namefield_entry_name(field_entry)#
fnfield_namesfield_names(schema)#
fnfield_optsfield_opts(schema, name)#
fnfield_typefield_type(schema, name)#
fnfieldsfields(schema)#
fnhas_fieldhas_field(schema, name)#
fnis_not_virtualis_not_virtual(field_entry)#
fnis_soft_deletableis_soft_deletable(schema)#
fnis_virtualis_virtual(schema, field_name)#
fnparse_assoc_entryparse_assoc_entry(kind, entry)#
fnparse_field_entryparse_field_entry(entry)#
fnparse_field_specparse_field_spec(spec)#
fnparse_one_assocparse_one_assoc(kind, name, spec)#
fnprimary_keyprimary_key(schema)#
fnput_defaultput_default(r, name, type_str, opts)#
fnput_field_defaultput_field_default(r, field_entry)#
fntabletable(schema)#