Drops.SQL.Database.Table (drops_relation v0.1.0)

View Source

Represents a complete database table with all its metadata.

This struct stores comprehensive information about a database table including its name, columns, primary key, foreign keys, and indices extracted from database introspection.

Access Behaviour

The Table struct implements the Access behaviour, allowing you to access columns by name using bracket notation:

table[:column_name]  # Returns the Column struct or nil
table["column_name"] # Also works with string keys

Examples

# Simple table
%Drops.SQL.Database.Table{
  name: "users",
  columns: [
    %Drops.SQL.Database.Column{name: "id", type: :integer, primary_key: true, ...},
    %Drops.SQL.Database.Column{name: "email", type: "varchar(255)", primary_key: false, ...}
  ],
  primary_key: %Drops.SQL.Database.PrimaryKey{columns: ["id"]},
  foreign_keys: [],
  indices: [
    %Drops.SQL.Database.Index{name: "idx_users_email", columns: ["email"], unique: true, ...}
  ]
}

# Accessing columns
id_column = table[:id]
email_column = table["email"]

# Table with foreign keys
%Drops.SQL.Database.Table{
  name: "posts",
  columns: [...],
  primary_key: %Drops.SQL.Database.PrimaryKey{columns: ["id"]},
  foreign_keys: [
    %Drops.SQL.Database.ForeignKey{
      columns: ["user_id"],
      referenced_table: "users",
      referenced_columns: ["id"]
    }
  ],
  indices: [...]
}

Summary

Types

adapter()

@type adapter() :: :postgres | :sqlite | :mysql | atom()

t()

@type t() :: %Drops.SQL.Database.Table{
  adapter: adapter(),
  columns: [Drops.SQL.Database.Column.t()],
  foreign_keys: [Drops.SQL.Database.ForeignKey.t()],
  indices: [Drops.SQL.Database.Index.t()],
  name: String.t(),
  primary_key: Drops.SQL.Database.PrimaryKey.t()
}

Functions

new(name, adapter, columns, primary_key, foreign_keys, indices)

Creates a new Table struct.

Parameters

  • name - The table name
  • adapter - The database adapter (:postgres, :sqlite, etc.)
  • columns - List of Column structs
  • primary_key - PrimaryKey struct
  • foreign_keys - List of ForeignKey structs
  • indices - List of Index structs

Examples

iex> alias Drops.SQL.Database.{Column, PrimaryKey, ForeignKey, Index}
iex> columns = [Column.new("id", :integer, false, nil, true)]
iex> pk = PrimaryKey.new(["id"])
iex> fks = []
iex> indices = []
iex> Drops.SQL.Database.Table.new("users", :postgres, columns, pk, fks, indices)
%Drops.SQL.Database.Table{
  name: "users",
  adapter: :postgres,
  columns: [%Drops.SQL.Database.Column{name: "id", ...}],
  primary_key: %Drops.SQL.Database.PrimaryKey{columns: ["id"]},
  foreign_keys: [],
  indices: []
}