Files
relspecgo/pkg/models/dctx.go
2025-12-28 11:42:05 +02:00

92 lines
3.6 KiB
Go

package models
import "encoding/xml"
// 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 {
XMLName xml.Name `xml:"Dictionary"`
Name string `xml:"Name,attr"`
Version string `xml:"Version,attr"`
Tables []DCTXTable `xml:"Table"`
Relations []DCTXRelation `xml:"Relation,omitempty"`
}
// DCTXTable represents a table definition in DCTX format.
type DCTXTable struct {
Guid string `xml:"Guid,attr"`
Name string `xml:"Name,attr"`
Prefix string `xml:"Prefix,attr"`
Driver string `xml:"Driver,attr,omitempty"`
Owner string `xml:"Owner,attr,omitempty"`
Path string `xml:"Path,attr,omitempty"`
Description string `xml:"Description,attr,omitempty"`
Fields []DCTXField `xml:"Field"`
Keys []DCTXKey `xml:"Key,omitempty"`
Options []DCTXOption `xml:"Option,omitempty"`
}
// DCTXField represents a field/column definition in DCTX format.
// Fields can be nested for GROUP structures.
type DCTXField struct {
Guid string `xml:"Guid,attr"`
Name string `xml:"Name,attr"`
DataType string `xml:"DataType,attr"`
Size int `xml:"Size,attr,omitempty"`
NoPopulate bool `xml:"NoPopulate,attr,omitempty"`
Thread bool `xml:"Thread,attr,omitempty"`
Fields []DCTXField `xml:"Field,omitempty"` // For GROUP fields (nested structures)
Options []DCTXOption `xml:"Option,omitempty"`
}
// DCTXKey represents an index or key definition in DCTX format.
type DCTXKey struct {
Guid string `xml:"Guid,attr"`
Name string `xml:"Name,attr"`
KeyType string `xml:"KeyType,attr,omitempty"`
Primary bool `xml:"Primary,attr,omitempty"`
Unique bool `xml:"Unique,attr,omitempty"`
Order int `xml:"Order,attr,omitempty"`
Description string `xml:"Description,attr,omitempty"`
Components []DCTXComponent `xml:"Component"`
}
// DCTXComponent represents a component of a key, referencing a field in the index.
type DCTXComponent struct {
Guid string `xml:"Guid,attr"`
FieldId string `xml:"FieldId,attr,omitempty"`
Order int `xml:"Order,attr"`
Ascend bool `xml:"Ascend,attr,omitempty"`
}
// DCTXOption represents a property option in DCTX format for metadata storage.
type DCTXOption struct {
Property string `xml:"Property,attr"`
PropertyType string `xml:"PropertyType,attr,omitempty"`
PropertyValue string `xml:"PropertyValue,attr"`
}
// DCTXRelation represents a relationship/foreign key in DCTX format.
type DCTXRelation struct {
Guid string `xml:"Guid,attr"`
PrimaryTable string `xml:"PrimaryTable,attr"`
ForeignTable string `xml:"ForeignTable,attr"`
PrimaryKey string `xml:"PrimaryKey,attr,omitempty"`
ForeignKey string `xml:"ForeignKey,attr,omitempty"`
Delete string `xml:"Delete,attr,omitempty"`
Update string `xml:"Update,attr,omitempty"`
ForeignMappings []DCTXFieldMapping `xml:"ForeignMapping,omitempty"`
PrimaryMappings []DCTXFieldMapping `xml:"PrimaryMapping,omitempty"`
}
// DCTXFieldMapping represents a field mapping in a relation for multi-column foreign keys.
type DCTXFieldMapping struct {
Guid string `xml:"Guid,attr"`
Field string `xml:"Field,attr"`
}