oracle

package module
v0.0.0-...-2ae295b Latest Latest
Warning

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

Go to latest
Published: Feb 22, 2023 License: MIT Imports: 15 Imported by: 0

README

GORM-ORACLE

用于 GORM 的 Oracle 驱动。

Go Report Card Go Go Reference MIT license

使用指引

go get github.com/uonun/gorm-oracle
import (
	"..."
	oracle "github.com/uonun/gorm-oracle"
	"..."
)

func main(){
  // build DSN, see: https://github.com/sijms/go-ora
  //  CONN=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=***))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=***)))
  //  USER= ""
  //  PASSWORD = ""
  
  // prepare connection options
  urlOptions := map[string]string{
    "CONNECTION TIMEOUT": "3",
  }
  
  // oracle://{USER}:{PASSWORD}@:0/?CONNECTION TIMEOUT=3&connStr=CONN_TNS
  dsn = go_ora.BuildJDBC(os.Getenv("USER"), 
    os.Getenv("PASSWORD"), 
    os.Getenv("CONN"), urlOptions)

  // create with default configuration
  // or create use customer configuration
  // both will be overwritten by Environment variables
  dialector := oracle.Open(dsn)
  // dialector = oracle.New(oracle.Config{
  //   DSN: dsn,
  //   SkipInitializeWithVersion: true,
  //   // DefaultStringSize: ,
  // })

  db, err := gorm.Open(dialector, &gorm.Config{})

  // use `db` same as gorm
  // ...
}

已支持并测试的内容

Connection
  • gorm.Open
Query
  • db.Raw("").Scan(&model)
  • db.Find(&model)
Insert
  • db.Exec("INSERT INTO ...", ...)
  • db.Create(&model)
  • db.Create(&multi_models)
Returning

Option 1: tag autoIncrement for sequence column to return. For example:

// Customer table comment
type CustomerReturning struct {
  CustomerID   int64     `gorm:"column:CUSTOMER_ID;sequence:CUSTOMERS_S;autoIncrement" json:"customer_id"`
  // ... other fields
}

see: TestInsertReturningModels, CustomerReturning

Option 2: use clause.Returning.

db := getDb(t)
cs := make([]Customer, 10) // init 10 instances.
tx := db.Clauses(clause.Returning{ // returning `CUSTOMER_ID`
    Columns: []clause.Column{
      {Name: "CUSTOMER_ID"},
    },
  }).Create(&cs)) // create

see: TestInsertModelsWithReturningClause

Update
  • db.Exec("UPDATE ... SET ...", ...)
  • db.Updates(&model) // single update
  • db.Where("id in ?", ids).Updates(model{}) // batch updates
Delete
  • db.Delete(&model)
Transaction
  • db.Begin(), db.Rollback(), db.Commit()
  • db.SavePoint(""), db.RollbackTo("")

暂未支持的内容

  • 未支持 LIMIT 子句:如 First、不带条件的 Take。
  • 未支持命名参数:查询命令的参数传递时,只能按顺序匿名传入,无法按名称传入。
  • 有限支持 RowsAffected:包含 RETURNING 行为时,不支持通过 RowsAffected 返回实际的影响行数。

Documentation

Index

Constants

View Source
const (
	// ClauseOnConflict for clause.ClauseBuilder ON CONFLICT key
	ClauseOnConflict = "ON CONFLICT"
	ClauseReturning  = "RETURNING"
	// ClauseValues for clause.ClauseBuilder VALUES key
	ClauseValues = "VALUES"
	ClauseLimit  = "LIMIT"
	// ClauseValues for clause.ClauseBuilder FOR key
	ClauseFor    = "FOR"
	ClauseInsert = "INSERT"
)

Variables

View Source
var (
	// CreateClauses create clauses
	CreateClauses = []string{"INSERT", "VALUES", "ON CONFLICT", "RETURNING"}
)

Functions

func New

func New(config Config) gorm.Dialector

func Open

func Open(dsn string) gorm.Dialector

Types

type Config

type Config struct {
	DriverName    string
	DSN           string
	ServerVersion string
	Conn          gorm.ConnPool

	SkipInitializeWithVersion     bool
	DefaultStringSize             uint
	DontSupportRenameIndex        bool
	DontSupportRenameColumn       bool
	DontSupportNullAsDefaultValue bool
	// contains filtered or unexported fields
}

type Dialector

type Dialector struct {
	*Config
}

func (Dialector) BindVarTo

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

BindVarTo implements gorm.Dialector interface

func (Dialector) ClauseBuilders

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

func (Dialector) DataTypeOf

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

DataTypeOf implements gorm.Dialector interface

func (Dialector) DefaultValueOf

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

DefaultValueOf implements gorm.Dialector interface

func (Dialector) Explain

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

Explain implements gorm.Dialector interface

func (Dialector) HandleInsert

func (d Dialector) HandleInsert(c clause.Clause, builder clause.Builder)

func (Dialector) HandleLimit

func (d Dialector) HandleLimit(c clause.Clause, builder clause.Builder)

func (Dialector) HandleOnConflict

func (d Dialector) HandleOnConflict(c clause.Clause, builder clause.Builder)

func (Dialector) HandleReturning

func (d Dialector) HandleReturning(c clause.Clause, builder clause.Builder)

func (Dialector) HandleValues

func (d Dialector) HandleValues(c clause.Clause, builder clause.Builder)

func (Dialector) Initialize

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

Initialize implements gorm.Dialector interface

func (Dialector) Migrator

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

Migrator implements gorm.Dialector interface

func (Dialector) Name

func (dialector Dialector) Name() string

Name implements gorm.Dialector interface

func (Dialector) QuoteTo

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

QuoteTo implements gorm.Dialector interface

func (Dialector) RollbackTo

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

RollbackTo implements gorm.SavePointerDialectorInterface interface

func (Dialector) SavePoint

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

SavePoint implements gorm.SavePointerDialectorInterface interface

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) 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) GetSchemaName

func (m Migrator) GetSchemaName() (name string)

GetSchemaName returns current schema name

func (Migrator) GetTables

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

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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