Documentation
¶
Index ¶
- Constants
- Variables
- func ConvertNameToFormat(x string) string
- func Create(db *gorm.DB)
- func Delete(db *gorm.DB)
- func GetOracleDriver(db *gorm.DB) (*go_ora.OracleDriver, error)
- func InParam(value interface{}) interface{}
- func IsReservedWord(v string) bool
- func New(config Config) gorm.Dialector
- func Open(dsn string) gorm.Dialector
- func Query(db *gorm.DB)
- func ToDriverParam(p Param) go_ora.Out
- func Update(db *gorm.DB)
- type Config
- type Dialector
- func (d Dialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v any)
- func (d Dialector) ClauseBuilders() map[string]clause.ClauseBuilder
- func (d Dialector) DataTypeOf(field *schema.Field) string
- func (d Dialector) DefaultValueOf(*schema.Field) clause.Expression
- func (d Dialector) DummyTableName() string
- func (d Dialector) Explain(sql string, vars ...any) string
- func (d Dialector) GetAdapter() driver_adapter.Adapter
- func (d *Dialector) GetDBConn() (*sql.DB, error)
- func (d Dialector) Initialize(db *gorm.DB) (err error)
- func (d Dialector) Migrator(db *gorm.DB) gorm.Migrator
- func (d Dialector) Name() string
- func (d Dialector) QuoteTo(writer clause.Writer, str string)
- func (d Dialector) RewriteLimit(c clause.Clause, builder clause.Builder)
- func (d Dialector) RewriteLimit11(c clause.Clause, builder clause.Builder)
- func (d Dialector) RollbackTo(tx *gorm.DB, name string) error
- func (d Dialector) SavePoint(tx *gorm.DB, name string) error
- func (d Dialector) Translate(err error) error
- type MaxStringSize
- type Migrator
- func (m Migrator) AddColumn(value any, field string) error
- func (m Migrator) AlterColumn(value any, field string) error
- func (m Migrator) AlterDataTypeOf(stmt *gorm.Statement, field *schema.Field) (expr clause.Expr)
- func (m Migrator) ColumnTypes(value any) ([]gorm.ColumnType, error)
- func (m Migrator) CreateConstraint(value any, name string) error
- func (m Migrator) CreateOnUpdateTrigger(value any, rel *schema.Relationship) error
- func (m Migrator) CreateTable(values ...any) error
- func (m Migrator) CurrentDatabase() (name string)
- func (m Migrator) DropColumn(value any, name string) error
- func (m Migrator) DropConstraint(value any, name string) error
- func (m Migrator) DropIndex(value any, name string) error
- func (m Migrator) DropOnUpdateTrigger(value any, rel *schema.Relationship) error
- func (m Migrator) DropTable(values ...any) error
- func (m Migrator) DropView(name string) error
- func (m Migrator) FullDataTypeOf(field *schema.Field) (expr clause.Expr)
- func (m Migrator) GetIndexes(value interface{}) ([]gorm.Index, error)
- func (m Migrator) GetTables() ([]string, error)
- func (m Migrator) GetTypeAliases(databaseTypeName string) []string
- func (m Migrator) HasColumn(value any, field string) bool
- func (m Migrator) HasConstraint(value any, name string) bool
- func (m Migrator) HasIndex(value any, name string) bool
- func (m Migrator) HasTable(value any) bool
- func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnType gorm.ColumnType) error
- func (m Migrator) MigrateColumnUnique(value interface{}, field *schema.Field, columnType gorm.ColumnType) error
- func (m Migrator) RenameColumn(value interface{}, oldName, newName string) error
- func (m Migrator) RenameIndex(value any, oldName, newName string) error
- func (m Migrator) RenameTable(oldName, newName any) (err error)
- func (m Migrator) TableType(value interface{}) (gorm.TableType, error)
- func (m Migrator) TryRemoveOnUpdate(values ...any) error
- type Namer
- func (n Namer) CheckerName(table, column string) (name string)
- func (n Namer) ColumnName(table, column string) (name string)
- func (n Namer) IndexName(table, column string) (name string)
- func (n Namer) JoinTableName(table string) (name string)
- func (n Namer) RelationshipFKName(relationship schema.Relationship) (name string)
- func (n Namer) SchemaName(table string) string
- func (n Namer) TableName(table string) (name string)
- func (n Namer) UniqueName(table, column string) string
- type OracleGobSerializer
- type Param
- type RefCursor
Constants ¶
const ( OracleVersion10 = 10 // Oracle 10g OracleVersion11 = 11 // Oracle 11g(不含 IDENTITY 列、OFFSET/FETCH 分页) OracleVersion12 = 12 // Oracle 12c(引入 IDENTITY 列、OFFSET/FETCH 分页;12.1 起支持 Extended 32k VARCHAR2) OracleVersion18 = 18 // Oracle 18c(12.2 的再版) OracleVersion19 = 19 // Oracle 19c OracleVersion21 = 21 // Oracle 21c(引入原生 BOOLEAN 列类型) OracleVersion23 = 23 // Oracle 23ai(引入 VECTOR 类型) )
Oracle 版本主版本号常量(对应各版本引入的数据库特性)
const RowNumberAliasForOracle11 = "ROW_NUM"
Variables ¶
var ReservedWordsList = []string{}/* 201 elements not displayed */
Functions ¶
func ConvertNameToFormat ¶
func GetOracleDriver ¶ added in v1.1.0
func GetOracleDriver(db *gorm.DB) (*go_ora.OracleDriver, error)
GetOracleDriver 返回底层 go-ora 驱动 P2-5: 解决 db.Driver() 返回 *enumNormalizeDriver 导致用户类型断言失败的问题
func InParam ¶ added in v1.1.0
func InParam(value interface{}) interface{}
InParam 创建一个 IN 参数(通常不需要,因为普通参数就是 IN 参数) 此函数主要用于明确语义
func IsReservedWord ¶
func ToDriverParam ¶ added in v1.1.0
func ToDriverParam(p Param) go_ora.Out
ToDriverParam 将本地 Param 转换为底层驱动的 Out 结构 此函数在驱动层使用,业务代码不应直接调用
Types ¶
type Config ¶
type Config struct {
DriverName string
DSN string
Conn gorm.ConnPool //*sql.DB
DefaultStringSize uint
DBName string
DBVer string
MaxStringSize MaxStringSize // MAX_STRING_SIZE 探测结果(三态:Unknown/Standard/Extended),由 Initialize 探测数据库参数后填充;未探测/探测失败(含 11g)时为零值 Unknown,按 STANDARD 保守处理
// DriverType 所请求的驱动类型。当前仅支持 go-ora:生产链路固定使用
// go-ora 驱动,设置任何值(含 DriverGodror)均不改变实际驱动选择;
// godror 支持未接线(Initialize 的驱动路径不读取该字段,仅 GetAdapter
// 在零值 "" 时回退为 DriverGoOra)。保持零值即可;显式设置为非 "go-ora"
// 的值时,Initialize 会打印一条告警提示配置无效。
DriverType driver_adapter.DriverType
SkipQuoteIdentifiers bool // 新增:是否跳过标识符引用
}
type Dialector ¶
type Dialector struct {
*Config
}
func (Dialector) ClauseBuilders ¶
func (d Dialector) ClauseBuilders() map[string]clause.ClauseBuilder
ClauseBuilders 返回 Oracle 方言的 clause 构建器集合。 版本门控统一委托 supportsFetchOffset(单一来源,避免内联重复判定):
- 版本解析失败(空/不可解析,oracleMajor==0)时保守使用 11g 的 ROWNUM 方案, 避免在 11g 下使用 12c+ 的 FETCH NEXT 语法导致 ORA-00933;
- >= 12c 使用 OFFSET/FETCH 分页语法。
同时注册 "FOR" 子句构建器(gorm 的 clause.Locking.Name() 返回 "FOR", 对应 queryClauses 中的 "FOR"):输出 Oracle 行锁语法 FOR UPDATE / FOR SHARE 退化 / NOWAIT / SKIP LOCKED,其中 SKIP LOCKED 按 12c+ 版本门控。
func (Dialector) DefaultValueOf ¶
func (d Dialector) DefaultValueOf(*schema.Field) clause.Expression
func (Dialector) DummyTableName ¶
func (Dialector) GetAdapter ¶
func (d Dialector) GetAdapter() driver_adapter.Adapter
GetAdapter 返回驱动适配器。 注意:Config.DriverType 为预留字段,当前未接线——生产链路固定使用 go-ora 驱动(Initialize 的驱动路径不读取该字段);godror 适配器 (driver_adapter/godror.go,受 build tag godror 约束)为预留实现, 未接入 Initialize。此方法仅保证默认返回 go-ora 适配器,供既有调用兼容。
func (*Dialector) GetDBConn ¶ added in v1.1.0
GetDBConn 返回底层数据库连接 P1-7: 实现此方法以支持通过 GORM API 获取底层 *sql.DB
func (Dialector) RewriteLimit ¶
func (Dialector) RewriteLimit11 ¶
Oracle11 Limit
type MaxStringSize ¶ added in v1.1.0
type MaxStringSize int
MaxStringSize 表示数据库 MAX_STRING_SIZE 参数的三态探测结果
const ( MaxStringSizeUnknown MaxStringSize = iota // 未探测/探测失败(含 11g),保守按 STANDARD 处理 MaxStringSizeStandard // VARCHAR2 上限 4000 字节 MaxStringSizeExtended // VARCHAR2 上限 32767 字节 )
type Migrator ¶
func (Migrator) AlterDataTypeOf ¶
func (Migrator) ColumnTypes ¶
func (m Migrator) ColumnTypes(value any) ([]gorm.ColumnType, error)
ColumnTypes return columnTypes []gorm.ColumnType and execErr error
func (Migrator) CreateOnUpdateTrigger ¶
func (m Migrator) CreateOnUpdateTrigger(value any, rel *schema.Relationship) error
CreateOnUpdateTrigger 创建 ON UPDATE 触发器 Oracle 不支持原生的 ON UPDATE 外键操作,需要通过触发器模拟
func (Migrator) CreateTable ¶
func (Migrator) CurrentDatabase ¶
func (Migrator) DropOnUpdateTrigger ¶
func (m Migrator) DropOnUpdateTrigger(value any, rel *schema.Relationship) error
DropOnUpdateTrigger 删除 ON UPDATE 触发器
func (Migrator) DropView ¶ added in v1.1.0
DropView 删除视图(Oracle 不支持 DROP VIEW IF EXISTS,使用 PL/SQL 异常处理保证幂等) 覆写 GORM 默认实现(使用 DROP VIEW IF EXISTS,Oracle 不支持)
func (Migrator) FullDataTypeOf ¶
FullDataTypeOf 返回字段的完整数据库类型(版本感知的默认值处理)。 GORM 标准实现会把 DefaultValue 直接拼成 "DEFAULT xxx",对 11g 下引用序列的 NEXTVAL 默认值会生成非法 SQL(ORA-00984),因此在此重写: 11g 下 NEXTVAL 默认值不生成 DEFAULT 子句,改由 CreateTable 流程在建表后 创建 BEFORE INSERT 触发器实现等价语义(见 createSequenceDefaultTrigger)。
func (Migrator) GetIndexes ¶ added in v1.1.0
GetIndexes 返回表的所有索引(Oracle 数据字典 USER_INDEXES)
func (Migrator) GetTables ¶ added in v1.1.0
GetTables 返回当前用户的所有表名(Oracle 数据字典 USER_TABLES) 覆写 GORM 默认实现(使用 information_schema.tables,Oracle 不支持)
func (Migrator) GetTypeAliases ¶ added in v1.0.13
GetTypeAliases 返回字段逻辑类型在 Oracle 数据字典中的别名,用于 MigrateColumn 的类型比对:Oracle 把 INTEGER/SMALLINT 等数值列统一报告为 NUMBER, 覆写默认实现避免 AutoMigrate 反复误判为类型差异而重复 ALTER。
MigrateColumn 匹配逻辑(gorm@v1.31.2/migrator/migrator.go:484-493):
if !strings.HasPrefix(fullDataType, realDataType) {
aliases := m.DB.Migrator().GetTypeAliases(realDataType)
for _, alias := range aliases {
if strings.HasPrefix(fullDataType, alias) { isSameType = true }
}
}
因此 aliases 应是 DataTypeOf 输出值的前缀(如 "integer"、"smallint"), 而非 Oracle 侧的类型名 "number"。
func (Migrator) MigrateColumn ¶ added in v1.1.0
func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnType gorm.ColumnType) error
MigrateColumn 迁移列定义(Oracle 使用 MODIFY 语法,而非 ALTER COLUMN) 覆写 GORM 默认实现,适配 Oracle 的类型系统和语法: 1. Oracle 使用 NUMBER 统一表示数值类型,需通过 GetTypeAliases 处理类型别名 2. Oracle 使用 ALTER TABLE ... MODIFY ... 而非 ALTER COLUMN ... TYPE
func (Migrator) MigrateColumnUnique ¶ added in v1.1.0
func (m Migrator) MigrateColumnUnique(value interface{}, field *schema.Field, columnType gorm.ColumnType) error
MigrateColumnUnique 处理唯一约束变更
func (Migrator) RenameColumn ¶ added in v1.1.0
RenameColumn 重命名列(12c+ 支持,11g 不支持)
func (Migrator) RenameTable ¶
func (Migrator) TryRemoveOnUpdate ¶
type Namer ¶
func (Namer) CheckerName ¶
func (Namer) ColumnName ¶
func (Namer) JoinTableName ¶
func (Namer) RelationshipFKName ¶
func (n Namer) RelationshipFKName(relationship schema.Relationship) (name string)
func (Namer) SchemaName ¶
func (Namer) UniqueName ¶
type OracleGobSerializer ¶ added in v1.1.0
type OracleGobSerializer struct{}
OracleGobSerializer 是 Oracle 优化的 GobSerializer 支持从 string 类型(VARCHAR2 列)解码 GOB 数据
type Param ¶ added in v1.1.0
type Param struct {
// Dest 是参数的目标值(用于 OUT/IN OUT 参数)
Dest interface{}
// Size 是字符串类型参数的大小(用于 VARCHAR2 等变长类型)
Size int
// In 表示是否为 IN 或 IN OUT 参数
// false: OUT 参数
// true: IN 或 IN OUT 参数
In bool
}
Param 是存储过程参数的本地包装结构 用于隐藏底层驱动(当前为 go-ora)的细节,提供统一的 API godror 为路线图项(未接线),暂不涉及切换
func InOutParam ¶ added in v1.1.0
func InOutParam(dest interface{}) Param
InOutParam 创建一个 IN OUT 参数 用于存储过程的输入输出参数
type RefCursor ¶ added in v1.1.0
type RefCursor struct {
// contains filtered or unexported fields
}
RefCursor 是游标类型的本地包装 用于存储过程返回结果集
func (*RefCursor) ToDriverCursor ¶ added in v1.1.0
func (r *RefCursor) ToDriverCursor() *go_ora.RefCursor
ToDriverCursor 将本地 RefCursor 转换为底层驱动的 RefCursor
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package driver_adapter 提供 Oracle 驱动抽象层。
|
Package driver_adapter 提供 Oracle 驱动抽象层。 |