ibmdb

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: May 28, 2025 License: MIT Imports: 16 Imported by: 1

README

GORM MySQL Driver

Quick Start

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

// https://github.com/go-sql-driver/mysql
dsn := "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

Configuration

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

var datetimePrecision = 2

db, err := gorm.Open(mysql.New(mysql.Config{
  DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local", // data source name, refer https://github.com/go-sql-driver/mysql#dsn-data-source-name
  DefaultStringSize: 256, // add default size for string fields, by default, will use db type `longtext` for fields without size, not a primary key, no index defined and don't have default values
  DisableDatetimePrecision: true, // disable datetime precision support, which not supported before MySQL 5.6
  DefaultDatetimePrecision: &datetimePrecision, // default datetime precision
  DontSupportRenameIndex: true, // drop & create index when rename index, rename index not supported before MySQL 5.7, MariaDB
  DontSupportRenameColumn: true, // use change when rename column, rename rename not supported before MySQL 8, MariaDB
  SkipInitializeWithVersion: false, // smart configure based on used version
}), &gorm.Config{})

Customized Driver

import (
  _ "example.com/my_mysql_driver"
  "gorm.io/gorm"
  "gorm.io/driver/mysql"
)

db, err := gorm.Open(mysql.New(mysql.Config{
  DriverName: "my_mysql_driver_name",
  DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local", // data source name, refer https://github.com/go-sql-driver/mysql#dsn-data-source-name
})

Checkout https://gorm.io for details.

Documentation

Overview

Package ibmdb 实现了GORM与IBM DB2数据库的集成 TODO 基底是来自mysql实现的,功能未完全实现 提供了数据库连接、SQL生成、数据类型映射、事务管理等功能 主要包含以下功能: 1. 数据库连接配置 2. SQL语句构建 3. 数据类型转换 4. 事务管理 5. 数据库迁移支持

Index

Constants

View Source
const (
	DefaultDriverName = "go_ibm_db"

	AutoRandomTag = "auto_random()" // Treated as an auto_random field for tidb
)
View Source
const (
	// ClauseOnConflict for clause.ClauseBuilder ON CONFLICT key
	ClauseOnConflict = "ON CONFLICT"
	// ClauseValues for clause.ClauseBuilder VALUES key
	ClauseValues = "VALUES"
	// ClauseFor for clause.ClauseBuilder FOR key
	ClauseFor       = "FOR"
	ClauseLimit     = "LIMIT"
	ClauseReturning = "RETURNING"
)

Variables

View Source
var (
	// CreateClauses create clauses
	//CreateClauses = []string{"INSERT", "VALUES", "ON CONFLICT"}
	CreateClauses = []string{"RETURNING", "INSERT", "VALUES", "ON CONFLICT"}
	// QueryClauses query clauses
	QueryClauses = []string{"SELECT", "FROM", "WHERE", "GROUP BY", "ORDER BY", "LIMIT", "FOR"}
	//QueryClauses = []string{}
	// UpdateClauses update clauses
	UpdateClauses = []string{"UPDATE", "SET", "WHERE", "ORDER BY", "LIMIT"}
	// DeleteClauses delete clauses
	DeleteClauses = []string{"DELETE", "FROM", "WHERE", "ORDER BY", "LIMIT"}
)

Functions

func BuildQuerySQL

func BuildQuerySQL(db *gorm.DB)

BuildQuerySQL 构建查询SQL 1. 添加Schema的查询子句 2. 初始化SQL并构建SELECT子句 3. 处理结构体类型的主键条件 4. 处理Selects和Omits字段 5. 处理Join关系 6. 构建最终的SQL语句

func Create

func Create(config *callbacks.Config) func(db *gorm.DB)

Create create hook

func New

func New(config Config) gorm.Dialector

New 通过配置对象创建Dialector实例 参数:

  • config: 数据库配置对象

返回:

  • 实现了gorm.Dialector接口的对象

func Open

func Open(dsn string) gorm.Dialector

Open 通过DSN字符串创建Dialector实例 参数:

  • dsn: 数据库连接字符串

返回:

  • 实现了gorm.Dialector接口的对象

func Query

func Query(db *gorm.DB)

Query 执行查询操作 1. 调用BuildQuerySQL构建SQL语句 2. 如果非DryRun模式且无错误,执行查询并扫描结果

Types

type Config

type Config struct {
	DriverName    string
	ServerVersion string
	DSN           string
	//NConfig                     *mysql.Config
	Conn                          gorm.ConnPool
	SkipInitializeWithVersion     bool
	DefaultStringSize             uint
	DefaultDatetimePrecision      *int
	DisableWithReturning          bool
	DisableDatetimePrecision      bool
	DontSupportRenameIndex        bool
	DontSupportRenameColumn       bool
	DontSupportForShareClause     bool
	DontSupportNullAsDefaultValue bool
	DontSupportRenameColumnUnique bool
	// As of MySQL 8.0.19, ALTER TABLE permits more general (and SQL standard) syntax
	// for dropping and altering existing constraints of any type.
	// see https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
	DontSupportDropConstraint bool
}

type Dialector

type Dialector struct {
	*Config
}

ibmdb Dialector实现了gorm.Dialector接口

Name() string
Initialize(*DB) error
Migrator(db *DB) Migrator
DataTypeOf(*schema.Field) string
DefaultValueOf(*schema.Field) clause.Expression
BindVarTo(writer clause.Writer, stmt *Statement, v interface{})
QuoteTo(clause.Writer, string)
Explain(sql string, vars ...interface{}) string

func (Dialector) Apply

func (dialector Dialector) Apply(config *gorm.Config) error

Apply 应用配置到GORM 参数:

  • config: GORM配置对象

返回:

  • 错误信息

func (Dialector) BindVarTo

func (dialector Dialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v interface{})

BindVarTo 处理SQL参数绑定 参数:

  • writer: SQL语句构建器
  • stmt: GORM语句对象
  • v: 参数值

func (Dialector) ClauseBuilders

func (dialector Dialector) ClauseBuilders() map[string]clause.ClauseBuilder

ClauseBuilders 返回SQL子句构建器 返回:

  • 包含各种SQL子句构建器的map

func (Dialector) DataTypeOf

func (dialector Dialector) DataTypeOf(field *schema.Field) string

DataTypeOf 将GORM字段类型映射为DB2数据类型 TODO 未完全实现 参数:

  • field: 字段schema信息

返回:

  • DB2数据类型字符串

func (Dialector) DefaultValueOf

func (dialector Dialector) DefaultValueOf(field *schema.Field) clause.Expression

DefaultValueOf 处理字段默认值 参数:

  • field: 字段schema信息

返回:

  • SQL表达式

func (Dialector) Explain

func (dialector Dialector) Explain(sql string, vars ...interface{}) string

Explain 格式化SQL解释输出 参数:

  • sql: SQL语句
  • vars: SQL参数

返回:

  • 格式化后的SQL字符串

func (Dialector) Initialize

func (dialector Dialector) Initialize(db *gorm.DB) (err error)

Initialize 初始化数据库连接 参数:

  • db: GORM数据库实例

返回:

  • 错误信息

func (Dialector) Migrator

func (dialector Dialector) Migrator(db *gorm.DB) gorm.Migrator

Migrator 返回数据库迁移器 参数:

  • db: GORM数据库实例

返回:

  • 实现了gorm.Migrator接口的对象

func (Dialector) Name

func (dialector Dialector) Name() string

Name 返回驱动名称 返回:

  • 驱动名称字符串 "go_ibm_db"

func (Dialector) NowFunc

func (dialector Dialector) NowFunc(n int) func() time.Time

NowFunc return now func NowFunc 返回时间处理函数 参数:

  • n: 时间精度

返回:

  • 时间处理函数

func (Dialector) QuoteTo

func (dialector Dialector) QuoteTo(writer clause.Writer, str string)

QuoteTo 处理SQL标识符引用 参数:

  • writer: SQL语句构建器
  • str: 需要引用的字符串

func (Dialector) RollbackTo

func (dialector Dialector) RollbackTo(tx *gorm.DB, name string) error

RollbackTo 回滚到指定保存点 参数:

  • tx: GORM事务实例
  • name: 保存点名称

返回:

  • 错误信息

func (Dialector) SavePoint

func (dialector Dialector) SavePoint(tx *gorm.DB, name string) error

SavePoint 创建事务保存点 参数:

  • tx: GORM事务实例
  • name: 保存点名称

返回:

  • 错误信息

func (Dialector) Translate

func (dialector Dialector) Translate(err error) error

type Index

type Index struct {
	TableName  string `gorm:"column:TABLE_NAME"`
	ColumnName string `gorm:"column:COLUMN_NAME"`
	IndexName  string `gorm:"column:INDEX_NAME"`
	NonUnique  int32  `gorm:"column:NON_UNIQUE"`
}

Index table index info

type Migrator

type Migrator struct {
	migrator.Migrator
	Dialector
}

func (Migrator) AddColumn

func (m Migrator) AddColumn(value interface{}, name string) error

func (Migrator) AlterColumn

func (m Migrator) AlterColumn(value interface{}, field string) error

func (Migrator) ColumnTypes

func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error)

ColumnTypes column types return columnTypes,error

func (Migrator) CurrentDatabase

func (m Migrator) CurrentDatabase() (name string)

func (Migrator) CurrentSchema

func (m Migrator) CurrentSchema(stmt *gorm.Statement, table string) (string, string)

func (Migrator) DropConstraint

func (m Migrator) DropConstraint(value interface{}, name string) error

func (Migrator) DropTable

func (m Migrator) DropTable(values ...interface{}) error

func (Migrator) FullDataTypeOf

func (m Migrator) FullDataTypeOf(field *schema.Field) clause.Expr

func (Migrator) GetIndexes

func (m Migrator) GetIndexes(value interface{}) ([]gorm.Index, error)

func (Migrator) GetTables

func (m Migrator) GetTables() (tableList []string, err error)

func (Migrator) GetTypeAliases

func (m Migrator) GetTypeAliases(databaseTypeName string) []string

func (Migrator) MigrateColumnUnique

func (m Migrator) MigrateColumnUnique(value interface{}, field *schema.Field, columnType gorm.ColumnType) error

MigrateColumnUnique migrate column's UNIQUE constraint. In MySQL, ColumnType's Unique is affected by UniqueIndex, so we have to take care of the UniqueIndex.

func (Migrator) RenameColumn

func (m Migrator) RenameColumn(value interface{}, oldName, newName string) error

func (Migrator) RenameIndex

func (m Migrator) RenameIndex(value interface{}, oldName, newName string) error

func (Migrator) TableType

func (m Migrator) TableType(value interface{}) (tableType gorm.TableType, err error)

TableType table type return tableType,error

func (Migrator) TiDBVersion

func (m Migrator) TiDBVersion() (isTiDB bool, major, minor, patch int, err error)

Jump to

Keyboard shortcuts

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