ormgen

package
v0.0.0-...-7d43b46 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2026 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultOutputName

func DefaultOutputName(packageName string) string

DefaultOutputName 返回包级 ORM 生成文件默认名称。

func DiscoverPackages

func DiscoverPackages(pattern string) ([]string, error)

DiscoverPackages 查找 pattern 指向的可扫描 Go package 目录。

func Generate

func Generate(spec GenerateSpec) ([]byte, error)

Generate 扫描单个 Go package 并生成 ORM 源码。

func GenerateWithRenderer

func GenerateWithRenderer(spec GenerateSpec, renderer TemplateRenderer) ([]byte, error)

GenerateWithRenderer 使用自定义模板渲染器生成源码。

func ParseFieldTag

func ParseFieldTag(raw string) (fieldTag, error)

ParseFieldTag 解析 goark-orm struct tag 的 value。

func Render

func Render(model *PackageModel) ([]byte, error)

Render 将扫描模型渲染为 Go 源码。

func ReverseEngineerWithRenderer

func ReverseEngineerWithRenderer(ctx context.Context, introspector SchemaIntrospector, spec ReverseEngineerSpec, renderer TemplateRenderer) ([]byte, error)

ReverseEngineerWithRenderer 读取 schema 并使用指定模板渲染。

func ValidateSchemaDrift

func ValidateSchemaDrift(ctx context.Context, introspector SchemaIntrospector, registry *orm.Registry, request SchemaIntrospectionRequest, options ...SchemaDriftOption) error

ValidateSchemaDrift 在发现漂移时返回 SchemaDriftReport 作为错误值。

Types

type ColumnModel

type ColumnModel struct {
	FieldName      string
	FieldType      string
	ColumnName     string
	KeyColumn      string
	PrimaryKey     bool
	AutoIncrement  bool
	IDType         orm.IDType
	Nullable       *bool
	Size           *int
	NumericScale   *int
	DBType         string
	DefaultValue   string
	TypeHandler    string
	Condition      string
	SelectDisabled bool
	InsertStrategy orm.FieldStrategy
	UpdateStrategy orm.FieldStrategy
	WhereStrategy  orm.FieldStrategy
	Version        bool
	SoftDelete     bool
	CreatedAt      bool
	UpdatedAt      bool
	Fill           orm.FieldFill
	Transient      bool
}

ColumnModel 描述实体字段映射。

type ConfiguredGenerateSpec

type ConfiguredGenerateSpec struct {
	Spec   GenerateSpec
	Output string
}

ConfiguredGenerateSpec 表示已经完成默认值和路径解析的生成目标。

type EntityModel

type EntityModel struct {
	TypeName      string
	Table         string
	Columns       []ColumnModel
	DeclareStruct bool
}

EntityModel 描述一个实体类型。

type GenerateConfig

type GenerateConfig struct {
	Dir          string                `json:"dir,omitempty"`
	PackageName  string                `json:"package,omitempty"`
	Output       string                `json:"output,omitempty"`
	DatabaseID   string                `json:"databaseId,omitempty"`
	TypeHandlers []string              `json:"typeHandlers,omitempty"`
	Packages     []GeneratePackageSpec `json:"packages,omitempty"`
}

GenerateConfig 描述可提交的 ORM 生成器配置文件。

func LoadGenerateConfig

func LoadGenerateConfig(path string) (GenerateConfig, error)

LoadGenerateConfig 读取 JSON 生成器配置文件。

func (GenerateConfig) Resolve

func (c GenerateConfig) Resolve(baseDir string) ([]ConfiguredGenerateSpec, error)

Resolve 解析配置默认值和相对路径。

type GeneratePackageSpec

type GeneratePackageSpec struct {
	Dir          string   `json:"dir,omitempty"`
	PackageName  string   `json:"package,omitempty"`
	Output       string   `json:"output,omitempty"`
	DatabaseID   string   `json:"databaseId,omitempty"`
	TypeHandlers []string `json:"typeHandlers,omitempty"`
}

GeneratePackageSpec 描述配置文件中的单个 package 生成目标。

type GenerateSpec

type GenerateSpec struct {
	Dir          string
	PackageName  string
	DatabaseID   string
	TypeHandlers []string
}

GenerateSpec 描述 ORM 代码生成输入。

type GeneratedPackage

type GeneratedPackage struct {
	Dir         string
	PackageName string
	Source      []byte
}

GeneratedPackage 表示一个已生成源码的包。

type MapperModel

type MapperModel struct {
	TypeName     string
	Namespace    string
	XML          string
	Cache        orm.CacheMeta
	ImplTypeName string
	Methods      []MethodModel
	ResultMaps   []orm.ResultMapMeta
	Statements   []StatementModel
}

MapperModel 描述 Mapper 接口和语句。

type MariaDBSQLSchemaDialect

type MariaDBSQLSchemaDialect struct {
	MySQLSQLSchemaDialect
}

MariaDBSQLSchemaDialect 生成 MariaDB information_schema 查询。

type MethodModel

type MethodModel struct {
	Name       string
	Params     []ParamModel
	ResultType string
	Command    orm.StatementCommand
	Statement  StatementModel
}

MethodModel 描述 Mapper 方法。

type MySQLSQLSchemaDialect

type MySQLSQLSchemaDialect struct{}

MySQLSQLSchemaDialect 生成 MySQL information_schema 查询。

func (MySQLSQLSchemaDialect) ColumnsQuery

ColumnsQuery 返回 MySQL 列查询。

func (MySQLSQLSchemaDialect) TablesQuery

TablesQuery 返回 MySQL 表查询。

type OracleSQLSchemaDialect

type OracleSQLSchemaDialect struct{}

OracleSQLSchemaDialect 生成 Oracle all_* 元数据查询。

func (OracleSQLSchemaDialect) ColumnsQuery

ColumnsQuery 返回 Oracle 列查询。

func (OracleSQLSchemaDialect) TablesQuery

TablesQuery 返回 Oracle 表查询。

type PackageModel

type PackageModel struct {
	Dir         string
	PackageName string
	Entities    []EntityModel
	Mappers     []MapperModel
}

PackageModel 是扫描后的包级 ORM 模型。

func BuildPackageModelFromSchema

func BuildPackageModelFromSchema(spec ReverseEngineerSpec, schema SchemaModel) (*PackageModel, error)

BuildPackageModelFromSchema 把 schema 中间模型转换为 ORM 包模型。

func ReverseEngineer

func ReverseEngineer(ctx context.Context, introspector SchemaIntrospector, spec ReverseEngineerSpec) (*PackageModel, error)

ReverseEngineer 读取 schema 并转换为 PackageModel,调用方可继续使用 Render 或自定义模板。

func ScanPackage

func ScanPackage(spec GenerateSpec) (*PackageModel, error)

ScanPackage 扫描单个 Go package 的 ORM 元数据。

type ParamModel

type ParamModel struct {
	Name string
	Type string
}

ParamModel 描述 Mapper 方法参数。

type PostgresSQLSchemaDialect

type PostgresSQLSchemaDialect struct{}

PostgresSQLSchemaDialect 生成 PostgreSQL information_schema 查询。

func (PostgresSQLSchemaDialect) ColumnsQuery

ColumnsQuery 返回 PostgreSQL 列查询。

func (PostgresSQLSchemaDialect) TablesQuery

TablesQuery 返回 PostgreSQL 表查询。

type ReverseEngineerSpec

type ReverseEngineerSpec struct {
	PackageName      string
	DatabaseID       string
	Schema           string
	Tables           []string
	TablePrefix      string
	TypeMapper       SchemaTypeMapper
	NamingStrategy   SchemaNamingStrategy
	IgnoreColumns    []string
	ColumnFilter     SchemaColumnFilter
	ColumnOverrides  map[string]SchemaColumnOverride
	OmitEntityStruct bool
}

ReverseEngineerSpec 描述 schema 到 ORM 生成模型的转换规则。

type SQLQueryer

type SQLQueryer interface {
	QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)
}

SQLQueryer 是 *sql.DB 和 *sql.Tx 的最小查询接口。

type SQLSchemaDialect

type SQLSchemaDialect interface {
	TablesQuery(request SchemaIntrospectionRequest) (SQLSchemaQuery, error)
	ColumnsQuery(request SchemaIntrospectionRequest, table SchemaTable) (SQLSchemaQuery, error)
}

SQLSchemaDialect 生成不同数据库的 schema 查询 SQL。

func NewSQLSchemaDialect

func NewSQLSchemaDialect(dbType orm.DbType) (SQLSchemaDialect, error)

NewSQLSchemaDialect 根据数据库类型创建 schema SQL 方言。

type SQLSchemaIntrospector

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

SQLSchemaIntrospector 使用 database/sql 查询真实数据库结构。

func NewSQLSchemaIntrospector

func NewSQLSchemaIntrospector(queryer SQLQueryer, dialect SQLSchemaDialect) (*SQLSchemaIntrospector, error)

NewSQLSchemaIntrospector 创建基于 database/sql 的 schema 读取器。

func NewSQLSchemaIntrospectorWithQueryer

func NewSQLSchemaIntrospectorWithQueryer(queryer SchemaQueryer, dialect SQLSchemaDialect) (*SQLSchemaIntrospector, error)

NewSQLSchemaIntrospectorWithQueryer 使用自定义查询器创建 schema 读取器。

func (*SQLSchemaIntrospector) IntrospectSchema

IntrospectSchema 读取表和列元数据,并转换为统一 schema 中间模型。

type SQLSchemaQuery

type SQLSchemaQuery struct {
	SQL  string
	Args []any
}

SQLSchemaQuery 描述一次 schema SQL 查询。

type SQLServerSQLSchemaDialect

type SQLServerSQLSchemaDialect struct{}

SQLServerSQLSchemaDialect 生成 SQL Server sys schema 查询。

func (SQLServerSQLSchemaDialect) ColumnsQuery

ColumnsQuery 返回 SQL Server 列查询。

func (SQLServerSQLSchemaDialect) TablesQuery

TablesQuery 返回 SQL Server 表查询。

type SQLiteSQLSchemaDialect

type SQLiteSQLSchemaDialect struct{}

SQLiteSQLSchemaDialect 生成 SQLite schema 查询。

func (SQLiteSQLSchemaDialect) ColumnsQuery

ColumnsQuery 返回 SQLite 列查询。

func (SQLiteSQLSchemaDialect) TablesQuery

TablesQuery 返回 SQLite 表查询。

type SchemaColumn

type SchemaColumn struct {
	Name          string
	FieldName     string
	DBType        string
	GoType        string
	PrimaryKey    bool
	AutoIncrement bool
	Nullable      *bool
	Size          *int
	NumericScale  *int
	DefaultValue  string
	TypeHandler   string
}

SchemaColumn 描述数据库列到实体字段的候选映射。

type SchemaColumnFilter

type SchemaColumnFilter interface {
	IncludeColumn(table SchemaTable, column SchemaColumn) bool
}

SchemaColumnFilter 判断反向工程是否保留指定列。

type SchemaColumnFilterFunc

type SchemaColumnFilterFunc func(table SchemaTable, column SchemaColumn) bool

SchemaColumnFilterFunc 将函数适配为列过滤器。

func (SchemaColumnFilterFunc) IncludeColumn

func (f SchemaColumnFilterFunc) IncludeColumn(table SchemaTable, column SchemaColumn) bool

IncludeColumn 执行函数式列过滤。

type SchemaColumnOverride

type SchemaColumnOverride struct {
	FieldName      string
	GoType         string
	TypeHandler    string
	Condition      string
	SelectDisabled *bool
	IDType         orm.IDType
	InsertStrategy orm.FieldStrategy
	UpdateStrategy orm.FieldStrategy
	WhereStrategy  orm.FieldStrategy
	Version        *bool
	SoftDelete     *bool
	CreatedAt      *bool
	UpdatedAt      *bool
	Fill           orm.FieldFill
}

SchemaColumnOverride 覆盖反向工程阶段单列生成策略。

type SchemaDriftIssue

type SchemaDriftIssue struct {
	Kind     SchemaDriftKind
	Entity   string
	Table    string
	Field    string
	Column   string
	Expected string
	Actual   string
}

SchemaDriftIssue 描述一个实体元数据和真实数据库 schema 的差异。

type SchemaDriftKind

type SchemaDriftKind string

SchemaDriftKind 描述 schema 漂移问题类型。

const (
	// SchemaDriftMissingTable 表示实体表在数据库中不存在。
	SchemaDriftMissingTable SchemaDriftKind = "missing_table"
	// SchemaDriftMissingColumn 表示实体列在数据库中不存在。
	SchemaDriftMissingColumn SchemaDriftKind = "missing_column"
	// SchemaDriftExtraColumn 表示数据库列未被实体元数据覆盖。
	SchemaDriftExtraColumn SchemaDriftKind = "extra_column"
	// SchemaDriftPrimaryKeyMismatch 表示主键标记与数据库不一致。
	SchemaDriftPrimaryKeyMismatch SchemaDriftKind = "primary_key_mismatch"
	// SchemaDriftAutoIncrementMismatch 表示自增标记与数据库不一致。
	SchemaDriftAutoIncrementMismatch SchemaDriftKind = "auto_increment_mismatch"
	// SchemaDriftNullableMismatch 表示空值约束与数据库不一致。
	SchemaDriftNullableMismatch SchemaDriftKind = "nullable_mismatch"
	// SchemaDriftSizeMismatch 表示字符长度与数据库不一致。
	SchemaDriftSizeMismatch SchemaDriftKind = "size_mismatch"
	// SchemaDriftNumericScaleMismatch 表示数值小数位与数据库不一致。
	SchemaDriftNumericScaleMismatch SchemaDriftKind = "numeric_scale_mismatch"
	// SchemaDriftTypeMismatch 表示数据库类型与实体元数据不一致。
	SchemaDriftTypeMismatch SchemaDriftKind = "type_mismatch"
)

type SchemaDriftOption

type SchemaDriftOption func(*schemaDriftOptions)

SchemaDriftOption 调整 schema 漂移检测行为。

func WithSchemaDriftExtraColumns

func WithSchemaDriftExtraColumns(enabled bool) SchemaDriftOption

WithSchemaDriftExtraColumns 控制是否报告数据库中存在但实体未映射的列。

type SchemaDriftReport

type SchemaDriftReport struct {
	Issues []SchemaDriftIssue
}

SchemaDriftReport 汇总一次 schema 漂移检测结果。

func CompareSchemaDrift

func CompareSchemaDrift(registry *orm.Registry, schema SchemaModel, options ...SchemaDriftOption) (SchemaDriftReport, error)

CompareSchemaDrift 将已读取的 schema 与运行时实体元数据比对。

func DetectSchemaDrift

func DetectSchemaDrift(ctx context.Context, introspector SchemaIntrospector, registry *orm.Registry, request SchemaIntrospectionRequest, options ...SchemaDriftOption) (SchemaDriftReport, error)

DetectSchemaDrift 读取真实 schema 并与运行时实体元数据比对。

func (SchemaDriftReport) Error

func (r SchemaDriftReport) Error() string

Error 返回适合测试或 CLI 输出的简短漂移摘要。

func (SchemaDriftReport) HasDrift

func (r SchemaDriftReport) HasDrift() bool

HasDrift 返回是否发现 schema 漂移。

type SchemaIntrospectionRequest

type SchemaIntrospectionRequest struct {
	DatabaseID string
	Schema     string
	Tables     []string
}

SchemaIntrospectionRequest 描述一次 schema 读取请求。

type SchemaIntrospector

type SchemaIntrospector interface {
	IntrospectSchema(ctx context.Context, request SchemaIntrospectionRequest) (SchemaModel, error)
}

SchemaIntrospector 由数据库适配层实现,core 不直接连接数据库。

type SchemaModel

type SchemaModel struct {
	Tables []SchemaTable
}

SchemaModel 是数据库结构的 Go 化中间模型。

type SchemaNamingStrategy

type SchemaNamingStrategy interface {
	EntityTypeName(table SchemaTable, tablePrefix string) (string, error)
	FieldName(table SchemaTable, column SchemaColumn) (string, error)
}

SchemaNamingStrategy 将数据库命名转换为 Go 导出标识符。

func DefaultSchemaNamingStrategy

func DefaultSchemaNamingStrategy() SchemaNamingStrategy

DefaultSchemaNamingStrategy 返回内置下划线转 PascalCase 的命名策略。

type SchemaNamingStrategyFuncs

type SchemaNamingStrategyFuncs struct {
	EntityTypeNameFunc func(SchemaTable, string) (string, error)
	FieldNameFunc      func(SchemaTable, SchemaColumn) (string, error)
}

SchemaNamingStrategyFuncs 使用函数组合 schema 命名策略。

func (SchemaNamingStrategyFuncs) EntityTypeName

func (s SchemaNamingStrategyFuncs) EntityTypeName(table SchemaTable, tablePrefix string) (string, error)

EntityTypeName 返回数据库表对应的 Go 实体类型名。

func (SchemaNamingStrategyFuncs) FieldName

func (s SchemaNamingStrategyFuncs) FieldName(table SchemaTable, column SchemaColumn) (string, error)

FieldName 返回数据库列对应的 Go 字段名。

type SchemaQueryer

type SchemaQueryer interface {
	QuerySchema(ctx context.Context, query string, args ...any) (SchemaRows, error)
}

SchemaQueryer 适配真实数据库或测试替身的 schema 查询能力。

type SchemaQueryerFunc

type SchemaQueryerFunc func(ctx context.Context, query string, args ...any) (SchemaRows, error)

SchemaQueryerFunc 将函数适配为 SchemaQueryer。

func (SchemaQueryerFunc) QuerySchema

func (f SchemaQueryerFunc) QuerySchema(ctx context.Context, query string, args ...any) (SchemaRows, error)

QuerySchema 执行函数式 schema 查询器。

type SchemaRows

type SchemaRows interface {
	Next() bool
	Scan(dest ...any) error
	Err() error
	Close() error
}

SchemaRows 描述 schema 查询返回的最小行集接口。

type SchemaTable

type SchemaTable struct {
	Name     string
	TypeName string
	Columns  []SchemaColumn
}

SchemaTable 描述一张数据库表。

type SchemaTypeMapper

type SchemaTypeMapper interface {
	GoType(column SchemaColumn) (string, error)
}

SchemaTypeMapper 把数据库类型映射为 Go 字段类型。

func DefaultSchemaTypeMapper

func DefaultSchemaTypeMapper() SchemaTypeMapper

DefaultSchemaTypeMapper 返回内置保守类型映射器。

type SchemaTypeMapperFunc

type SchemaTypeMapperFunc func(column SchemaColumn) (string, error)

SchemaTypeMapperFunc 将函数适配为 SchemaTypeMapper。

func (SchemaTypeMapperFunc) GoType

func (f SchemaTypeMapperFunc) GoType(column SchemaColumn) (string, error)

GoType 执行函数式类型映射器。

type StatementModel

type StatementModel struct {
	ID                 string
	Namespace          string
	FullName           string
	Command            orm.StatementCommand
	StatementType      orm.StatementType
	Source             orm.StatementSource
	SQL                string
	Provider           string
	ResultMap          string
	ResultType         string
	ParameterType      string
	DatabaseID         string
	UseGeneratedKeys   bool
	KeyProperty        string
	Options            orm.StatementOptions
	SelectKey          orm.SelectKeyMeta
	UseCache           orm.StatementCachePolicy
	FlushCache         orm.StatementCachePolicy
	Parameters         []string
	ParameterModes     []orm.ParameterMeta
	ResultSets         []orm.ResultSetMeta
	DynamicSQL         []orm.DynamicSQLNode
	InterceptorIgnores []string
}

StatementModel 描述生成器阶段的语句元数据。

type TemplateRenderer

type TemplateRenderer interface {
	RenderPackage(model *PackageModel) ([]byte, error)
}

TemplateRenderer 渲染已经扫描或反向工程得到的包模型。

func DefaultTemplateRenderer

func DefaultTemplateRenderer() TemplateRenderer

DefaultTemplateRenderer 返回内置 Go 源码模板渲染器。

type TemplateRendererFunc

type TemplateRendererFunc func(model *PackageModel) ([]byte, error)

TemplateRendererFunc 将函数适配为 TemplateRenderer。

func (TemplateRendererFunc) RenderPackage

func (f TemplateRendererFunc) RenderPackage(model *PackageModel) ([]byte, error)

RenderPackage 执行函数式模板渲染器。

Jump to

Keyboard shortcuts

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