pd

package
v0.0.0-...-7bcce61 Latest Latest
Warning

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

Go to latest
Published: Jul 17, 2025 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package content provider for simple code to connect and access mysql or mssql database datas.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func QueryColumn

func QueryColumn[T any](builder *QueryBuilder, cb func([]T)) error

Query the target column values and return array by callback.

func TxDelete

func TxDelete(tx *sql.Tx, query string, args ...any) error

Excute transaction step to delete record and check result.

func TxExec

func TxExec(tx *sql.Tx, query string, args ...any) error

Excute transaction step to update, insert, or delete datas without check result.

func TxExist

func TxExist(tx *sql.Tx, query string, args ...any) error

Excute transaction step to check if data exist, it wil return invar.ErrNotFound if unexist any records, or return nil when exist results.

func TxInsert

func TxInsert(tx *sql.Tx, query string, out *int64, args ...any) error

Excute transaction step to insert a new record and return inserted id.

func TxInserts

func TxInserts(tx *sql.Tx, query string, cnt int, cb InsertCallback) error

Excute transaction step to insert multiple records.

query := "INSERT sametable (field1, field2) VALUES"
err := mvc.TxInserts(tx, query, len(vs), func(index int) string {
	return fmt.Sprintf("(%v, %v)", v1, vs[index])
	// return fmt.Sprintf("('%s', '%s')", v1, vs[index])
})

func TxOne

func TxOne(tx *sql.Tx, query string, cb ScanCallback, args ...any) error

Excute transaction step to query single data and get result in scan callback.

func TxQuery

func TxQuery(tx *sql.Tx, query string, cb ScanCallback, args ...any) error

Excute transaction step to query datas, and fetch result in scan callback.

Types

type BaseBuilder

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

The base builder to support util methods to simple build a sql string for database CUDA actions.

func (*BaseBuilder) Build

func (b *BaseBuilder) Build() (string, []any)

Empty build method, override by CUDA builders.

func (*BaseBuilder) BuildWheres

func (b *BaseBuilder) BuildWheres(wheres Wheres, ins, like string, sep ...string) (string, []any)

Build where conditions, append where ins, like conditions if exist.

  • WHERE wheres
  • WHERE wheres AND field IN (v1,v2...)
  • WHERE wheres AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'
  • WHERE field IN (v1,v2...) AND field2 LIKE '%%filter%%'
  • WHERE field LIKE '%%filter%%'

Use FormatWheres(), FormatWhereIn() to format Wheres data or where in condition.

func (*BaseBuilder) CheckLimit

func (b *BaseBuilder) CheckLimit(query string) string

Ensure query string must tail 'LIMIT 1' for query the top one record.

func (*BaseBuilder) CheckWhere

func (b *BaseBuilder) CheckWhere(wheres string) string

Ensure where condition prefixed 'WHERE' keyword when not empty.

func (*BaseBuilder) FormatInserts

func (b *BaseBuilder) FormatInserts(values KValues) (string, string, []any)

Fetch the KValues items and return the joined fields, ? holders, and args.

values := KValues{
	"":       123456,   // Filter out empty field
	"Age":    16,
	"Male":   true,
	"Name":   "ZhangSan",
	"Height": 176.8,
	"Secure": nil,      // Filter out nil value
}
// => Age=?, Male=?, Name=?, Height=?
// => ?,?,?,?
// => []any{16, true, "ZhangSan", 176.8}

func (*BaseBuilder) FormatJoins

func (b *BaseBuilder) FormatJoins(tables Joins) string

Format table joins to string for multi-table query, it will filter out the empty table or alias join datas.

tables := provider.Joins{
	"account":"a", "profile":"b", "other":"", // the 'other' table will filter out!
}
joins := builder.FormatJoins(tables)
fmt.Println(joins) // => account AS a, profile AS b

func (*BaseBuilder) FormatLike

func (b *BaseBuilder) FormatLike(field, filter string) string

Format like condition to string.

  • output string: field LIKE '%%filter%%'

func (*BaseBuilder) FormatLimit

func (b *BaseBuilder) FormatLimit(n int) string

Format limit condition to string.

  • output string: LIMIT n

func (*BaseBuilder) FormatOrder

func (b *BaseBuilder) FormatOrder(field string, desc ...bool) string

Format order by condition to string.

  • desc = true : ORDER BY field DESC
  • desc = false: ORDER BY field ASC

func (*BaseBuilder) FormatSets

func (b *BaseBuilder) FormatSets(values KValues) (string, []any)

Fetch the KValues items and return the joined fields and args.

values := KValues{
	"":       123456,   // Filter out empty field
	"Age":    16,
	"Male":   true,
	"Name":   "ZhangSan",
	"Height": 176.8,
	"Secure": nil,      // Filter out nil value
}
// => Age=?, Male=?, Name=?, Height=?
// => []any{16, true, "ZhangSan", 176.8}

func (*BaseBuilder) FormatValues

func (p *BaseBuilder) FormatValues(values KValues) string

Fetch the KValues items and return the formated sets string.

values := KValues{
	"":       123456,   // Filter out empty field
	"Age":    16,
	"Male":   true,
	"Name":   "ZhangSan",
	"Height": 176.8,
	"Secure": nil,      // Filter out nil value
}
// => Age=16, Male=true, Name='ZhangSan', Height=176.8

func (*BaseBuilder) FormatWhereIn

func (b *BaseBuilder) FormatWhereIn(field string, args []any) string

Format where in condition to string without perfix 'WHERE' keyword.

  • int number args : field IN (1,2,3)
  • float number args: field IN (1.2,2.3,3.45)
  • string args : field IN ('1','2','3')

WARNING: Here will filter out the nil values in args.

func (*BaseBuilder) FormatWheres

func (b *BaseBuilder) FormatWheres(wheres Wheres, sep ...string) (string, []any)

Format where conditions to string with args, by default join conditions with AND connector, but can change to OR or empty connector by set 'connector' param.

  • not set or set AND : use AND connector.
  • set OR : use OR connector.
  • set empty string : tail connector inside where condition like 'condition AND', 'condition OR'.

WARNING: Here will filter out the nil values in wheres.

func (*BaseBuilder) JoinAndWheres

func (b *BaseBuilder) JoinAndWheres(wheres ...string) string

Join the given where conditions with input AND connectors.

func (*BaseBuilder) JoinOrWheres

func (b *BaseBuilder) JoinOrWheres(wheres ...string) string

Join the given where conditions with input OR connectors.

func (*BaseBuilder) JoinWheres

func (b *BaseBuilder) JoinWheres(wheres ...string) string

Join the given where conditions without input AND and OR connectors.

type BaseProvider

type BaseProvider struct {
	Builder *BaseBuilder // Base builder as utils tools.
	// contains filtered or unexported fields
}

Base provider for simple access database datas.

func NewProvider

func NewProvider(client DBClient) *BaseProvider

Create a BaseProvider with given database client.

func (*BaseProvider) Affected

func (p *BaseProvider) Affected(result sql.Result) (int64, error)

Get update or delete record counts.

func (*BaseProvider) Affects

func (p *BaseProvider) Affects(result sql.Result) int64

Get update or delete record counts without error check.

func (*BaseProvider) Clear

func (p *BaseProvider) Clear(table string) error

Clear all records for the given table.

func (*BaseProvider) Count

func (p *BaseProvider) Count(query string, args ...any) (int, error)

Execute query string to count records on given conditions, it will return 0 when notfound anyone.

Use the QueryBuilder to build a query string and args.

func (*BaseProvider) Delete

func (p *BaseProvider) Delete(query string, args ...any) error

Execute query string to delete records on given conditions, it will return invar.ErrNotChanged error when none deleted.

Use the DeleteBuilder to build a query string and args.

func (*BaseProvider) Exec

func (p *BaseProvider) Exec(query string, args ...any) error

Execute query string without any results to get, it useful for update or delete record datas.

Use UpdateBuilder or DeleteBuilder to build a query string and args.

func (*BaseProvider) ExecResult

func (p *BaseProvider) ExecResult(query string, args ...any) (int64, error)

Execute query string and return the affected rows count, it will return invar.ErrNotChanged error when none updated or deleted.

Use UpdateBuilder or DeleteBuilder to build a query string and args.

func (*BaseProvider) Has

func (p *BaseProvider) Has(query string, args ...any) (bool, error)

Execute query string to check target record whether exist, it will auto append 'LIMIT 1' at query tail if not specified.

Use the QueryBuilder to build a query string and args.

func (*BaseProvider) Insert

func (p *BaseProvider) Insert(query string, args ...any) (int64, error)

Execute query string to insert a row into target table which contain the 'auto increment' field of id as primary key.

Use InsertBuilder to build a query string and args.

func (*BaseProvider) Inserts

func (p *BaseProvider) Inserts(query string, cnt int, cb InsertCallback) error

Execute query string to insert multiple rows into target table with a callback for format row values, it insert all rows at one time to provide high-performance than call provider.Insert() one by one.

query := "INSERT table (field1, field2) VALUES"
err := provider.Inserts(query, len(vs), func(index int) string {
	return fmt.Sprintf("(%v, %v)", v1, vs[index])
	// return fmt.Sprintf("('%s', '%s')", v1, vs[index])
})
// => INSERT table (field1, field2) VALUES (1,2),(3,4)..
// => INSERT table (field1, field2) VALUES ('1','2'),('3','4')..

func (*BaseProvider) LastID

func (p *BaseProvider) LastID(result sql.Result) int64

Get the last inserted record id without error check.

func (*BaseProvider) MssqlTable

func (p *BaseProvider) MssqlTable(table string, print ...bool) *Table

Get target table structs by name from mssql database.

func (*BaseProvider) MysqlTable

func (p *BaseProvider) MysqlTable(table string, print ...bool) *Table

Get target table structs by name from mysql databse.

func (*BaseProvider) One

func (p *BaseProvider) One(query string, cb ScanCallback, args ...any) error

Execute query string to get the top one record, it will auto append 'LIMIT 1' as tail in query string for high-performance.

Use QueryBuilder to build a query string and agrs.

func (*BaseProvider) OneDone

func (p *BaseProvider) OneDone(query string, outs []any, done DoneCallback, args ...any) error

Execute query string to get the top one record with outs non-nil params, it will auto append 'LIMIT 1' as tail in query string for high-performance.

Use QueryBuilder to build a query string and agrs.

func (*BaseProvider) PrintTable

func (p *BaseProvider) PrintTable(table *Table)

Print target table structs.

table := provider.MysqlTable("config", true)
provider.PrintTable(table)

func (*BaseProvider) Query

func (p *BaseProvider) Query(query string, cb ScanCallback, args ...any) error

Execute query string with scan callback to read result records.

Use QueryBuilder to build a query string and agrs.

func (*BaseProvider) Tran

func (p *BaseProvider) Tran(query string, args ...any) error

Execute query string for single transaction, it will rollback when handle failed.

Use the anyone builder to build a query string and args.

func (*BaseProvider) Trans

func (p *BaseProvider) Trans(cbs ...TransCallback) error

Excute multiple transactions, it will rollback when cased one error.

// Excute 3 transactions in callback with different query1 ~ 3
err := provider.Trans(
	func(tx *sql.Tx) error { return provider.TxQuery(tx, query1, func(rows *sql.Rows) error {
			// Fetch all rows to get result datas...
		}, args...) },
	func(tx *sql.Tx) error { return provider.TxExec(tx, query2, args...) },
	func(tx *sql.Tx) error { return provider.TxExec(tx, query3, args...) })

func (*BaseProvider) Update

func (p *BaseProvider) Update(query string, args ...any) error

Execute query string to update target records by where condition, it will return invar.ErrNotChanged error when none updated.

Use UpdateBuilder to build a query string and args.

type Column

type Column struct {
	Field string // Column name
	Type  string // Field value type
	Null  string // Flag for indicate field if null
	Def   string // Field default value
	Key   string // [Only MySQL] Primary key, foreign key or normal field
	Extra string // [Only MySQL] Extra infos
}

Table column datas.

type DBClient

type DBClient interface {
	DB() *sql.DB    // Return database connected client.
	Connect() error // Connect client with database server.
	Close() error   // Disconect and close database client
}

A interface for database client implement.

type DeleteBuilder

type DeleteBuilder struct {
	BaseBuilder
	// contains filtered or unexported fields
}

Build a query string for sql delete.

DELETE FROM table
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'
	LIMIT limit.

See QueryBuilder, InsertBuilder, UpdateBuilder.

func NewDelete

func NewDelete(table string) *DeleteBuilder

Create a DeleteBuilder instance to build a query string.

func (*DeleteBuilder) Build

func (b *DeleteBuilder) Build() (string, []any)

Build the delete action sql string and args for provider to delete datas.

DELETE FROM table
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'
	LIMIT limit.

func (*DeleteBuilder) Delete

func (b *DeleteBuilder) Delete() error

func (*DeleteBuilder) Exec

func (b *DeleteBuilder) Exec() error

func (*DeleteBuilder) Like

func (b *DeleteBuilder) Like(field, filter string) *DeleteBuilder

Specify the like condition for query.

builder.Like("acc", "zhang") // => acc LIKE '%%zhang%%'

func (*DeleteBuilder) Limit

func (b *DeleteBuilder) Limit(limit int) *DeleteBuilder

Specify the limit result for query.

builder.Limit(20) // => LIMIT 20

func (*DeleteBuilder) Master

func (b *DeleteBuilder) Master(master *TableProvider) *DeleteBuilder

Specify master provider.

func (*DeleteBuilder) Reset

func (b *DeleteBuilder) Reset() *DeleteBuilder

Reset builder datas for next prepare and build.

func (*DeleteBuilder) Table

func (b *DeleteBuilder) Table(table string) *DeleteBuilder

Specify the target table for query.

func (*DeleteBuilder) WhereIn

func (b *DeleteBuilder) WhereIn(field string, args []any) *DeleteBuilder

Specify the where in condition with field and args for query.

builder.WhereIn("id", []any{1, 2}) // => WHERE id IN (1, 2)

func (*DeleteBuilder) WhereSep

func (b *DeleteBuilder) WhereSep(sep string) *DeleteBuilder

Specify the where in condition with field and args for query.

func (*DeleteBuilder) Wheres

func (b *DeleteBuilder) Wheres(where Wheres) *DeleteBuilder

Specify the where conditions and args for query.

where = provider.Wheres{
	"acc=?":"123", "age>=?":20, "role<>?":"admin",
}
// => WHERE acc=? AND age>=? AND role<>?
// => args ("123", 20, "admin")

type DoneCallback

type DoneCallback func()

A callback for single record query finaly notify.

type InsertBuilder

type InsertBuilder struct {
	BaseBuilder
	// contains filtered or unexported fields
}

Build a query string for sql insert.

INSERT table (tags) VALUES (?, ?, ?)...

See QueryBuilder, UpdateBuilder, DeleteBuilder.

func NewInsert

func NewInsert(table string) *InsertBuilder

Create a InsertBuilder instance to build a query string.

func (*InsertBuilder) Build

func (b *InsertBuilder) Build() (string, []any)

Build the insert action sql string and args for provider to insert datas.

INSERT table (tags) VALUES (?, ?, ?)...

func (*InsertBuilder) Exec

func (b *InsertBuilder) Exec() error

func (*InsertBuilder) Insert

func (b *InsertBuilder) Insert() (int64, error)

func (*InsertBuilder) InsertUncheck

func (b *InsertBuilder) InsertUncheck() error

func (*InsertBuilder) Master

func (b *InsertBuilder) Master(master *TableProvider) *InsertBuilder

Specify master provider.

func (*InsertBuilder) Reset

func (b *InsertBuilder) Reset() *InsertBuilder

Reset builder datas for next prepare and build.

func (*InsertBuilder) Table

func (b *InsertBuilder) Table(table string) *InsertBuilder

Specify the target table for query.

func (*InsertBuilder) Values

func (b *InsertBuilder) Values(row ...KValues) *InsertBuilder

Specify the values of row to insert.

1. Set signle one row for provider.Insert() insert a record.

row := KValues{
	"":       123456,   // Filter out empty field
	"Age":    16,
	"Male":   true,
	"Name":   "ZhangSan",
	"Height": 176.8,
	"Secure": nil,      // Filter out nil value
}
// => Age=?, Male=?, Name=?, Height=?
// => ?,?,?,?
// => []any{16, true, "ZhangSan", 176.8}

2. Set multiple rows for provider.Inserts() to insert records at one time.

rows := []KValues{
	{ "Age": 16, "Name": "ZhangSan", "Height": 176.8 },
	{ "Age": 15, "Name": "LiXu", "Height": 168.5 },
}
// => (Age=16,Name="ZhangSan",Height=176.8),(Age=15,Name="LiXu",Height=168.5)

type InsertCallback

type InsertCallback func(index int) string

A callback for format insert values as string to insert record.

type Joins

type Joins map[string]string

Table name with join alias for multi-table join.

func (*Joins) Add

func (t *Joins) Add(table, alias string) *Joins

Append a table-alias into table Joins.

func (*Joins) Remove

func (t *Joins) Remove(table string) *Joins

Remove target table out from table Joins.

type KValues

type KValues map[string]any

Fields name and referened values for insert or update.

func (*KValues) Add

func (v *KValues) Add(key string, value any) *KValues

Append a key-value into KValues.

func (*KValues) Remove

func (v *KValues) Remove(key string) *KValues

Remove target key-value out from KValues.

type Option

type Option func(provider *TableProvider)

The setter for set TableProvider fields.

func WithTable

func WithTable(table string) Option

Specify the table name.

type QueryBuilder

type QueryBuilder struct {
	BaseBuilder
	// contains filtered or unexported fields
}

Build a query string for sql query.

SELECT tags FROM table
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'
	ORDER BY order DESC
	LIMIT limit.

See InsertBuilder, UpdateBuilder, DeleteBuilder.

func NewQuery

func NewQuery(table string) *QueryBuilder

Create a QueryBuilder instance to build a query string.

func (*QueryBuilder) Build

func (b *QueryBuilder) Build() (string, []any)

Build the query action sql string and args for provider to query datas.

SELECT tags FROM [table | table1 AS a, table2 AS b, ...]
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'
	ORDER BY order DESC
	LIMIT limit.

func (*QueryBuilder) Count

func (b *QueryBuilder) Count() (int, error)

func (*QueryBuilder) Has

func (b *QueryBuilder) Has() (bool, error)

func (*QueryBuilder) Joins

func (b *QueryBuilder) Joins(tables Joins) *QueryBuilder

Specify the table-alias joins for query.

func (*QueryBuilder) Like

func (b *QueryBuilder) Like(field, filter string) *QueryBuilder

Specify the like condition for query.

builder.Like("acc", "zhang") // => acc LIKE '%%zhang%%'

func (*QueryBuilder) Limit

func (b *QueryBuilder) Limit(limit int) *QueryBuilder

Specify the limit result for query.

builder.Limit(20) // => LIMIT 20

func (*QueryBuilder) Master

func (b *QueryBuilder) Master(master *TableProvider) *QueryBuilder

Specify master table provider.

func (*QueryBuilder) None

func (b *QueryBuilder) None() (bool, error)

func (*QueryBuilder) One

func (b *QueryBuilder) One(cb ScanCallback) error

func (*QueryBuilder) OneDone

func (b *QueryBuilder) OneDone(done ...DoneCallback) error

Query the top one record and return the results without scaner callback, it canbe set the finally done callback called when result success read.

func (*QueryBuilder) OrderBy

func (b *QueryBuilder) OrderBy(field string, desc ...bool) *QueryBuilder

Specify the order by condition for query.

builder.OrderBy("id")          // => ORDER BY id DESC
builder.OrderBy("slug", false) // => ORDER BY slug ASC

func (*QueryBuilder) Outs

func (b *QueryBuilder) Outs(outs ...any) *QueryBuilder

Specify the target output params for single query, the outs length must same as Tags length.

func (*QueryBuilder) Query

func (b *QueryBuilder) Query(cb ScanCallback) error

func (*QueryBuilder) Reset

func (b *QueryBuilder) Reset() *QueryBuilder

Reset builder datas for next prepare and build.

func (*QueryBuilder) Table

func (b *QueryBuilder) Table(table string) *QueryBuilder

Specify the target table for query.

func (*QueryBuilder) Tags

func (b *QueryBuilder) Tags(tag ...string) *QueryBuilder

Specify the target output fields name for query.

func (*QueryBuilder) WhereIn

func (b *QueryBuilder) WhereIn(field string, args []any) *QueryBuilder

Specify the where in condition with field and args for query.

builder.WhereIn("id", []any{1, 2}) // => WHERE id IN (1, 2)

func (*QueryBuilder) WhereSep

func (b *QueryBuilder) WhereSep(sep string) *QueryBuilder

Specify the where in condition with field and args for query.

func (*QueryBuilder) Wheres

func (b *QueryBuilder) Wheres(where Wheres) *QueryBuilder

Specify the where conditions and args for query.

where = provider.Wheres{
	"acc=?":"123", "age>=?":20, "role<>?":"admin",
}
// => WHERE acc=? AND age>=? AND role<>?
// => args ("123", 20, "admin")

type SQLBuilder

type SQLBuilder interface {
	Build() (string, []any) // Build sql string and return args.
}

A interface implement by CUDA builder to build a sql string for database access.

type ScanCallback

type ScanCallback func(rows *sql.Rows) error

A callback for scan query result records, it will interrupt scanning when callback return error.

type Table

type Table struct {
	Columns []*Column // Table column infos
	Spans   [6]int    // spans lenght for print table
}

Table datas for describe table structures.

type TableProvider

type TableProvider struct {
	BaseProvider
	// contains filtered or unexported fields
}

Table provider for using builder to build query string and args for database datas access.

Usage: Define the custom provider as follow code.

// define the custom provider.
type SampleProvider struct {
	provider.TableProvider
}
s := &SampleProvider{*mysqlc.GetTabler(
	provider.WithTable("sample"), //set table name.
)}

Use mysqlc.GetTabler(), mysqlc.GetTabler() to create TableProvider with connected mysql or mssql database client.

func NewTabler

func NewTabler(client DBClient, opts ...Option) *TableProvider

Create a TableProvider with given database client.

func (*TableProvider) Count

func (p *TableProvider) Count(builder *QueryBuilder) (int, error)

Count records by the given builder to build a query string, it will return 0 when notfound anyone.

Use BaseProvider.Count() method to direct execute query string.

func (*TableProvider) Delete

func (p *TableProvider) Delete(builder *DeleteBuilder) error

Delete records by the given builder to build a query string, it will return invar.ErrNotChanged error when none deleted.

Use BaseProvider.Delete() method to direct execute query string.

func (*TableProvider) Deleter

func (p *TableProvider) Deleter() *DeleteBuilder

func (*TableProvider) Exec

func (p *TableProvider) Exec(builder SQLBuilder) error

Execute the query string builded from given QueryBuilder, InsertBuilder, UpdateBuilder or DeleteBuilder, it not check the affected row counts.

Use BaseProvider.Exec() method to direct execute query string.

func (*TableProvider) ExecResult

func (p *TableProvider) ExecResult(builder SQLBuilder) (int64, error)

Execute the query string builded from given QueryBuilder, InsertBuilder, UpdateBuilder or DeleteBuilder, and check the affected row counts.

Use BaseProvider.Exec() method to direct execute query string.

func (*TableProvider) Has

func (p *TableProvider) Has(builder *QueryBuilder) (bool, error)

Check the target record whether exist by the given QueryBuilder to build query string.

Use None() method to check whether unexist.

func (*TableProvider) Insert

func (p *TableProvider) Insert(builder *InsertBuilder) (int64, error)

Insert the given rows into target table and return inserted row id of single value, or inserted rows count of multiple values.

Use BaseProvider.Insert() method to direct execute query string.

func (*TableProvider) InsertUncheck

func (p *TableProvider) InsertUncheck(builder *InsertBuilder) error

Insert the given rows into target table without check insert counts.

Use BaseProvider.Insert() method to direct execute query string.

func (*TableProvider) Inserter

func (p *TableProvider) Inserter() *InsertBuilder

func (*TableProvider) None

func (p *TableProvider) None(builder *QueryBuilder) (bool, error)

Check the target record whether unexist by the given QueryBuilder to build query string.

Use Has() method to check has result.

func (*TableProvider) One

func (p *TableProvider) One(builder *QueryBuilder, cb ScanCallback) error

Query one record by given builder builded query string, and read datas from scan callback.

Use BaseProvider.One() method to direct execute query string.

func (*TableProvider) OneDone

func (p *TableProvider) OneDone(builder *QueryBuilder, done DoneCallback, outs ...any) error

Query one record by given builder builded query string, and return the result datas by given outs params, finally call done callback to translate the outs datas before provider method returned.

Use BaseProvider.OneDone() method to direct execute query string.

func (*TableProvider) OneOuts

func (p *TableProvider) OneOuts(builder *QueryBuilder, outs ...any) error

Query one record by given builder builded query string, and return the result datas by given outs params.

Use BaseProvider.OneDone() method to direct execute query string.

func (*TableProvider) Querier

func (p *TableProvider) Querier() *QueryBuilder

func (*TableProvider) Query

func (p *TableProvider) Query(builder *QueryBuilder, cb ScanCallback) error

Query records by given builder builded query string, and read datas from scan callback.

Use BaseProvider.Query() method to direct execute query string.

func (*TableProvider) Setup

func (p *TableProvider) Setup(client DBClient, opts ...Option)

Setup TableProvider with database client and options.

func (*TableProvider) Update

func (p *TableProvider) Update(builder *UpdateBuilder) error

Update target record by given builder to build a query string, it will return invar.ErrNotChanged error when none updated.

Use BaseProvider.Update() method to direct execute query string.

func (*TableProvider) Updater

func (p *TableProvider) Updater() *UpdateBuilder

type TableSetup

type TableSetup interface {
	Setup(client DBClient, opts ...Option)
}

A interface for setup TableProvider instance.

type TransCallback

type TransCallback func(tx *sql.Tx) error

A callback for handle transaction by call provider.Trans().

type UpdateBuilder

type UpdateBuilder struct {
	BaseBuilder
	// contains filtered or unexported fields
}

Build a query string for sql update.

UPDATE table
	SET v1=?, v2=?, v3=?...
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'

See QueryBuilder, InsertBuilder, DeleteBuilder.

func NewUpdate

func NewUpdate(table string) *UpdateBuilder

Create a UpdateBuilder instance to build a query string.

func (*UpdateBuilder) Build

func (b *UpdateBuilder) Build() (string, []any)

Build the update action sql string and args for provider to update datas.

UPDATE table
	SET v1=?, v2=?, v3=?...
	WHERE wherer AND field IN (v1,v2...) AND field2 LIKE '%%filter%%'

func (*UpdateBuilder) Exec

func (b *UpdateBuilder) Exec() error

func (*UpdateBuilder) Like

func (b *UpdateBuilder) Like(field, filter string) *UpdateBuilder

Specify the like condition for query.

builder.Like("acc", "zhang") // => acc LIKE '%%zhang%%'

func (*UpdateBuilder) Master

func (b *UpdateBuilder) Master(master *TableProvider) *UpdateBuilder

Specify master provider.

func (*UpdateBuilder) Reset

func (b *UpdateBuilder) Reset() *UpdateBuilder

Reset builder datas for next prepare and build.

func (*UpdateBuilder) Table

func (b *UpdateBuilder) Table(table string) *UpdateBuilder

Specify the target table for query.

func (*UpdateBuilder) Update

func (b *UpdateBuilder) Update() error

func (*UpdateBuilder) Values

func (b *UpdateBuilder) Values(row KValues) *UpdateBuilder

Specify the values of row to update.

values := KValues{
	"":       123456,   // Filter out empty field
	"Age":    16,
	"Male":   true,
	"Name":   "ZhangSan",
	"Height": 176.8,
	"Secure": nil,      // Filter out nil value
}
// => SET Age=?, Male=?, Name=?, Height=?
// => values: []any{16, true, "ZhangSan", 176.8}

func (*UpdateBuilder) WhereIn

func (b *UpdateBuilder) WhereIn(field string, args []any) *UpdateBuilder

Specify the where in condition with field and args for query.

builder.WhereIn("id", []any{1, 2}) // => WHERE id IN (1, 2)

func (*UpdateBuilder) WhereSep

func (b *UpdateBuilder) WhereSep(sep string) *UpdateBuilder

Specify the where in condition with field and args for query.

func (*UpdateBuilder) Wheres

func (b *UpdateBuilder) Wheres(where Wheres) *UpdateBuilder

Specify the where conditions and args for query.

where = provider.Wheres{
	"acc=?":"123", "age>=?":20, "role<>?":"admin",
}
// => WHERE acc=? AND age>=? AND role<>?
// => args ("123", 20, "admin")

type Wheres

type Wheres map[string]any

Fields name and referened values for construct where condition string.

func (*Wheres) Add

func (w *Wheres) Add(condition string, arg any) *Wheres

Append a where condition into Wheres.

func (*Wheres) Remove

func (w *Wheres) Remove(condition string) *Wheres

Remove target where condition out from Wheres.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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