Drops.SQL.Database.Table (drops_relation v0.1.0)
View SourceRepresents 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
Functions
Creates a new Table struct.
Types
@type adapter() :: :postgres | :sqlite | :mysql | atom()
@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
@spec new( String.t(), adapter(), [Drops.SQL.Database.Column.t()], Drops.SQL.Database.PrimaryKey.t(), [Drops.SQL.Database.ForeignKey.t()], [Drops.SQL.Database.Index.t()] ) :: t()
Creates a new Table struct.
Parameters
name
- The table nameadapter
- The database adapter (:postgres, :sqlite, etc.)columns
- List of Column structsprimary_key
- PrimaryKey structforeign_keys
- List of ForeignKey structsindices
- 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: []
}