ds

package
v3.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProcInputParam  = "input"
	ProcOutputParam = "output"
)
View Source
const (
	IncMutator      string = "inc"       // инкремент (только для числовых типов)
	DecMutator      string = "dec"       // декремент (только для числовых типов)
	SetBitMutator   string = "set_bit"   // установка бита (только для целочисленных типов)
	ClearBitMutator string = "clear_bit" // снятие бита (только для целочисленных типов)
	AndMutator      string = "and"       // дизъюнкция (только для целочисленных типов)
	OrMutator       string = "or"        // конъюнкция (только для целочисленных типов)
	XorMutator      string = "xor"       // xor (только для целочисленных типов)
)

ToDo Сделать отдельный тип для описания мутаторов Константы описывающие мутаторы для поля

Variables

View Source
var FieldMutatorsCheckerOnce sync.Once
View Source
var PkgNameRx = regexp.MustCompile(`([^/"]+)"?$`)

PkgNameRx регулярное выражение вырезающее имя импортируемого пакета

Functions

func GetFieldMutatorsChecker

func GetFieldMutatorsChecker() map[string]string

Types

type AppInfo

type AppInfo struct {
	// contains filtered or unexported fields
}

Описание приложения. Информация необходимая для разметки артефактов Остаётся в сгенерированных файлах, что бы было понятно какой версией сгенерированы файлы

func NewAppInfo

func NewAppInfo() *AppInfo

Конструктор для AppInfo

func (*AppInfo) String

func (i *AppInfo) String() string

Строковое представление версии генератора

func (*AppInfo) WithBuildCommit

func (i *AppInfo) WithBuildCommit(commit string) *AppInfo

func (*AppInfo) WithBuildOS

func (i *AppInfo) WithBuildOS(buildOS string) *AppInfo

func (*AppInfo) WithBuildTime

func (i *AppInfo) WithBuildTime(buildTime string) *AppInfo

func (*AppInfo) WithVersion

func (i *AppInfo) WithVersion(version string) *AppInfo

Опции для конструктора, используются для модификации полей структуры

type Backend

type Backend string

type FieldDeclaration

type FieldDeclaration struct {
	Name       string     // Название поля
	Format     Format     // формат поля
	PrimaryKey bool       // участвует ли поле в первичном ключе (при изменении таких полей необходимо делать delete + insert вместо update)
	Mutators   []string   // список мутаторов (атомарных действий на уровне БД)
	Size       int64      // Размер поля, используется только для строковых значений
	Serializer Serializer // Сериализаторы для поля
	ObjectLink string     // является ли поле ссылкой на другую сущность
	InitByDB   bool       // Может ли база проинициализоровать поле при вставке
}

FieldDeclaration Тип описывающий поле в сущности

type FieldObject

type FieldObject struct {
	Name       string // Имя
	Key        string // Название поля во внешней сущности
	ObjectName string // Название внешней сущности
	Field      string // Имя поля в текущей сущности
	Unique     bool   // Признак связки true => один к одному, false => один ко многим
}

Структура для описания ссылочных полей (когда значение одного из полей является ключом для для другой сущности)

type FlagDeclaration

type FlagDeclaration struct {
	Name  string   // Имя
	Flags []string // Список имён флагов
}

Структура описывающая флаги для поля

type Format

type Format string

type FormatParam

type FormatParam interface {
	PackConvFunc(string) string
	UnpackFunc() string
	PackFunc() string // ToDo rename to DBSerializer
	DefaultValue() string
	UnpackType() string // ToDo rename to DBDeserializer
	Len(uint32) uint
	MinValue() string
	MaxValue() string
	ToString() []string
	MutatorTypeConv() string
	StringDeserializer() []string
}

ToDo Переименовать методы во что то более интуитивно понятное

type ImportDeclaration

type ImportDeclaration struct {
	Path       string // Путь к пакету
	ImportName string // Симлинк для пакета при импорте
}

Структура описывающая дополнительный импорты

type ImportPackage

type ImportPackage struct {
	Imports      []ImportDeclaration // Список необходимых дополнительных импортов, формируется из директивы import
	ImportMap    map[string]int      // Обратный индекс от имен по импортам
	ImportPkgMap map[string]int      // Обратный индекс от пакетов к импортам
}

func NewImportPackage

func NewImportPackage() ImportPackage

func (*ImportPackage) AddImport

func (rc *ImportPackage) AddImport(path string, reqImportName ...string) (ImportDeclaration, error)

func (*ImportPackage) FindImport

func (rc *ImportPackage) FindImport(path string) (ImportDeclaration, error)

func (*ImportPackage) FindImportByPkg

func (rc *ImportPackage) FindImportByPkg(pkg string) (*ImportDeclaration, error)

func (*ImportPackage) FindOrAddImport

func (rc *ImportPackage) FindOrAddImport(path, importName string) (ImportDeclaration, error)

type IndexCondition

type IndexCondition struct {
	ConditionType string   // Тип условия "=", ">", "<", ">=", "<=", "!=", "IN"
	Value         []string // Значение условия
}

type IndexDeclaration

type IndexDeclaration struct {
	Name          string                 // Имя индекса
	Num           uint8                  // Номер индекса в описании спейса
	Selector      string                 // Название функции селектора
	SelectorCount string                 // Название функции селектора для подсчёта количества записей
	Fields        []int                  // Список номеров полей участвующих в индексе (последовательность имеет значение)
	FieldsMap     map[string]IndexField  // Обратный индекс по именам полей (используется для выявления дублей)
	Primary       bool                   // Признак того, что индекс является первичным ключом
	Unique        bool                   // Признак того, что индекс является уникальным
	Type          string                 // Тип индекса, для индексов по одному полю простой тип, для составных индексов собственный тип
	Partial       bool                   // Признак того, что индекс частичный
	Conditions    map[int]IndexCondition // Номер поля и условие для частичного индекса
}

Тип для описания индекса

type IndexField

type IndexField struct {
	IndField int
	Order    IndexOrder
}

Тип для описания поля внутри индекса (номер поля и направление сортировки)

type IndexOrder

type IndexOrder uint8

Тип и константы для описания направления сортировки индекса

const (
	IndexOrderAsc IndexOrder = iota
	IndexOrderDesc
)

type LinkedPackageDeclaration

type LinkedPackageDeclaration struct {
	Types  map[string]struct{} // Имена типов связанных структур
	Import ImportPackage       // Описание импорта пакета связанных структур
}

type MutatorDeclaration

type MutatorDeclaration struct {
	Name          string // имя
	Pkg           string // Пакет для импорта
	Type          string // Тип данных
	ImportName    string // Симлинк для импорта
	Update        string // Имя функции для параметров обновления
	Replace       string // Имя функции для параметров замены
	PartialFields []PartialFieldDeclaration
}

MutatorDeclaration Структура описывающая мутатор

type NamespaceDeclaration

type NamespaceDeclaration struct {
	ObjectName  string
	PublicName  string
	PackageName string
	ModuleName  string
}

Структура для описания неймспейса сущности

type PartialFieldDeclaration

type PartialFieldDeclaration struct {
	Name string // Имя части поля
	Type string // Тип части поля
}

type ProcFieldDeclaration

type ProcFieldDeclaration struct {
	Name       string            // Название поля
	Format     Format            // формат поля
	Type       ProcParameterType // тип параметра (IN, OUT, INOUT)
	Size       int64             // Размер поля, используется только для строковых значений
	Serializer Serializer        // Сериализатора для поля
	OrderIndex int               // Порядковый номер параметра в сигнатуре вызова процедуры
}

ProcFieldDeclaration Тип описывающий поле процедуры

type ProcFieldDeclarations

type ProcFieldDeclarations map[int]ProcFieldDeclaration

ProcFieldDeclarations Индекс порядкового значения полей процедуры

func (ProcFieldDeclarations) Add

Add Добавляет декларацию поля процедуры в список. Возвращает ошибку, если декларация с таким порядком в ProcFieldDeclarations уже существует

func (ProcFieldDeclarations) List

List список деклараций процедуры в описанном порядке описания

func (ProcFieldDeclarations) Validate

func (pfd ProcFieldDeclarations) Validate() bool

Validate проверяет корректность декларируемых значений порядкового номера полей процедуры

type ProcParameterType

type ProcParameterType uint8
const (
	IN    ProcParameterType // тип входного параметра процедуры
	OUT                     // тип выходного параметра процедуры
	INOUT                   // тип одновременно и входного и выходного параметра процедуры
)

func (ProcParameterType) String

func (p ProcParameterType) String() string

type RecordPackage

type RecordPackage struct {
	ImportPackage
	ServerConfKey         string                               // Путь к настройкам в конфиге
	Namespace             NamespaceDeclaration                 // Описание неймспейса/таблицы
	Fields                []FieldDeclaration                   // Описание полей, важна последовательность для некоторых хранилищ
	FieldsMap             map[string]int                       // Обратный индекс от имен к полям
	FieldsObjectMap       map[string]FieldObject               // Обратный индекс по имени для ссылок на другие сущности
	Indexes               []IndexDeclaration                   // Список индексов, важна последовательность для некоторых хранилищ
	IndexMap              map[string]int                       // Обратный индекс от имён для индексов
	SelectorMap           map[string]int                       // Список селекторов, используется для контроля дублей
	EnableSelectAll       bool                                 // Признак того, что сущность поддерживает выборку всех записей
	Backends              []Backend                            // Список бекендов для которых надо сгенерировать пакеты (сейчас допустим один и только один)
	SerializerMap         map[string]SerializerDeclaration     // Список сериализаторов используемых в этой сущности
	MutatorMap            map[string]MutatorDeclaration        // Список мутаторов используемых в этой сущности
	TriggerMap            map[string]TriggerDeclaration        // Список триггеров используемых в сущности
	FlagMap               map[string]FlagDeclaration           // Список флагов используемых в полях сущности
	ProcInFields          []ProcFieldDeclaration               // Описание входных параметров процедуры, важна последовательность
	ProcOutFields         ProcFieldDeclarations                // Описание выходных параметров процедуры, важна последовательность
	ProcFieldsMap         map[string]int                       // Обратный индекс от имен
	LinkedStructsMap      map[string]LinkedPackageDeclaration  // Описание пакетов связанных типов
	ImportStructFieldsMap map[string][]PartialFieldDeclaration // Описаний структур импортируемых полей сущности
}

Структура описывающая отдельную сущность представленную в декларативном файле

func NewRecordPackage

func NewRecordPackage() *RecordPackage

Конструктор для RecordPackage, инициализирует ссылочные типы

func (*RecordPackage) AddField

func (rc *RecordPackage) AddField(f FieldDeclaration) error

Добавление нового поля в результирующий пакет

func (*RecordPackage) AddFieldObject

func (rc *RecordPackage) AddFieldObject(fo FieldObject) error

Добавление нового ссылочного поля

func (*RecordPackage) AddFlag

func (rc *RecordPackage) AddFlag(f FlagDeclaration) error

func (*RecordPackage) AddIndex

func (rc *RecordPackage) AddIndex(ind IndexDeclaration) error

Добавление индекса

func (*RecordPackage) AddMutator

func (rc *RecordPackage) AddMutator(m MutatorDeclaration) error

func (*RecordPackage) AddPartialField

func (rc *RecordPackage) AddPartialField(m MutatorDeclaration) error

func (*RecordPackage) AddProcField

func (rc *RecordPackage) AddProcField(f ProcFieldDeclaration) error

Добавление нового параметра процедуры в результирующий пакет

func (*RecordPackage) AddSerializer

func (rc *RecordPackage) AddSerializer(s SerializerDeclaration) error

func (*RecordPackage) AddTrigger

func (rc *RecordPackage) AddTrigger(t TriggerDeclaration) error

type Serializer

type Serializer []string

Serializer Сериализаторы для поля

func (Serializer) Name

func (s Serializer) Name() string

Name возвращает имя сериализатора, если он установлен, иначе пустую строку

func (Serializer) Params

func (s Serializer) Params() string

Params Параметры передаваемые при сериализации. Используется, когда на уровне декларирования известно, что сериализатор/десериализатор требует дополнительных константных значений

type SerializerDeclaration

type SerializerDeclaration struct {
	Name        string // имя
	Pkg         string // Пакет для импорта
	Type        string // Тип данных
	ImportName  string // Симлинк для импорта
	Marshaler   string // Имя функции маршалера
	Unmarshaler string // Имя функции анмаршаллера
}

Структура описывающая сериализатор

type TriggerDeclaration

type TriggerDeclaration struct {
	Name       string          // Имя
	Pkg        string          // Пакет для импорта
	Func       string          // Имя функции
	ImportName string          // Симлинк для импорта пакета
	Params     map[string]bool // Параметры передаваемые в функцию
}

Структура описывающая триггеры

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL