首页 > 其他分享 >gorm 阅读3

gorm 阅读3

时间:2023-12-20 22:37:59浏览次数:33  
标签:struct DB Migrator 阅读 interface Config gorm string

gorm 相互关联

// Config GORM config
type Config struct {
    ----------
	Dialector
    --------
	callbacks  *callbacks
	cacheStore *sync.Map
}
// DB GORM DB definition
type DB struct {
	*Config
	Error        error
	RowsAffected int64
	Statement    *Statement
	clone        int
}

DB的Dialector 实现了AutoMigrate 接口

type Migrator struct {
	migrator.Migrator
}


// Migrator m struct
type Migrator struct {
	Config
}

// Config schema config
type Config struct {
	CreateIndexAfterCreateTable bool
	DB                          *gorm.DB
	gorm.Dialector
}

// AutoMigrate auto migrate values
func (m Migrator) AutoMigrate(values ...interface{})

//对于Statement  其存储在 cacheStore *sync.Map 

/*

创建表时:err := execTx.Migrator().CreateTable(value)
var execTx *gorm.DB  
execTx.Migrator()--->返回的tx.Dialector.Migratory 也就是返回Config --->Migrator 

此时execTx.Migrator().CreateTable(value)--->Migrator.CreateTable(value)
根据value在 stmt.DB.cacheStore.Load(schemaCacheKey) 

根据value 查找schema 结合db 赋值给stmt   statement


// Statement statement
type Statement struct {
	*DB
	TableExpr            *clause.Expr
	Table                string
	Model                interface{}
	Unscoped             bool
	Dest                 interface{}
	ReflectValue         reflect.Value
	Clauses              map[string]clause.Clause
	BuildClauses         []string
	Distinct             bool
	Selects              []string // selected columns
	Omits                []string // omit columns
	Joins                []join
	Preloads             map[string][]interface{}
	Settings             sync.Map
	ConnPool             ConnPool
	Schema               *schema.Schema
	Context              context.Context
	RaiseErrorOnNotFound bool
	SkipHooks            bool
	SQL                  strings.Builder
	Vars                 []interface{}
	CurDestIndex         int
	attrs                []interface{}
	assigns              []interface{}
	scopes               []func(*DB) *DB
}

 

标签:struct,DB,Migrator,阅读,interface,Config,gorm,string
From: https://www.cnblogs.com/codestack/p/17917755.html

相关文章

  • 阅读讨论2
    标题:《有效需求分析》的阅读讨论:洞察需求背后的核心原则摘要:《有效需求分析》是一本对需求分析进行深入探讨的重要著作。通过详细介绍核心原则和实用技巧,该书为读者提供了宝贵的指导。本文将对该书进行讨论,探究其中的关键观点和应用。正文:《有效需求分析》是一本致力于帮助读者......
  • 论文阅读-Self-supervised and Interpretable Data Cleaning with Sequence Generativ
    1.GARF简介代码地址:https://github.com/PJinfeng/Garf-master基于SeqGAN提出了一种自监督、数据驱动的数据清洗框架——GARF。GARF的数据清洗分为两个步骤:规则生成(RulegenerationwithSeqGAN):利用SeqGAN学习数据中的关系(datarelationship)。然后利用SeqGAN中......
  • 阅读笔记:《代码大全》阅读笔记十一
    当谈到软件开发的艺术和科学时,SteveMcConnell的《代码大全》是无可争议的经典之作。它是一本旨在为软件工程师和程序员提供深入洞察的指南,旨在帮助他们提升编程技能、编写高质量代码以及有效管理整个软件开发周期。这本书不仅提供了广泛的理论知识,还结合了大量实用的案例和建议,下......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • 程序员修炼之道:从小工到专家阅读笔记3
    这本书的适用范围可以从初学者到有经验的程序员再到项目经理,作为一本偏向理论与思想的书,书中不可避免有些假大空的地方,再加上作者写完本书的时间还在1999年,书中的很多方法与标准放在今天也已不再实用。但这些都不能掩盖它的优秀之处,作者曾在本书完成十年后说过,如果这本书是放在现......
  • 程序员修炼之道:从小工到专家阅读笔记5
    程序员所应该遵循的实用主义原则。 我的源码让猫给吃了:出现错误时,要诚实,不要推诿或者找借口。要提供各种可能的解决方案与后果并与他人沟通,而不是提供借口。 软件的熵:这是著名的破窗户原理。项目中一个小的、无人料理的问题可能带来后续编码时的懈怠,从而造成更大的问题。不......
  • 程序员修炼之道:从小工到专家阅读笔记4
    耦合这个词基本在我的职业生涯中每天都能听到,一个好的程序一定是低耦合的,这本书提出了函数的德墨忒尔法则帮我们更好的界定耦合的边界,怎样编写低耦合的代码,更难能可贵的是这本书不仅仅描述了一般的代码耦合,还花了很大笔墨解释了时间耦合,很多时候一个业务的实现没有必要一定是线性......
  • 程序员修炼之道:从小工到专家阅读笔记6
    程序需要遵守的实用主义原则。 重复的危害:如果某个事物在代码中重复多次,就可能会在维护过程中带来问题,因为改动了一处而忘记改动另一处造成自相矛盾。这加大了维护难度。要遵守DRY原则,即Don’trepeatyourself。重复通常由这些东西引起:强加的重复,由文档或用户需求决定。这通......
  • 阅读笔记7
    《代码大全》2介绍了软件构建的本质和复杂性。软件开发既是一门艺术,又是一门工程学科,需要在实践中不断改进。接着讲述了在软件构建之前的前期准备活动,包括需求分析、定义解决方案和设计架构等,说明软件开发过程中对需求的分析和解决方案的设计是至关重要的环节。在软件质量和编码实......