dialects

package
v0.0.0-...-5f82a4e Latest Latest
Warning

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

Go to latest
Published: Dec 6, 2024 License: BSD-3-Clause Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	IncrAutoincrMode = iota
	SequenceAutoincrMode
)

enumerates all autoincr mode

Variables

View Source
var (
	// DefaultPostgresSchema default postgres schema
	DefaultPostgresSchema = "public"
)

Functions

func ColumnString

func ColumnString(dialect Dialect, col *schemas.Column, includePrimaryKey bool) (string, error)

ColumnString generate column description string according dialect

func FormatColumnTime

func FormatColumnTime(dialect Dialect, dbLocation *time.Location, col *schemas.Column, t time.Time) (interface{}, error)

FormatColumnTime format column time

func FullTableName

func FullTableName(dialect Dialect, mapper names.Mapper, bean interface{}, includeSchema ...bool) string

FullTableName returns table name with quote and schema according parameter

func QueryDefaultPostgresSchema

func QueryDefaultPostgresSchema(ctx context.Context, queryer core.Queryer) (string, error)

QueryDefaultPostgresSchema returns the default postgres schema

func RegisterDialect

func RegisterDialect(dbName schemas.DBType, dialectFunc func() Dialect)

RegisterDialect register database dialect

func RegisterDriver

func RegisterDriver(driverName string, driver Driver)

RegisterDriver register a driver

func RegisteredDriverSize

func RegisteredDriverSize() int

RegisteredDriverSize returned all drivers's length

func TableNameNoSchema

func TableNameNoSchema(dialect Dialect, mapper names.Mapper, tableName interface{}) string

TableNameNoSchema returns table name with given tableName

func TableNameWithSchema

func TableNameWithSchema(dialect Dialect, tableName string) string

TableNameWithSchema will add schema prefix on table name if possible

Types

type Base

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

Base represents a basic dialect and all real dialects could embed this struct

func (*Base) AddColumnSQL

func (db *Base) AddColumnSQL(tableName string, col *schemas.Column) string

AddColumnSQL returns a SQL to add a column

func (*Base) Alias

func (db *Base) Alias(col string) string

Alias returned col itself

func (*Base) CreateIndexSQL

func (db *Base) CreateIndexSQL(tableName string, index *schemas.Index) string

CreateIndexSQL returns a SQL to create index

func (*Base) CreateSequenceSQL

func (db *Base) CreateSequenceSQL(ctx context.Context, queryer core.Queryer, seqName string) (string, error)

func (*Base) CreateTableSQL

func (db *Base) CreateTableSQL(ctx context.Context, queryer core.Queryer, table *schemas.Table, tableName string) (string, bool, error)

CreateTableSQL implements Dialect

func (*Base) DropIndexSQL

func (db *Base) DropIndexSQL(tableName string, index *schemas.Index) string

DropIndexSQL returns a SQL to drop index

func (*Base) DropSequenceSQL

func (db *Base) DropSequenceSQL(seqName string) (string, error)

func (*Base) DropTableSQL

func (db *Base) DropTableSQL(tableName string) (string, bool)

DropTableSQL returns drop table SQL

func (*Base) ForUpdateSQL

func (db *Base) ForUpdateSQL(query string) string

ForUpdateSQL returns for updateSQL

func (*Base) HasRecords

func (db *Base) HasRecords(queryer core.Queryer, ctx context.Context, query string, args ...interface{}) (bool, error)

HasRecords returns true if the SQL has records returned

func (*Base) Init

func (db *Base) Init(dialect Dialect, uri *URI) error

Init initialize the dialect

func (*Base) IsColumnExist

func (db *Base) IsColumnExist(queryer core.Queryer, ctx context.Context, tableName, colName string) (bool, error)

IsColumnExist returns true if the column of the table exist

func (*Base) IsSequenceExist

func (db *Base) IsSequenceExist(ctx context.Context, queryer core.Queryer, seqName string) (bool, error)

func (*Base) ModifyColumnSQL

func (db *Base) ModifyColumnSQL(tableName string, col *schemas.Column) string

ModifyColumnSQL returns a SQL to modify SQL

func (*Base) Quoter

func (db *Base) Quoter() schemas.Quoter

Quoter returns the current database Quoter

func (*Base) SetParams

func (db *Base) SetParams(params map[string]string)

SetParams set params

func (*Base) URI

func (db *Base) URI() *URI

URI returns the uri of database

type Dialect

type Dialect interface {
	Init(*URI) error
	URI() *URI
	Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error)
	Features() *DialectFeatures

	SQLType(*schemas.Column) string
	Alias(string) string       // return what a sql type's alias of
	ColumnTypeKind(string) int // database column type kind

	IsReserved(string) bool
	Quoter() schemas.Quoter
	SetQuotePolicy(quotePolicy QuotePolicy)

	AutoIncrStr() string

	GetIndexes(queryer core.Queryer, ctx context.Context, tableName string) (map[string]*schemas.Index, error)
	IndexCheckSQL(tableName, idxName string) (string, []interface{})
	CreateIndexSQL(tableName string, index *schemas.Index) string
	DropIndexSQL(tableName string, index *schemas.Index) string

	GetTables(queryer core.Queryer, ctx context.Context) ([]*schemas.Table, error)
	IsTableExist(queryer core.Queryer, ctx context.Context, tableName string) (bool, error)
	CreateTableSQL(ctx context.Context, queryer core.Queryer, table *schemas.Table, tableName string) (string, bool, error)
	DropTableSQL(tableName string) (string, bool)

	CreateSequenceSQL(ctx context.Context, queryer core.Queryer, seqName string) (string, error)
	IsSequenceExist(ctx context.Context, queryer core.Queryer, seqName string) (bool, error)
	DropSequenceSQL(seqName string) (string, error)

	GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error)
	IsColumnExist(queryer core.Queryer, ctx context.Context, tableName string, colName string) (bool, error)
	AddColumnSQL(tableName string, col *schemas.Column) string
	ModifyColumnSQL(tableName string, col *schemas.Column) string

	ForUpdateSQL(query string) string

	Filters() []Filter
	SetParams(params map[string]string)
}

Dialect represents a kind of database

func OpenDialect

func OpenDialect(driverName, connstr string) (Dialect, error)

OpenDialect opens a dialect via driver name and connection string

func QueryDialect

func QueryDialect(dbName schemas.DBType) Dialect

QueryDialect query if registered database dialect

type DialectFeatures

type DialectFeatures struct {
	AutoincrMode int // 0 autoincrement column, 1 sequence
}

DialectFeatures represents a dialect parameters

type Driver

type Driver interface {
	Parse(string, string) (*URI, error)
	Features() *DriverFeatures
	GenScanResult(string) (interface{}, error) // according given column type generating a suitable scan interface
	Scan(*ScanContext, *core.Rows, []*sql.ColumnType, ...interface{}) error
}

Driver represents a database driver

func QueryDriver

func QueryDriver(driverName string) Driver

QueryDriver query a driver with name

type DriverFeatures

type DriverFeatures struct {
	SupportReturnInsertedID bool
}

DriverFeatures represents driver feature

type Filter

type Filter interface {
	Do(sql string) string
}

Filter is an interface to filter SQL

type QuotePolicy

type QuotePolicy int

QuotePolicy describes quote handle policy

const (
	QuotePolicyAlways QuotePolicy = iota
	QuotePolicyNone
	QuotePolicyReserved
)

All QuotePolicies

type ScanContext

type ScanContext struct {
	DBLocation   *time.Location
	UserLocation *time.Location
}

ScanContext represents a context when Scan

type SeqFilter

type SeqFilter struct {
	Prefix string
	Start  int
}

SeqFilter filter SQL replace ?, ? ... to $1, $2 ...

func (*SeqFilter) Do

func (s *SeqFilter) Do(sql string) string

Do implements Filter

type URI

type URI struct {
	DBType  schemas.DBType
	Proto   string
	Host    string
	Port    string
	DBName  string
	User    string
	Passwd  string
	Charset string
	Laddr   string
	Raddr   string
	Timeout time.Duration
	Schema  string
}

URI represents an uri to visit database

func (*URI) SetSchema

func (uri *URI) SetSchema(schema string)

SetSchema set schema

Jump to

Keyboard shortcuts

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