Documentation
¶
Overview ¶
Package drivers talks to various database backends and retrieves table, column, type, and foreign key information
Index ¶
- func BuildRelationships(tables []Table) map[string][]orm.Relationship
- func ColumnDBTypes(cols []Column) map[string]string
- func ColumnNames(cols []Column) []string
- func ColumnsFromList(list []string, tablename string) []string
- func DefaultEnv(key, def string) string
- func IsJoinTable(t Table) bool
- func TablesFromList(list []string) []string
- type Column
- type ColumnFilter
- type Constraint
- type Constructor
- type DBConstraints
- type DBInfo
- type Filter
- type ForeignKey
- type Interface
- type PrimaryKey
- type Table
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildRelationships ¶
func BuildRelationships(tables []Table) map[string][]orm.Relationship
func ColumnDBTypes ¶
ColumnDBTypes of the columns.
func ColumnsFromList ¶
ColumnsFromList takes a whitelist or blacklist and returns the columns for a given table.
func DefaultEnv ¶
DefaultEnv grabs a value from the environment or a default. This is shared by drivers to get config for testing.
func IsJoinTable ¶
A composite primary key involving two columns Both primary key columns are also foreign keys
func TablesFromList ¶
TablesFromList takes a whitelist or blacklist and returns the table names.
Types ¶
type Column ¶
type Column struct { Name string `json:"name" toml:"name"` DBType string `json:"db_type" toml:"db_type"` Default string `json:"default" toml:"default"` Comment string `json:"comment" toml:"comment"` Nullable bool `json:"nullable" toml:"nullable"` Unique bool `json:"unique" toml:"unique"` Generated bool `json:"generated" toml:"generated"` Type string `json:"type" toml:"type"` Imports importers.List `json:"imports" toml:"imports"` // Postgres only extension bits // ArrType is the underlying data type of the Postgres // ARRAY type. See here: // https://www.postgresql.org/docs/9.1/static/infoschema-element-types.html ArrType *string `json:"arr_type" toml:"arr_type"` UDTName string `json:"udt_name" toml:"udt_name"` // DomainName is the domain type name associated to the column. See here: // https://www.postgresql.org/docs/10/extend-type-system.html#EXTEND-TYPE-SYSTEM-DOMAINS DomainName *string `json:"domain_name" toml:"domain_name"` // MySQL only bits // Used to get full type, ex: // tinyint(1) instead of tinyint // Used for "tinyint-as-bool" flag FullDBType string `json:"full_db_type" toml:"full_db_type"` }
Column holds information about a database column. Types are Go types, converted by TranslateColumnType.
type ColumnFilter ¶
func ParseColumnFilter ¶
func ParseColumnFilter(tables, includes, excludes []string) ColumnFilter
This takes a list of table names with the includes and excludes
type Constraint ¶
Constraint represents a primary key constraint in a database
type Constructor ¶
type Constructor interface { // Load all constraints in the database, keyed by table Constraints(ColumnFilter) (DBConstraints, error) // For tables TableNames(Filter) ([]string, error) TableColumns(tableName string, filter ColumnFilter) ([]Column, error) // For views ViewNames(Filter) ([]string, error) ViewColumns(tableName string, filter ColumnFilter) ([]Column, error) }
Constructor breaks down the functionality required to implement a driver such that the drivers.Tables method can be used to reduce duplication in driver implementations.
type DBConstraints ¶
type DBConstraints struct { PKs map[string]*PrimaryKey FKs map[string][]ForeignKey Uniques map[string][]Constraint }
type DBInfo ¶
type DBInfo[T any] struct { Schema string `json:"schema"` Tables []Table `json:"tables"` ExtraInfo T `json:"extra_info"` }
DBInfo is the database's table data and dialect.
type ForeignKey ¶
type ForeignKey struct { Constraint ForeignTable string `json:"foreign_table"` ForeignColumns []string `json:"foreign_columns"` }
ForeignKey represents a foreign key constraint in a database
type Interface ¶
type Interface[T any] interface { // Assemble the database information into a nice struct Assemble() (*DBInfo[T], error) }
Interface abstracts either a side-effect imported driver or a binary that is called in order to produce the data required for generation.
type PrimaryKey ¶
type PrimaryKey = Constraint
PrimaryKey represents a primary key constraint in a database
type Table ¶
type Table struct { Name string `json:"name"` // For dbs with real schemas, like Postgres. // Example value: "schema_name"."table_name" SchemaName string `json:"schema_name"` Columns []Column `json:"columns"` PKey *PrimaryKey `json:"p_key"` FKeys []ForeignKey `json:"foreign_keys"` Uniques []Constraint `json:"unique"` IsJoinTable bool `json:"is_join_table"` Relationships []orm.Relationship `json:"relationship"` }
Table metadata from the database schema.
func Tables ¶
func Tables(c Constructor, concurrency int, includes, excludes []string) ([]Table, error)
TablesConcurrently is a concurrent version of Tables. It returns the metadata for all tables, minus the tables specified in the excludes.
func (Table) CanSoftDelete ¶
func (Table) GetRelationshipInverse ¶
func (t Table) GetRelationshipInverse(tables []Table, r orm.Relationship) orm.Relationship
GetRelationshipInverse returns the Relationship of the other side