Enhanced godoc
This commit is contained in:
@@ -2,7 +2,13 @@ package models
|
|||||||
|
|
||||||
import "encoding/xml"
|
import "encoding/xml"
|
||||||
|
|
||||||
// DCTXDictionary represents the root element of a DCTX file
|
// DCTX File Format Models
|
||||||
|
//
|
||||||
|
// This file defines the data structures for parsing and generating DCTX
|
||||||
|
// (Data Dictionary) XML files, which are used by Clarion development tools
|
||||||
|
// for database schema definitions.
|
||||||
|
|
||||||
|
// DCTXDictionary represents the root element of a DCTX file.
|
||||||
type DCTXDictionary struct {
|
type DCTXDictionary struct {
|
||||||
XMLName xml.Name `xml:"Dictionary"`
|
XMLName xml.Name `xml:"Dictionary"`
|
||||||
Name string `xml:"Name,attr"`
|
Name string `xml:"Name,attr"`
|
||||||
@@ -11,7 +17,7 @@ type DCTXDictionary struct {
|
|||||||
Relations []DCTXRelation `xml:"Relation,omitempty"`
|
Relations []DCTXRelation `xml:"Relation,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXTable represents a table definition in DCTX
|
// DCTXTable represents a table definition in DCTX format.
|
||||||
type DCTXTable struct {
|
type DCTXTable struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
Name string `xml:"Name,attr"`
|
Name string `xml:"Name,attr"`
|
||||||
@@ -25,7 +31,8 @@ type DCTXTable struct {
|
|||||||
Options []DCTXOption `xml:"Option,omitempty"`
|
Options []DCTXOption `xml:"Option,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXField represents a field/column definition in DCTX
|
// DCTXField represents a field/column definition in DCTX format.
|
||||||
|
// Fields can be nested for GROUP structures.
|
||||||
type DCTXField struct {
|
type DCTXField struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
Name string `xml:"Name,attr"`
|
Name string `xml:"Name,attr"`
|
||||||
@@ -37,7 +44,7 @@ type DCTXField struct {
|
|||||||
Options []DCTXOption `xml:"Option,omitempty"`
|
Options []DCTXOption `xml:"Option,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXKey represents an index or key definition in DCTX
|
// DCTXKey represents an index or key definition in DCTX format.
|
||||||
type DCTXKey struct {
|
type DCTXKey struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
Name string `xml:"Name,attr"`
|
Name string `xml:"Name,attr"`
|
||||||
@@ -49,7 +56,7 @@ type DCTXKey struct {
|
|||||||
Components []DCTXComponent `xml:"Component"`
|
Components []DCTXComponent `xml:"Component"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXComponent represents a component of a key (field reference)
|
// DCTXComponent represents a component of a key, referencing a field in the index.
|
||||||
type DCTXComponent struct {
|
type DCTXComponent struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
FieldId string `xml:"FieldId,attr,omitempty"`
|
FieldId string `xml:"FieldId,attr,omitempty"`
|
||||||
@@ -57,14 +64,14 @@ type DCTXComponent struct {
|
|||||||
Ascend bool `xml:"Ascend,attr,omitempty"`
|
Ascend bool `xml:"Ascend,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXOption represents a property option in DCTX
|
// DCTXOption represents a property option in DCTX format for metadata storage.
|
||||||
type DCTXOption struct {
|
type DCTXOption struct {
|
||||||
Property string `xml:"Property,attr"`
|
Property string `xml:"Property,attr"`
|
||||||
PropertyType string `xml:"PropertyType,attr,omitempty"`
|
PropertyType string `xml:"PropertyType,attr,omitempty"`
|
||||||
PropertyValue string `xml:"PropertyValue,attr"`
|
PropertyValue string `xml:"PropertyValue,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXRelation represents a relationship/foreign key in DCTX
|
// DCTXRelation represents a relationship/foreign key in DCTX format.
|
||||||
type DCTXRelation struct {
|
type DCTXRelation struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
PrimaryTable string `xml:"PrimaryTable,attr"`
|
PrimaryTable string `xml:"PrimaryTable,attr"`
|
||||||
@@ -77,7 +84,7 @@ type DCTXRelation struct {
|
|||||||
PrimaryMappings []DCTXFieldMapping `xml:"PrimaryMapping,omitempty"`
|
PrimaryMappings []DCTXFieldMapping `xml:"PrimaryMapping,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCTXFieldMapping represents a field mapping in a relation
|
// DCTXFieldMapping represents a field mapping in a relation for multi-column foreign keys.
|
||||||
type DCTXFieldMapping struct {
|
type DCTXFieldMapping struct {
|
||||||
Guid string `xml:"Guid,attr"`
|
Guid string `xml:"Guid,attr"`
|
||||||
Field string `xml:"Field,attr"`
|
Field string `xml:"Field,attr"`
|
||||||
|
|||||||
@@ -2,11 +2,14 @@ package models
|
|||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
// =============================================================================
|
// Flat/Denormalized Views
|
||||||
// Flat/Denormalized Views - Flattened structures with fully qualified names
|
//
|
||||||
// =============================================================================
|
// This file provides flattened data structures with fully qualified names
|
||||||
|
// for easier querying and analysis of database schemas without navigating
|
||||||
|
// nested hierarchies.
|
||||||
|
|
||||||
// FlatColumn represents a column with full context in a single structure
|
// FlatColumn represents a column with full database context in a single structure.
|
||||||
|
// It includes fully qualified names for easy identification and querying.
|
||||||
type FlatColumn struct {
|
type FlatColumn struct {
|
||||||
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
||||||
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
||||||
@@ -25,7 +28,7 @@ type FlatColumn struct {
|
|||||||
Comment string `json:"comment,omitempty" yaml:"comment,omitempty" xml:"comment,omitempty"`
|
Comment string `json:"comment,omitempty" yaml:"comment,omitempty" xml:"comment,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToFlatColumns converts a Database to a slice of FlatColumns
|
// ToFlatColumns converts a Database to a slice of FlatColumns for denormalized access to all columns.
|
||||||
func (d *Database) ToFlatColumns() []*FlatColumn {
|
func (d *Database) ToFlatColumns() []*FlatColumn {
|
||||||
flatColumns := make([]*FlatColumn, 0)
|
flatColumns := make([]*FlatColumn, 0)
|
||||||
|
|
||||||
@@ -56,7 +59,7 @@ func (d *Database) ToFlatColumns() []*FlatColumn {
|
|||||||
return flatColumns
|
return flatColumns
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatTable represents a table with full context
|
// FlatTable represents a table with full database context and aggregated counts.
|
||||||
type FlatTable struct {
|
type FlatTable struct {
|
||||||
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
||||||
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
||||||
@@ -70,7 +73,7 @@ type FlatTable struct {
|
|||||||
IndexCount int `json:"index_count" yaml:"index_count" xml:"index_count"`
|
IndexCount int `json:"index_count" yaml:"index_count" xml:"index_count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToFlatTables converts a Database to a slice of FlatTables
|
// ToFlatTables converts a Database to a slice of FlatTables for denormalized access to all tables.
|
||||||
func (d *Database) ToFlatTables() []*FlatTable {
|
func (d *Database) ToFlatTables() []*FlatTable {
|
||||||
flatTables := make([]*FlatTable, 0)
|
flatTables := make([]*FlatTable, 0)
|
||||||
|
|
||||||
@@ -94,7 +97,7 @@ func (d *Database) ToFlatTables() []*FlatTable {
|
|||||||
return flatTables
|
return flatTables
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatConstraint represents a constraint with full context
|
// FlatConstraint represents a constraint with full database context and resolved references.
|
||||||
type FlatConstraint struct {
|
type FlatConstraint struct {
|
||||||
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
||||||
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
SchemaName string `json:"schema_name" yaml:"schema_name" xml:"schema_name"`
|
||||||
@@ -112,7 +115,7 @@ type FlatConstraint struct {
|
|||||||
OnUpdate string `json:"on_update,omitempty" yaml:"on_update,omitempty" xml:"on_update,omitempty"`
|
OnUpdate string `json:"on_update,omitempty" yaml:"on_update,omitempty" xml:"on_update,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToFlatConstraints converts a Database to a slice of FlatConstraints
|
// ToFlatConstraints converts a Database to a slice of FlatConstraints for denormalized access to all constraints.
|
||||||
func (d *Database) ToFlatConstraints() []*FlatConstraint {
|
func (d *Database) ToFlatConstraints() []*FlatConstraint {
|
||||||
flatConstraints := make([]*FlatConstraint, 0)
|
flatConstraints := make([]*FlatConstraint, 0)
|
||||||
|
|
||||||
@@ -148,7 +151,7 @@ func (d *Database) ToFlatConstraints() []*FlatConstraint {
|
|||||||
return flatConstraints
|
return flatConstraints
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatRelationship represents a relationship with full context
|
// FlatRelationship represents a relationship with full database context and fully qualified table names.
|
||||||
type FlatRelationship struct {
|
type FlatRelationship struct {
|
||||||
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
DatabaseName string `json:"database_name" yaml:"database_name" xml:"database_name"`
|
||||||
RelationshipName string `json:"relationship_name" yaml:"relationship_name" xml:"relationship_name"`
|
RelationshipName string `json:"relationship_name" yaml:"relationship_name" xml:"relationship_name"`
|
||||||
@@ -164,7 +167,7 @@ type FlatRelationship struct {
|
|||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToFlatRelationships converts a Database to a slice of FlatRelationships
|
// ToFlatRelationships converts a Database to a slice of FlatRelationships for denormalized access to all relationships.
|
||||||
func (d *Database) ToFlatRelationships() []*FlatRelationship {
|
func (d *Database) ToFlatRelationships() []*FlatRelationship {
|
||||||
flatRelationships := make([]*FlatRelationship, 0)
|
flatRelationships := make([]*FlatRelationship, 0)
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
|
// Package models provides the core data structures for representing database schemas.
|
||||||
|
// It defines types for databases, schemas, tables, columns, relationships, constraints,
|
||||||
|
// indexes, views, sequences, and other database objects. These models serve as the
|
||||||
|
// intermediate representation for converting between various database schema formats.
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import "strings"
|
import "strings"
|
||||||
|
|
||||||
|
// DatabaseType represents the type of database system.
|
||||||
type DatabaseType string
|
type DatabaseType string
|
||||||
|
|
||||||
|
// Supported database types.
|
||||||
const (
|
const (
|
||||||
PostgresqlDatabaseType DatabaseType = "pgsql"
|
PostgresqlDatabaseType DatabaseType = "pgsql" // PostgreSQL database
|
||||||
MSSQLDatabaseType DatabaseType = "mssql"
|
MSSQLDatabaseType DatabaseType = "mssql" // Microsoft SQL Server database
|
||||||
SqlLiteDatabaseType DatabaseType = "sqlite"
|
SqlLiteDatabaseType DatabaseType = "sqlite" // SQLite database
|
||||||
)
|
)
|
||||||
|
|
||||||
// Database represents the complete database schema
|
// Database represents the complete database schema
|
||||||
@@ -21,11 +27,13 @@ type Database struct {
|
|||||||
SourceFormat string `json:"source_format,omitempty" yaml:"source_format,omitempty" xml:"source_format,omitempty"` // Source Format of the database.
|
SourceFormat string `json:"source_format,omitempty" yaml:"source_format,omitempty" xml:"source_format,omitempty"` // Source Format of the database.
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLNamer returns the database name in lowercase
|
// SQLName returns the database name in lowercase for SQL compatibility.
|
||||||
func (d *Database) SQLName() string {
|
func (d *Database) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Schema represents a database schema, which is a logical grouping of database objects
|
||||||
|
// such as tables, views, sequences, and relationships within a database.
|
||||||
type Schema struct {
|
type Schema struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
@@ -43,11 +51,13 @@ type Schema struct {
|
|||||||
Enums []*Enum `json:"enums,omitempty" yaml:"enums,omitempty" xml:"enums"`
|
Enums []*Enum `json:"enums,omitempty" yaml:"enums,omitempty" xml:"enums"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the schema name in lowercase
|
// SQLName returns the schema name in lowercase for SQL compatibility.
|
||||||
func (d *Schema) SQLName() string {
|
func (d *Schema) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Table represents a database table with its columns, constraints, indexes,
|
||||||
|
// and relationships. Tables are the primary data storage structures in a database.
|
||||||
type Table struct {
|
type Table struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
@@ -63,11 +73,12 @@ type Table struct {
|
|||||||
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the table name in lowercase
|
// SQLName returns the table name in lowercase for SQL compatibility.
|
||||||
func (d *Table) SQLName() string {
|
func (d *Table) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPrimaryKey returns the primary key column for the table, or nil if none exists.
|
||||||
func (m Table) GetPrimaryKey() *Column {
|
func (m Table) GetPrimaryKey() *Column {
|
||||||
for _, column := range m.Columns {
|
for _, column := range m.Columns {
|
||||||
if column.IsPrimaryKey {
|
if column.IsPrimaryKey {
|
||||||
@@ -77,6 +88,7 @@ func (m Table) GetPrimaryKey() *Column {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetForeignKeys returns all foreign key constraints for the table.
|
||||||
func (m Table) GetForeignKeys() []*Constraint {
|
func (m Table) GetForeignKeys() []*Constraint {
|
||||||
keys := make([]*Constraint, 0)
|
keys := make([]*Constraint, 0)
|
||||||
|
|
||||||
@@ -101,7 +113,7 @@ type View struct {
|
|||||||
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the view name in lowercase
|
// SQLName returns the view name in lowercase for SQL compatibility.
|
||||||
func (d *View) SQLName() string {
|
func (d *View) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
@@ -124,7 +136,7 @@ type Sequence struct {
|
|||||||
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
RefSchema *Schema `json:"-" yaml:"-" xml:"-"` // Excluded to prevent circular references
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the sequence name in lowercase
|
// SQLName returns the sequence name in lowercase for SQL compatibility.
|
||||||
func (d *Sequence) SQLName() string {
|
func (d *Sequence) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
@@ -148,11 +160,13 @@ type Column struct {
|
|||||||
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the table name in lowercase
|
// SQLName returns the column name in lowercase for SQL compatibility.
|
||||||
func (d *Column) SQLName() string {
|
func (d *Column) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Index represents a database index for optimizing query performance.
|
||||||
|
// Indexes can be unique, partial, or include additional columns.
|
||||||
type Index struct {
|
type Index struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
@@ -168,19 +182,23 @@ type Index struct {
|
|||||||
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the Indexin lowercase
|
// SQLName returns the index name in lowercase for SQL compatibility.
|
||||||
func (d *Index) SQLName() string {
|
func (d *Index) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RelationType represents the type of relationship between database tables.
|
||||||
type RelationType string
|
type RelationType string
|
||||||
|
|
||||||
|
// Supported relationship types.
|
||||||
const (
|
const (
|
||||||
OneToOne RelationType = "one_to_one"
|
OneToOne RelationType = "one_to_one" // One record in table A relates to one record in table B
|
||||||
OneToMany RelationType = "one_to_many"
|
OneToMany RelationType = "one_to_many" // One record in table A relates to many records in table B
|
||||||
ManyToMany RelationType = "many_to_many"
|
ManyToMany RelationType = "many_to_many" // Many records in table A relate to many records in table B
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Relationship represents a relationship between two database tables.
|
||||||
|
// Relationships can be one-to-one, one-to-many, or many-to-many.
|
||||||
type Relationship struct {
|
type Relationship struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Type RelationType `json:"type" yaml:"type" xml:"type"`
|
Type RelationType `json:"type" yaml:"type" xml:"type"`
|
||||||
@@ -198,11 +216,13 @@ type Relationship struct {
|
|||||||
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQLName returns the Relationship lowercase
|
// SQLName returns the relationship name in lowercase for SQL compatibility.
|
||||||
func (d *Relationship) SQLName() string {
|
func (d *Relationship) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Constraint represents a database constraint that enforces data integrity rules.
|
||||||
|
// Constraints can be primary keys, foreign keys, unique constraints, check constraints, or not-null constraints.
|
||||||
type Constraint struct {
|
type Constraint struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Type ConstraintType `json:"type" yaml:"type" xml:"type"`
|
Type ConstraintType `json:"type" yaml:"type" xml:"type"`
|
||||||
@@ -220,30 +240,37 @@ type Constraint struct {
|
|||||||
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLName returns the constraint name in lowercase for SQL compatibility.
|
||||||
func (d *Constraint) SQLName() string {
|
func (d *Constraint) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConstraintType represents the type of database constraint.
|
||||||
type ConstraintType string
|
type ConstraintType string
|
||||||
|
|
||||||
|
// Enum represents a database enumeration type with a set of allowed values.
|
||||||
type Enum struct {
|
type Enum struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Values []string `json:"values" yaml:"values" xml:"values"`
|
Values []string `json:"values" yaml:"values" xml:"values"`
|
||||||
Schema string `json:"schema,omitempty" yaml:"schema,omitempty" xml:"schema,omitempty"`
|
Schema string `json:"schema,omitempty" yaml:"schema,omitempty" xml:"schema,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLName returns the enum name in lowercase for SQL compatibility.
|
||||||
func (d *Enum) SQLName() string {
|
func (d *Enum) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Supported constraint types.
|
||||||
const (
|
const (
|
||||||
PrimaryKeyConstraint ConstraintType = "primary_key"
|
PrimaryKeyConstraint ConstraintType = "primary_key" // Primary key uniquely identifies each record
|
||||||
ForeignKeyConstraint ConstraintType = "foreign_key"
|
ForeignKeyConstraint ConstraintType = "foreign_key" // Foreign key references another table
|
||||||
UniqueConstraint ConstraintType = "unique"
|
UniqueConstraint ConstraintType = "unique" // Unique constraint ensures all values are different
|
||||||
CheckConstraint ConstraintType = "check"
|
CheckConstraint ConstraintType = "check" // Check constraint validates data against an expression
|
||||||
NotNullConstraint ConstraintType = "not_null"
|
NotNullConstraint ConstraintType = "not_null" // Not null constraint requires a value
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Script represents a database migration or initialization script.
|
||||||
|
// Scripts can have dependencies and rollback capabilities.
|
||||||
type Script struct {
|
type Script struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description" yaml:"description" xml:"description"`
|
Description string `json:"description" yaml:"description" xml:"description"`
|
||||||
@@ -256,11 +283,12 @@ type Script struct {
|
|||||||
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
Sequence uint `json:"sequence,omitempty" yaml:"sequence,omitempty" xml:"sequence,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLName returns the script name in lowercase for SQL compatibility.
|
||||||
func (d *Script) SQLName() string {
|
func (d *Script) SQLName() string {
|
||||||
return strings.ToLower(d.Name)
|
return strings.ToLower(d.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize functions
|
// Initialization functions for creating new model instances with proper defaults.
|
||||||
|
|
||||||
// InitDatabase initializes a new Database with empty slices
|
// InitDatabase initializes a new Database with empty slices
|
||||||
func InitDatabase(name string) *Database {
|
func InitDatabase(name string) *Database {
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
// =============================================================================
|
// Summary/Compact Views
|
||||||
// Summary/Compact Views - Lightweight views with essential fields
|
//
|
||||||
// =============================================================================
|
// This file provides lightweight summary structures with essential fields
|
||||||
|
// and aggregated counts for quick database schema overviews without loading
|
||||||
|
// full object graphs.
|
||||||
|
|
||||||
// DatabaseSummary provides a compact overview of a database
|
// DatabaseSummary provides a compact overview of a database with aggregated statistics.
|
||||||
type DatabaseSummary struct {
|
type DatabaseSummary struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
@@ -15,7 +17,7 @@ type DatabaseSummary struct {
|
|||||||
TotalColumns int `json:"total_columns" yaml:"total_columns" xml:"total_columns"`
|
TotalColumns int `json:"total_columns" yaml:"total_columns" xml:"total_columns"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToSummary converts a Database to a DatabaseSummary
|
// ToSummary converts a Database to a DatabaseSummary with calculated counts.
|
||||||
func (d *Database) ToSummary() *DatabaseSummary {
|
func (d *Database) ToSummary() *DatabaseSummary {
|
||||||
summary := &DatabaseSummary{
|
summary := &DatabaseSummary{
|
||||||
Name: d.Name,
|
Name: d.Name,
|
||||||
@@ -36,7 +38,7 @@ func (d *Database) ToSummary() *DatabaseSummary {
|
|||||||
return summary
|
return summary
|
||||||
}
|
}
|
||||||
|
|
||||||
// SchemaSummary provides a compact overview of a schema
|
// SchemaSummary provides a compact overview of a schema with aggregated statistics.
|
||||||
type SchemaSummary struct {
|
type SchemaSummary struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty" xml:"description,omitempty"`
|
||||||
@@ -47,7 +49,7 @@ type SchemaSummary struct {
|
|||||||
TotalConstraints int `json:"total_constraints" yaml:"total_constraints" xml:"total_constraints"`
|
TotalConstraints int `json:"total_constraints" yaml:"total_constraints" xml:"total_constraints"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToSummary converts a Schema to a SchemaSummary
|
// ToSummary converts a Schema to a SchemaSummary with calculated counts.
|
||||||
func (s *Schema) ToSummary() *SchemaSummary {
|
func (s *Schema) ToSummary() *SchemaSummary {
|
||||||
summary := &SchemaSummary{
|
summary := &SchemaSummary{
|
||||||
Name: s.Name,
|
Name: s.Name,
|
||||||
@@ -66,7 +68,7 @@ func (s *Schema) ToSummary() *SchemaSummary {
|
|||||||
return summary
|
return summary
|
||||||
}
|
}
|
||||||
|
|
||||||
// TableSummary provides a compact overview of a table
|
// TableSummary provides a compact overview of a table with aggregated statistics.
|
||||||
type TableSummary struct {
|
type TableSummary struct {
|
||||||
Name string `json:"name" yaml:"name" xml:"name"`
|
Name string `json:"name" yaml:"name" xml:"name"`
|
||||||
Schema string `json:"schema" yaml:"schema" xml:"schema"`
|
Schema string `json:"schema" yaml:"schema" xml:"schema"`
|
||||||
@@ -79,7 +81,7 @@ type TableSummary struct {
|
|||||||
ForeignKeyCount int `json:"foreign_key_count" yaml:"foreign_key_count" xml:"foreign_key_count"`
|
ForeignKeyCount int `json:"foreign_key_count" yaml:"foreign_key_count" xml:"foreign_key_count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToSummary converts a Table to a TableSummary
|
// ToSummary converts a Table to a TableSummary with calculated counts.
|
||||||
func (t *Table) ToSummary() *TableSummary {
|
func (t *Table) ToSummary() *TableSummary {
|
||||||
summary := &TableSummary{
|
summary := &TableSummary{
|
||||||
Name: t.Name,
|
Name: t.Name,
|
||||||
|
|||||||
Reference in New Issue
Block a user