Skip to content

Import path: gitlab.soludian.com/soludian/fountain/libs/stored/fql

fql

go
import "gitlab.soludian.com/soludian/fountain/libs/stored/fql"

Index

Constants

DNS Examples mysqlDSN = "fql:fql@tcp(localhost:9910)/fql?charset=utf8&parseTime=True&loc=Local" tidbDSN = "root:@tcp(localhost:9940)/test?charset=utf8&parseTime=True&loc=Local" // TiDB and mySQL using same drive postgresDSN = "user=fql password=fql dbname=fql host=localhost port=9920 sslmode=disable TimeZone=Asia/Shanghai" sqlserverDSN = "sqlserver://fql:LoremIpsum86@localhost:9930?database=fql" sqliteDSN = "file:test.db?cache=shared&mode=memory"

go
const (
    DatabaseMySQL     = "mysql" // Using for mysql, mariadb, tidb
    DatabasePostgres  = "postgres"
    DatabaseSQLite    = "sqlite3"
    DatabaseSQLServer = "sqlserver"
)

go
const (
    KDefaultTimeout = 30 * time.Second

    // KDriverPostgres using postgres driver
    KDriverPostgres string = "postgres"
    // KDriverMySQL using mysql driver
    KDriverMySQL string = "mysql"
)

go
const (
    AutoRandomTag = "auto_random()" // Treated as an auto_random field for tidb
)

go
const KPackageName = "fql"

Variables

go
var (
    // ErrRecordNotFound record not found error
    ErrRecordNotFound = fmt.Errorf("record not found")
    // ErrInvalidTransaction invalid transaction when you are trying to `Commit` or `Rollback`
    ErrInvalidTransaction = fmt.Errorf("invalid transaction")
    // ErrNotImplemented not implemented
    ErrNotImplemented = fmt.Errorf("not implemented")
    // ErrMissingWhereClause missing where clause
    ErrMissingWhereClause = fmt.Errorf("WHERE conditions required")
    // ErrUnsupportedRelation unsupported relations
    ErrUnsupportedRelation = fmt.Errorf("unsupported relations")
    // ErrPrimaryKeyRequired primary keys required
    ErrPrimaryKeyRequired = fmt.Errorf("primary key required")
    // ErrModelValueRequired model value required
    ErrModelValueRequired = fmt.Errorf("model value required")
    // ErrModelAccessibleFieldsRequired model accessible fields required
    ErrModelAccessibleFieldsRequired = fmt.Errorf("model accessible fields required")
    // ErrSubQueryRequired sub query required
    ErrSubQueryRequired = fmt.Errorf("sub query required")
    // ErrInvalidData unsupported data
    ErrInvalidData = fmt.Errorf("unsupported data")
    // ErrUnsupportedDriver unsupported driver
    ErrUnsupportedDriver = fmt.Errorf("unsupported driver")
    // ErrRegistered registered
    ErrRegistered = fmt.Errorf("registered")
    // ErrInvalidField invalid field
    ErrInvalidField = fmt.Errorf("invalid field")
    // ErrEmptySlice empty slice found
    ErrEmptySlice = fmt.Errorf("empty slice found")
    // ErrDryRunModeUnsupported dry run mode unsupported
    ErrDryRunModeUnsupported = fmt.Errorf("dry run mode unsupported")
    // ErrInvalidDB invalid db
    ErrInvalidDB = fmt.Errorf("invalid db")
    // ErrInvalidValue invalid value
    ErrInvalidValue = fmt.Errorf("invalid value, should be pointer to struct or slice")
    // ErrInvalidValueOfLength invalid values do not match length
    ErrInvalidValueOfLength = fmt.Errorf("invalid association values, length doesn't match")
    // ErrPreloadNotAllowed preload is not allowed when count is used
    ErrPreloadNotAllowed = fmt.Errorf("preload is not allowed when count is used")
    // ErrDuplicatedKey occurs when there is a unique key constraint violation
    ErrDuplicatedKey = fmt.Errorf("duplicated key not allowed")
    // ErrForeignKeyViolated occurs when there is a foreign key constraint violation
    ErrForeignKeyViolated = fmt.Errorf("violates foreign key constraint")
    // ErrCheckConstraintViolated occurs when there is a check constraint violation
    ErrCheckConstraintViolated = fmt.Errorf("violates check constraint")
)

go
var GetFountainInstance = Lib.GetFountainInstance

go
var GetFountainManager = Lib.GetFountainManager

Sử dụng khi config instance ở dạng key:value; Nếu config instance ở dạng key:array thì sử dụng hàm InstallFountainInstances Nếu config ở dạng key:array thì sẽ chỉ install config phần tử đầu tiên mà thôi

Install with config format <key>:<value>; eg: fql:<value>

Usage:

config.yaml:

fql:
  name: default_name
  ...

code.go

fql.InstallFountainInstance()

fql.WithConfigKey("fql").InstallFountainInstance()
go
var InstallFountainInstance = Lib.InstallFountainInstance

Sử dụng khi config instance ở dạng key:array<value>; Sẽ luôn cố gắng khởi tạo kể cả khi config ở dạng key:value

Install with config format <key>:array<value>; eg: fql:array<value>

Usage:

config.yaml:

fql:
  - name: default_name
    ...

code.go

fql.InstallFountainInstances()

fql.WithConfigKey("fql").InstallFountainInstances()
go
var InstallFountainInstances = Lib.InstallFountainInstances

Truy cập thẳng tới bộ quản lý thư viện

go
var Lib = lib_3rd.NewLib(newClient, lib_3rd.WithDefaultConfigFunc[config, Client](DefaultConfig))

go
var WithConfigKey = Lib.WithConfigKey

func AddVersionMigrateQuery

go
func AddVersionMigrateQuery(dbName string, vers ...any)

Tạo tên cho migrate query: Tự động bổ sung thêm Table, Hash và CreatedTime

Usage:

AddVersionMigrateQuery("db_name", &VersionMD{
    Name:        MigrateCreateIndexKey("versions", "version_time"),
    Query:       `CREATE INDEX CONCURRENTLY ` + MigrateCreateIndexKey("versions", "version_time") + ` ON versions (created_time desc)`,
})

func CalculateValue

go
func CalculateValue[T any](client *Client, query string, args ...any) T

CalculateValue query and calculate data with query and args

Usage:

query := "select count(1) from tables"
count := fql.CalculateValue[int](conn, query, nil)

func CalculateValues

go
func CalculateValues[I comparable, C any](client *Client, query string, args ...any) map[I]C

CalculateValues query and calculate data with query and args

Usage:

query := "select id, count(1) from tables group by id"
mCount := fql.CalculateValues[string, int](conn, query, nil)

func CreateDefaultCtx

go
func CreateDefaultCtx() (context.Context, context.CancelFunc)

func CreateIndexNameFromQuery

go
func CreateIndexNameFromQuery(query string) string

Trả về tên index

func CreateNameFromQuery

go
func CreateNameFromQuery(query string) string

func ExplainSQL

go
func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, avars ...any) string

ExplainSQL generate SQL string with given parameters, the generated SQL is expected to be used in logger, execute it might introduce a SQL injection vulnerability

func In

go
func In(query string, args ...any) (string, []any, error)

func InitVersionMigrate

go
func InitVersionMigrate(dbName string)

func MigrateCreateAlertEnumKey

go
func MigrateCreateAlertEnumKey(enum, action, name string) string

Tạo tên cho enum key: MigrateCreateAlertEnumKey("status", "add", "new_status") MigrateCreateAlertEnumKey("status", "drop", "old_status")

Usage:

fql.MigrateCreateAlertEnumKey("status", "add", "new_status")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateAlertEnumKey("status", "add", "new_status"),
    Query: `ALTER TYPE status ADD VALUE 'new_status';`,
})

func MigrateCreateAlertTableKey

go
func MigrateCreateAlertTableKey(tblName, name string) string

Tạo tên cho alert table: MigrateCreateAlertTableKey("tbl_users", "change_alert_table")

Usage:

fql.MigrateCreateAlertTableKey("tbl_users", "change_alert_table")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateAlertTableKey("tbl_users", "change_alert_table"),
    Query: `ALTER TABLE tbl_users ADD COLUMN change_alert_table BOOLEAN DEFAULT FALSE;`,
})

func MigrateCreateDeleteDataKey

go
func MigrateCreateDeleteDataKey(tblName string, name string) string

Tạo tên cho delete data: MigrateCreateDeleteDataKey("tbl_users", "admin")

Usage:

fql.MigrateCreateDeleteDataKey("tbl_users", "admin")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateDeleteDataKey("tbl_users", "admin"),
    Query: `DELETE FROM tbl_users WHERE name = 'admin';`,
})

func MigrateCreateEnumKey

go
func MigrateCreateEnumKey(enum string) string

Tạo tên cho enum: MigrateCreateEnumKey("status")

Usage:

fql.MigrateCreateEnumKey("status")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateEnumKey("status"),
    Query: `CREATE TYPE status AS ENUM ('active', 'inactive', 'deleted');`,
})

func MigrateCreateIndexKey

go
func MigrateCreateIndexKey(tblName, idxName string) string

Tạo tên cho index: MigrateCreateIndexKey("versions", "create_time") MigrateCreateIndexKey("versions", "uniq_create_time")

Usage:

fql.MigrateCreateIndexKey("versions", "create_time")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateIndexKey("versions", "version_time"),
    Query: `CREATE INDEX CONCURRENTLY ` + fql.MigrateCreateIndexKey("versions", "version_time") + ` ON versions (created_time desc)`,
})

func MigrateCreateInsertDataKey

go
func MigrateCreateInsertDataKey(tblName string, name string) string

Tạo tên cho insert data: MigrateCreateInsertDataKey("tbl_users", "admin")

Usage:

fql.MigrateCreateInsertDataKey("tbl_users", "admin")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateInsertDataKey("tbl_users", "admin"),
    Query: `INSERT INTO tbl_users (name, age) VALUES ('admin', 30);`,
})

func MigrateCreateTableKey

go
func MigrateCreateTableKey(tblName string) string

format: <tbl>_<table_name>_<action>_<resource> Tạo tên cho bảng: MigrateCreateIndexKey("versions", "create_time") MigrateCreateIndexKey("versions", "uniq_create_time")

Usage:

fql.MigrateCreateIndexKey("versions", "create_time")
// Or
fql.AddVersionMigrateQuery("dbName", &VersionMD{
    Name:  MigrateCreateTableKey("versions"),
    Query: `CREATE TABLE public.versions...`,
})

func MigrateCreateUpdateDataKey

go
func MigrateCreateUpdateDataKey(tblName string, name string) string

Tạo tên cho update data: MigrateCreateUpdateDataKey("tbl_users", "admin")

Usage:

fql.MigrateCreateUpdateDataKey("tbl_users", "admin")
// Or
fql.AddVersionMigrateQuery("db_name", &VersionMD{
    Name:  fql.MigrateCreateUpdateDataKey("tbl_users", "admin"),
    Query: `UPDATE tbl_users SET age = 31 WHERE name = 'admin';`,
})

func QueryDataParser

go
func QueryDataParser[T any](client *Client, query string, fnAfterParse func(*T) error, args ...any) *T

QueryDataParserContext query and parser one data with query and args, using fnAfterParse for the record

Usage:

query := "select value from tables where id = $1"
md, err := fql.QueryDataParser[models.T](conn, query, func(t *models.T) error {t.ID = id; return nil}, id)

func QueryDataParserContext

go
func QueryDataParserContext[T any](client *Client, ctx context.Context, query string, fnAfterParse func(*T) error, args ...any) *T

QueryDataParserContext query and parser one data with query and args in context, using fnAfterParse for the record

Usage:

query := "select value from tables where id = $1"
md, err := fql.QueryDataParserContext[models.T](conn, context.Background(), query, func(t *models.T) error {t.ID = id; return nil}, id)

func QueryListDataParser

go
func QueryListDataParser[T any](client *Client, query string, fnAfterParse func(*T) error, args ...any) []*T

QueryListDataParser query and parser multi data with query and args, using fnAfterParse for every records

Usage:

query := "select * from tables"
mds, err := fql.QueryListDataParser[models.T](conn, query, nil)

func QueryListDataParserContext

go
func QueryListDataParserContext[T any](client *Client, ctx context.Context, query string, fnAfterParse func(*T) error, args ...any) []*T

QueryListDataParserContext query and parser multi data with query and args in context, using fnAfterParse for every records

Usage:

query := "select * from tables"
mds, err := fql.QueryListDataParserContext[models.T](conn, context.Background(), query, nil)

func WithActive

go
func WithActive(active int) lib_3rd.Option[config]

func WithConfig

go
func WithConfig(conf *config) lib_3rd.Option[config]

func WithDSN

go
func WithDSN(dsn string) lib_3rd.Option[config]

DNS Examples mysqlDSN = "fql:fql@tcp(localhost:9910)/fql?charset=utf8&parseTime=True&loc=Local" tidbDSN = "root:@tcp(localhost:9940)/test?charset=utf8&parseTime=True&loc=Local" // TiDB and mySQL using same drive postgresDSN = "user=fql password=fql dbname=fql host=localhost port=9920 sslmode=disable TimeZone=Asia/Shanghai" sqlserverDSN = "sqlserver://fql:LoremIpsum86@localhost:9930?database=fql" sqliteDSN = "file:test.db?cache=shared&mode=memory"

func WithDriver

go
func WithDriver(driver string) lib_3rd.Option[config]

func WithEnvironment

go
func WithEnvironment(environment string) lib_3rd.Option[config]

func WithIdle

go
func WithIdle(idle int) lib_3rd.Option[config]

func WithName

go
func WithName(name string) lib_3rd.Option[config]

func WithOnFail

go
func WithOnFail(onFail string) lib_3rd.Option[config]

panic or error, default is panic if not found any connections are active

type BaseDAO

Schema

go
type BaseDAO struct {
    *Client

    Timeout time.Duration // timeout
    // contains filtered or unexported fields
}

func (*BaseDAO) CreateStatement

go
func (dao *BaseDAO) CreateStatement(conditions ...clause.Expression) *statement

func (*BaseDAO) CreateStatementWithTx

go
func (dao *BaseDAO) CreateStatementWithTx(tx *sqlx.Tx, conditions ...clause.Expression) *statement

CreateStatementWithTx tạo statement với transaction executor. Tx chỉ tồn tại trong scope của statement, không ảnh hưởng đến BaseDAO.

func (*BaseDAO) GetSchema

go
func (dao *BaseDAO) GetSchema() *schema.Schema

func (*BaseDAO) Insert

go
func (dao *BaseDAO) Insert(data any) error

Dùng hàm InsertResult hoặc InsertReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) InsertIgnoreConflict

go
func (dao *BaseDAO) InsertIgnoreConflict(data any) error

Dùng hàm InsertResult hoặc InsertReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) InsertResult

go
func (dao *BaseDAO) InsertResult(data any) (sql.Result, error)

data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng.

func (*BaseDAO) InsertReturn

go
func (dao *BaseDAO) InsertReturn(data any) (any, error)

data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng. returning values sẽ có kiểu dữ liệu tương ứng data đầu vào

func (*BaseDAO) InsertTx

go
func (dao *BaseDAO) InsertTx(tx *sqlx.Tx, data any) error

InsertTx thực hiện insert trong transaction.

func (*BaseDAO) InsertTxIgnoreConflict

go
func (dao *BaseDAO) InsertTxIgnoreConflict(tx *sqlx.Tx, data any) error

InsertTxIgnoreConflict thực hiện insert trong transaction, bỏ qua conflict.

func (*BaseDAO) InsertTxResult

go
func (dao *BaseDAO) InsertTxResult(tx *sqlx.Tx, data any) (sql.Result, error)

InsertTxResult thực hiện insert trong transaction và trả về sql.Result.

func (*BaseDAO) InsertTxReturn

go
func (dao *BaseDAO) InsertTxReturn(tx *sqlx.Tx, data any) (any, error)

InsertTxReturn thực hiện insert trong transaction và trả về returning values.

func (*BaseDAO) InsertWithContext

go
func (dao *BaseDAO) InsertWithContext(ctx context.Context, data any) error

Dùng hàm InsertResult hoặc InsertReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) SetDefaultTimeout

go
func (dao *BaseDAO) SetDefaultTimeout(timeout time.Duration) *BaseDAO

func (*BaseDAO) SetSchema

go
func (dao *BaseDAO) SetSchema(sch *schema.Schema)

func (*BaseDAO) Update

go
func (dao *BaseDAO) Update(data any) error

Dùng hàm UpdateResult hoặc UpdateReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) UpdateFields

go
func (dao *BaseDAO) UpdateFields(data any, fields ...string) error

Dùng hàm UpdateResult hoặc UpdateReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng fields: []string - Danh sách các trường cần update

func (*BaseDAO) UpdateIgnoreConflict

go
func (dao *BaseDAO) UpdateIgnoreConflict(data any) error

Dùng hàm InsertResult hoặc InsertReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) UpdateResult

go
func (dao *BaseDAO) UpdateResult(data any) (sql.Result, error)

data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) UpdateResultVal

go
func (dao *BaseDAO) UpdateResultVal(data any) (int64, error)

data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

func (*BaseDAO) UpdateTx

go
func (dao *BaseDAO) UpdateTx(tx *sqlx.Tx, data any) error

UpdateTx thực hiện update trong transaction.

func (*BaseDAO) UpdateTxFields

go
func (dao *BaseDAO) UpdateTxFields(tx *sqlx.Tx, data any, fields ...string) error

UpdateTxFields thực hiện update các trường chỉ định trong transaction.

func (*BaseDAO) UpdateTxResult

go
func (dao *BaseDAO) UpdateTxResult(tx *sqlx.Tx, data any) (sql.Result, error)

UpdateTxResult thực hiện update trong transaction và trả về sql.Result.

func (*BaseDAO) UpdateWithContext

go
func (dao *BaseDAO) UpdateWithContext(ctx context.Context, data any) error

Dùng hàm InsertResult hoặc InsertReturn để lấy kết quả trả về data: any - Có thể là đối tượng, list đối tượng hoặc map đối tượng

type CanTableNameInf

go
type CanTableNameInf interface {
    TableName() string
}

type Client

go
type Client struct {
    sync.Mutex // Locker for length
    // contains filtered or unexported fields
}

func InitMocking

go
func InitMocking(dbConn *sql.DB, slaveAmount int) *Client

InitMocking initialize the dbConnection mocking

func (*Client) AddAutoVersionMigrateQuery

go
func (client *Client) AddAutoVersionMigrateQuery(mds ...any)

Tạo câu migrate query tự động từ đối tượng:

Usage:

fql.GetFountainInstance("db_name").AddVersionMigrateQuery(&VersionMD{})

func (*Client) Begin

go
func (c *Client) Begin() (*sql.Tx, error)

Begin sql transaction

func (*Client) BeginTx

go
func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)

BeginTx return sql.Tx

func (*Client) BeginTxx

go
func (c *Client) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*sqlx.Tx, error)

BeginTxx return sqlx.Tx

func (*Client) Beginx

go
func (c *Client) Beginx() (*sqlx.Tx, error)

Beginx sqlx transaction

func (*Client) Close

go
func (c *Client) Close() error

Close closes all database connections

func (*Client) DriverName

go
func (c *Client) DriverName() string

Trả về tên driver đang sử dụng: mysql, postgres, sqlite3, sqlserver,..

func (*Client) Exec

go
func (c *Client) Exec(query string, args ...any) (sql.Result, error)

Exec using master db

func (*Client) ExecContext

go
func (c *Client) ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error)

ExecContext using master db

func (*Client) Get

go
func (c *Client) Get(dest any, query string, args ...any) error

Get using slave.

func (*Client) GetContext

go
func (c *Client) GetContext(ctx context.Context, dest any, query string, args ...any) error

GetContext using slave.

func (*Client) GetMaster

go
func (c *Client) GetMaster(dest any, query string, args ...any) error

GetMaster using master.

func (*Client) GetMasterContext

go
func (c *Client) GetMasterContext(ctx context.Context, dest any, query string, args ...any) error

GetMasterContext using master.

func (*Client) Master

go
func (c *Client) Master() *sqlx.DB

Master return master database

func (*Client) MustBegin

go
func (c *Client) MustBegin() *sqlx.Tx

MustBegin starts a transaction, and panics on error. Returns an *sqlx.Tx instead of an *sql.Tx.

func (*Client) MustExec

go
func (c *Client) MustExec(query string, args ...any) sql.Result

MustExec (panic) runs MustExec using master database.

func (*Client) MustExecContext

go
func (c *Client) MustExecContext(ctx context.Context, query string, args ...any) sql.Result

MustExecContext (panic) runs MustExec using master database.

func (*Client) NamedExec

go
func (c *Client) NamedExec(query string, args any) (sql.Result, error)

Exec using master db

func (*Client) NamedExecContext

go
func (c *Client) NamedExecContext(ctx context.Context, query string, args any) (sql.Result, error)

NamedExecContext using master db

func (*Client) NamedQuery

go
func (c *Client) NamedQuery(query string, args any) (*sqlx.Rows, error)

Queryx queries the database and returns an *sqlx.Rows.

func (*Client) NamedQueryContext

go
func (c *Client) NamedQueryContext(ctx context.Context, query string, args any) (*sqlx.Rows, error)

NamedQueryContext queries the database and returns an *sqlx.Rows.

func (*Client) NewBaseDAO

go
func (client *Client) NewBaseDAO(md any) *BaseDAO

func (*Client) PingContext

go
func (c *Client) PingContext(ctx context.Context) error

PingContext database

func (*Client) Prepare

go
func (c *Client) Prepare(query string) (*Stmt, error)

Prepare return sql stmt

func (*Client) PrepareContext

go
func (c *Client) PrepareContext(ctx context.Context, query string) (*Stmt, error)

PrepareContext return sql stmt

func (*Client) Preparex

go
func (c *Client) Preparex(query string) (*Stmtx, error)

Preparex sqlx stmt

func (*Client) PreparexContext

go
func (c *Client) PreparexContext(ctx context.Context, query string) (*Stmtx, error)

PreparexContext sqlx stmt

func (*Client) Query

go
func (c *Client) Query(query string, args ...any) (*sql.Rows, error)

Query queries the database and returns an *sql.Rows.

func (*Client) QueryContext

go
func (c *Client) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)

QueryContext queries the database and returns an *sql.Rows.

func (*Client) QueryRow

go
func (c *Client) QueryRow(query string, args ...any) *sql.Row

QueryRow queries the database and returns an *sqlx.Row.

func (*Client) QueryRowContext

go
func (c *Client) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row

QueryRowContext queries the database and returns an *sqlx.Row.

func (*Client) QueryRowx

go
func (c *Client) QueryRowx(query string, args ...any) *sqlx.Row

QueryRowx queries the database and returns an *sqlx.Row.

func (*Client) QueryRowxContext

go
func (c *Client) QueryRowxContext(ctx context.Context, query string, args ...any) *sqlx.Row

QueryRowxContext queries the database and returns an *sqlx.Row.

func (*Client) Queryx

go
func (c *Client) Queryx(query string, args ...any) (*sqlx.Rows, error)

Queryx queries the database and returns an *sqlx.Rows.

func (*Client) QueryxContext

go
func (c *Client) QueryxContext(ctx context.Context, query string, args ...any) (*sqlx.Rows, error)

QueryxContext queries the database and returns an *sqlx.Rows.

func (*Client) Rebind

go
func (c *Client) Rebind(query string) string

Rebind query

func (*Client) RebindMaster

go
func (c *Client) RebindMaster(query string) string

RebindMaster will rebind query for master

func (*Client) Select

go
func (c *Client) Select(dest any, query string, args ...any) error

Select using slave db.

func (*Client) SelectContext

go
func (c *Client) SelectContext(ctx context.Context, dest any, query string, args ...any) error

SelectContext using slave db.

func (*Client) SelectMaster

go
func (c *Client) SelectMaster(dest any, query string, args ...any) error

SelectMaster using master db.

func (*Client) SelectMasterContext

go
func (c *Client) SelectMasterContext(ctx context.Context, dest any, query string, args ...any) error

SelectMasterContext using master db.

func (*Client) SetConnMaxLifetime

go
func (c *Client) SetConnMaxLifetime(d time.Duration)

SetConnMaxLifetime sets the maximum amount of time a connection may be reused. Expired connections may be closed lazily before reuse. If d <= 0, connections are reused forever.

func (*Client) SetMaxIdleConns

go
func (c *Client) SetMaxIdleConns(n int)

SetMaxIdleConns sets the maximum number of connections in the idle connection pool for all connections

func (*Client) SetMaxOpenConnections

go
func (c *Client) SetMaxOpenConnections(max int)

SetMaxOpenConnections to set max connections

func (*Client) Slave

go
func (c *Client) Slave() *sqlx.DB

Slave return slave database

type DBStatus

DBStatus for status response

go
type DBStatus struct {
    Name       string `json:"name"`
    Connected  bool   `json:"connected"`
    LastActive string `json:"last_active"`
    Error      any    `json:"error"`
}

type DriverBuilderInf

go
type DriverBuilderInf interface {
    GetCreateTableClauses() []string // []string{"CREATE TABLE IF NOT EXISTS"}
    GetCreateClauses() []string      // []string{"INSERT", "VALUES", "ON CONFLICT", "RETURNING"}
    GetQueryClauses() []string       // []string{"SELECT", "FROM", "WHERE", "GROUP BY", "ORDER BY", "LIMIT", "FOR"}
    GetUpdateClauses() []string      // []string{"UPDATE", "SET", "WHERE"}
    GetDeleteClauses() []string      // []string{"DELETE", "FROM", "WHERE"}
    DataTypeOf(field *schema.Field) string
    DefaultValueOf(field *schema.Field) clause.Expression
    BindVarTo(stmt *statement, v any)
    QuoteTo(stmt *statement, s string)
    Explain(sql string, vars ...any) string
}

type ModelID

Model a basic GoLang struct which includes the following fields: ID, CreatedTime, UpdatedTime It may be embedded into your model or you may build your own model without it

type User struct {
  fql.Model
}
go
type ModelID struct {
    ID          string `fql:"primary_key"`
    CreatedTime int32
    UpdatedTime int32
}

type ModelUUID

go
type ModelUUID struct {
    UUID        string `fql:"uuid"`
    CreatedTime int32
    UpdatedTime int32
}

type NamedExecutorInf

go
type NamedExecutorInf interface {
    NamedExecContext(ctx context.Context, query string, args any) (sql.Result, error)
}

type SchemaModelInf

go
type SchemaModelInf interface {
    SchemaName() string
}

type Stmt

Stmt implement sql stmt

go
type Stmt struct {
    // contains filtered or unexported fields
}

func (*Stmt) Close

go
func (st *Stmt) Close() error

Close stmt

func (*Stmt) Exec

go
func (st *Stmt) Exec(args ...any) (sql.Result, error)

Exec will always go to production

func (*Stmt) Query

go
func (st *Stmt) Query(args ...any) (*sql.Rows, error)

Query will always go to slave

func (*Stmt) QueryMaster

go
func (st *Stmt) QueryMaster(args ...any) (*sql.Rows, error)

QueryMaster will use master db

func (*Stmt) QueryRow

go
func (st *Stmt) QueryRow(args ...any) *sql.Row

QueryRow will always go to slave

func (*Stmt) QueryRowMaster

go
func (st *Stmt) QueryRowMaster(args ...any) *sql.Row

QueryRowMaster will use master db

type Stmtx

Stmtx implement sqlx stmt

go
type Stmtx struct {
    // contains filtered or unexported fields
}

func (*Stmtx) Close

go
func (st *Stmtx) Close() error

Close all dbs connection

func (*Stmtx) Exec

go
func (st *Stmtx) Exec(args ...any) (sql.Result, error)

Exec will always go to production

func (*Stmtx) ExecContext

go
func (st *Stmtx) ExecContext(ctx context.Context, args ...any) (sql.Result, error)

ExecContext will always go to production

func (*Stmtx) Get

go
func (st *Stmtx) Get(dest any, args ...any) error

Get will always go to slave

func (*Stmtx) GetContext

go
func (st *Stmtx) GetContext(ctx context.Context, dest any, args ...any) error

GetContext will always go to slave

func (*Stmtx) GetMaster

go
func (st *Stmtx) GetMaster(dest any, args ...any) error

GetMaster will always go to master

func (*Stmtx) GetMasterContext

go
func (st *Stmtx) GetMasterContext(ctx context.Context, dest any, args ...any) error

GetMasterContext will always go to master

func (*Stmtx) MustExec

go
func (st *Stmtx) MustExec(args ...any) sql.Result

MustExec using master database

func (*Stmtx) MustExecContext

go
func (st *Stmtx) MustExecContext(ctx context.Context, args ...any) sql.Result

MustExecContext using master database

func (*Stmtx) Query

go
func (st *Stmtx) Query(args ...any) (*sql.Rows, error)

Query will always go to slave

func (*Stmtx) QueryContext

go
func (st *Stmtx) QueryContext(ctx context.Context, args ...any) (*sql.Rows, error)

QueryContext will always go to slave

func (*Stmtx) QueryMaster

go
func (st *Stmtx) QueryMaster(args ...any) (*sql.Rows, error)

QueryMaster will use master db

func (*Stmtx) QueryMasterContext

go
func (st *Stmtx) QueryMasterContext(ctx context.Context, args ...any) (*sql.Rows, error)

QueryMasterContext will use master db

func (*Stmtx) QueryRow

go
func (st *Stmtx) QueryRow(args ...any) *sql.Row

QueryRow will always go to slave

func (*Stmtx) QueryRowContext

go
func (st *Stmtx) QueryRowContext(ctx context.Context, args ...any) *sql.Row

QueryRowContext will always go to slave

func (*Stmtx) QueryRowMaster

go
func (st *Stmtx) QueryRowMaster(args ...any) *sql.Row

QueryRowMaster will use master db

func (*Stmtx) QueryRowMasterContext

go
func (st *Stmtx) QueryRowMasterContext(ctx context.Context, args ...any) *sql.Row

QueryRowMasterContext will use master db

func (*Stmtx) QueryRowx

go
func (st *Stmtx) QueryRowx(args ...any) *sqlx.Row

QueryRowx will always go to slave

func (*Stmtx) QueryRowxContext

go
func (st *Stmtx) QueryRowxContext(ctx context.Context, args ...any) *sqlx.Row

QueryRowxContext will always go to slave

func (*Stmtx) QueryRowxMaster

go
func (st *Stmtx) QueryRowxMaster(args ...any) *sqlx.Row

QueryRowxMaster will always go to master

func (*Stmtx) QueryRowxMasterContext

go
func (st *Stmtx) QueryRowxMasterContext(ctx context.Context, args ...any) *sqlx.Row

QueryRowxMasterContext will always go to master

func (*Stmtx) Queryx

go
func (st *Stmtx) Queryx(args ...any) (*sqlx.Rows, error)

Queryx will always go to slave

func (*Stmtx) QueryxContext

go
func (st *Stmtx) QueryxContext(ctx context.Context, args ...any) (*sqlx.Rows, error)

QueryxContext will always go to slave

func (*Stmtx) Select

go
func (st *Stmtx) Select(dest any, args ...any) error

Select will always go to slave

func (*Stmtx) SelectContext

go
func (st *Stmtx) SelectContext(ctx context.Context, dest any, args ...any) error

SelectContext will always go to slave

func (*Stmtx) SelectMaster

go
func (st *Stmtx) SelectMaster(dest any, args ...any) error

SelectMaster will always go to master

func (*Stmtx) SelectMasterContext

go
func (st *Stmtx) SelectMasterContext(ctx context.Context, dest any, args ...any) error

SelectMasterContext will always go to master

type TableModelInf

go
type TableModelInf interface {
    TableName() string
}

type VersionMD

go
type VersionMD struct {
    ID          int                          `db:"id" json:"id,omitempty"`     // ID tự tăng
    Name        string                       `db:"name" json:"name,omitempty"` // Format: "<object_name>_<action/object>" eg: tbl_version_init, tbl_version_idx_create_time
    Table       string                       `db:"table_name" json:"table_name,omitempty"`
    Query       string                       `db:"query" json:"query,omitempty"`
    Hash        string                       `db:"hash" json:"hash,omitempty"` // Hash with sha256 -> 32byte ~ 64 characters
    PreFunc     func(tx *sqlx.Tx) error      `db:"-" json:"-"`                 // Nếu Query mà rỗng thì query sẽ được gán bằng Name trước khi Action được thực thi, nếu Query khác rỗng, Name sẽ được bổ sung thêm hậu tố _call_pre_func
    PostFunc    func(dao *VersionsDAO) error `db:"-" json:"-"`                 // Nếu Query mà rỗng thì query sẽ được gán bằng Name sau khi Action được thực thi, nếu Query khác rỗng, Name sẽ được bổ sung thêm hậu tố _call_post_func
    CreatedTime int32                        `db:"created_time" json:"created_time,omitempty"`
    CreatedAt   string                       `db:"created_at" json:"created_at,omitempty"`
    AvailableDB []string                     `db:"-" json:"available_db,omitempty"` // Available DB to run this query: mssql, mysql, postgresql, postgres, sqlite
}

func (*VersionMD) AddAvailableDB

go
func (md *VersionMD) AddAvailableDB(driverName ...string) *VersionMD

func (*VersionMD) HashQuery

go
func (md *VersionMD) HashQuery() *VersionMD

func (*VersionMD) IsAvailableDB

go
func (md *VersionMD) IsAvailableDB(driverName string) bool

Nếu danh sách available db rỗng thì luôn trả về true

type VersionsDAO

go
type VersionsDAO struct {
    *BaseDAO
}

func NewVersionsDAO

go
func NewVersionsDAO(client *Client) *VersionsDAO

func (*VersionsDAO) MigrateExec

go
func (dao *VersionsDAO) MigrateExec(dbNames ...string) error

func (*VersionsDAO) NamedInsert

go
func (dao *VersionsDAO) NamedInsert(executor NamedExecutorInf, ctx context.Context, ver *VersionMD) error

func (*VersionsDAO) QueryAllHashIsExisted

go
func (dao *VersionsDAO) QueryAllHashIsExisted() map[string]bool

func (*VersionsDAO) QueryAllNameIsExisted

go
func (dao *VersionsDAO) QueryAllNameIsExisted() map[string]bool

Generated by gomarkdoc