Documentation
¶
Overview ¶
Package content provider for simple code to connect and access mysql or mssql database datas.
Index ¶
- func QueryColumn[T any](builder *QueryBuilder, cb func([]T)) error
- func TxDelete(tx *sql.Tx, query string, args ...any) error
- func TxExec(tx *sql.Tx, query string, args ...any) error
- func TxExist(tx *sql.Tx, query string, args ...any) error
- func TxInsert(tx *sql.Tx, query string, out *int64, args ...any) error
- func TxInserts(tx *sql.Tx, query string, cnt int, cb InsertCallback) error
- func TxOne(tx *sql.Tx, query string, cb ScanCallback, args ...any) error
- func TxQuery(tx *sql.Tx, query string, cb ScanCallback, args ...any) error
- type BaseBuilder
- func (b *BaseBuilder) Build() (string, []any)
- func (b *BaseBuilder) BuildWheres(wheres Wheres, ins, like string, sep ...string) (string, []any)
- func (b *BaseBuilder) CheckLimit(query string) string
- func (b *BaseBuilder) CheckWhere(wheres string) string
- func (b *BaseBuilder) FormatInserts(values KValues) (string, string, []any)
- func (b *BaseBuilder) FormatJoins(tables Joins) string
- func (b *BaseBuilder) FormatLike(field, filter string) string
- func (b *BaseBuilder) FormatLimit(n int) string
- func (b *BaseBuilder) FormatOrder(field string, desc ...bool) string
- func (b *BaseBuilder) FormatSets(values KValues) (string, []any)
- func (p *BaseBuilder) FormatValues(values KValues) string
- func (b *BaseBuilder) FormatWhereIn(field string, args []any) string
- func (b *BaseBuilder) FormatWheres(wheres Wheres, sep ...string) (string, []any)
- func (b *BaseBuilder) JoinAndWheres(wheres ...string) string
- func (b *BaseBuilder) JoinOrWheres(wheres ...string) string
- func (b *BaseBuilder) JoinWheres(wheres ...string) string
- type BaseProvider
- func (p *BaseProvider) Affected(result sql.Result) (int64, error)
- func (p *BaseProvider) Affects(result sql.Result) int64
- func (p *BaseProvider) Clear(table string) error
- func (p *BaseProvider) Count(query string, args ...any) (int, error)
- func (p *BaseProvider) Delete(query string, args ...any) error
- func (p *BaseProvider) Exec(query string, args ...any) error
- func (p *BaseProvider) ExecResult(query string, args ...any) (int64, error)
- func (p *BaseProvider) Has(query string, args ...any) (bool, error)
- func (p *BaseProvider) Insert(query string, args ...any) (int64, error)
- func (p *BaseProvider) Inserts(query string, cnt int, cb InsertCallback) error
- func (p *BaseProvider) LastID(result sql.Result) int64
- func (p *BaseProvider) MssqlTable(table string, print ...bool) *Table
- func (p *BaseProvider) MysqlTable(table string, print ...bool) *Table
- func (p *BaseProvider) One(query string, cb ScanCallback, args ...any) error
- func (p *BaseProvider) OneDone(query string, outs []any, done DoneCallback, args ...any) error
- func (p *BaseProvider) PrintTable(table *Table)
- func (p *BaseProvider) Query(query string, cb ScanCallback, args ...any) error
- func (p *BaseProvider) Tran(query string, args ...any) error
- func (p *BaseProvider) Trans(cbs ...TransCallback) error
- func (p *BaseProvider) Update(query string, args ...any) error
- type Column
- type DBClient
- type DeleteBuilder
- func (b *DeleteBuilder) Build() (string, []any)
- func (b *DeleteBuilder) Delete() error
- func (b *DeleteBuilder) Exec() error
- func (b *DeleteBuilder) Like(field, filter string) *DeleteBuilder
- func (b *DeleteBuilder) Limit(limit int) *DeleteBuilder
- func (b *DeleteBuilder) Master(master *TableProvider) *DeleteBuilder
- func (b *DeleteBuilder) Reset() *DeleteBuilder
- func (b *DeleteBuilder) Table(table string) *DeleteBuilder
- func (b *DeleteBuilder) WhereIn(field string, args []any) *DeleteBuilder
- func (b *DeleteBuilder) WhereSep(sep string) *DeleteBuilder
- func (b *DeleteBuilder) Wheres(where Wheres) *DeleteBuilder
- type DoneCallback
- type InsertBuilder
- func (b *InsertBuilder) Build() (string, []any)
- func (b *InsertBuilder) Exec() error
- func (b *InsertBuilder) Insert() (int64, error)
- func (b *InsertBuilder) InsertUncheck() error
- func (b *InsertBuilder) Master(master *TableProvider) *InsertBuilder
- func (b *InsertBuilder) Reset() *InsertBuilder
- func (b *InsertBuilder) Table(table string) *InsertBuilder
- func (b *InsertBuilder) Values(row ...KValues) *InsertBuilder
- type InsertCallback
- type Joins
- type KValues
- type Option
- type QueryBuilder
- func (b *QueryBuilder) Build() (string, []any)
- func (b *QueryBuilder) Count() (int, error)
- func (b *QueryBuilder) Has() (bool, error)
- func (b *QueryBuilder) Joins(tables Joins) *QueryBuilder
- func (b *QueryBuilder) Like(field, filter string) *QueryBuilder
- func (b *QueryBuilder) Limit(limit int) *QueryBuilder
- func (b *QueryBuilder) Master(master *TableProvider) *QueryBuilder
- func (b *QueryBuilder) None() (bool, error)
- func (b *QueryBuilder) One(cb ScanCallback) error
- func (b *QueryBuilder) OneDone(done ...DoneCallback) error
- func (b *QueryBuilder) OrderBy(field string, desc ...bool) *QueryBuilder
- func (b *QueryBuilder) Outs(outs ...any) *QueryBuilder
- func (b *QueryBuilder) Query(cb ScanCallback) error
- func (b *QueryBuilder) Reset() *QueryBuilder
- func (b *QueryBuilder) Table(table string) *QueryBuilder
- func (b *QueryBuilder) Tags(tag ...string) *QueryBuilder
- func (b *QueryBuilder) WhereIn(field string, args []any) *QueryBuilder
- func (b *QueryBuilder) WhereSep(sep string) *QueryBuilder
- func (b *QueryBuilder) Wheres(where Wheres) *QueryBuilder
- type SQLBuilder
- type ScanCallback
- type Table
- type TableProvider
- func (p *TableProvider) Count(builder *QueryBuilder) (int, error)
- func (p *TableProvider) Delete(builder *DeleteBuilder) error
- func (p *TableProvider) Deleter() *DeleteBuilder
- func (p *TableProvider) Exec(builder SQLBuilder) error
- func (p *TableProvider) ExecResult(builder SQLBuilder) (int64, error)
- func (p *TableProvider) Has(builder *QueryBuilder) (bool, error)
- func (p *TableProvider) Insert(builder *InsertBuilder) (int64, error)
- func (p *TableProvider) InsertUncheck(builder *InsertBuilder) error
- func (p *TableProvider) Inserter() *InsertBuilder
- func (p *TableProvider) None(builder *QueryBuilder) (bool, error)
- func (p *TableProvider) One(builder *QueryBuilder, cb ScanCallback) error
- func (p *TableProvider) OneDone(builder *QueryBuilder, done DoneCallback, outs ...any) error
- func (p *TableProvider) OneOuts(builder *QueryBuilder, outs ...any) error
- func (p *TableProvider) Querier() *QueryBuilder
- func (p *TableProvider) Query(builder *QueryBuilder, cb ScanCallback) error
- func (p *TableProvider) Setup(client DBClient, opts ...Option)
- func (p *TableProvider) Update(builder *UpdateBuilder) error
- func (p *TableProvider) Updater() *UpdateBuilder
- type TableSetup
- type TransCallback
- type UpdateBuilder
- func (b *UpdateBuilder) Build() (string, []any)
- func (b *UpdateBuilder) Exec() error
- func (b *UpdateBuilder) Like(field, filter string) *UpdateBuilder
- func (b *UpdateBuilder) Master(master *TableProvider) *UpdateBuilder
- func (b *UpdateBuilder) Reset() *UpdateBuilder
- func (b *UpdateBuilder) Table(table string) *UpdateBuilder
- func (b *UpdateBuilder) Update() error
- func (b *UpdateBuilder) Values(row KValues) *UpdateBuilder
- func (b *UpdateBuilder) WhereIn(field string, args []any) *UpdateBuilder
- func (b *UpdateBuilder) WhereSep(sep string) *UpdateBuilder
- func (b *UpdateBuilder) Wheres(where Wheres) *UpdateBuilder
- type Wheres
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 TxExist ¶
Excute transaction step to check if data exist, it wil return invar.ErrNotFound if unexist any records, or return nil when exist results.
func TxInserts ¶
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]) })
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 ¶
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...) })
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 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 ¶
A callback for format insert values as string to insert record.
type Joins ¶
Table name with join alias for multi-table join.
type KValues ¶
Fields name and referened values for insert or update.
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 ¶
A interface implement by CUDA builder to build a sql string for database access.
type ScanCallback ¶
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 ¶
A interface for setup TableProvider instance.
type TransCallback ¶
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")