lsql

package module
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2022 License: MIT Imports: 18 Imported by: 0

README

lsql

license

init lsql

	path := "./log/go.log"
	writer, _ := rotatelogs.New(
		path+".%Y-%m-%d",
		rotatelogs.WithLinkName(path),
		rotatelogs.WithMaxAge(time.Duration(365*24)*time.Hour),
		rotatelogs.WithRotationTime(time.Duration(24)*time.Hour),
	)
	newLogger := log.New(writer, "\r\n", log.LstdFlags)

	var dbName = pg.DbName

	pgConf := lsql.PgConf{
		Host:     pg.Ip,
		Port:     pg.Port,
		DbName:   pg.dbName,
		User:     pg.User,
		Password: pg.Pwd,
		Other:    "sslmode=disable TimeZone=Asia/Shanghai",
	}
	poolConf := lsql.PoolConf{
		MaxIdleCount: 10,
		MaxOpen:      100,
		MaxLifetime:  time.Hour,
		Logger:       newLogger,
	}
	ormConf := lsql.OrmConf{
		TableNamePrefix: "t_",
		PrimaryKeyNames: []string{"id"},
	}

	db := lsql.MustConnect(&pgConf, &poolConf).OrmConf(&ormConf)

type User struct {
	ID   types.UUID `json:"id"  tableName:"public.t_user"`
	Name string     `json:"info"`
	Age  int        `json:"age"`
}

type NullUser struct {
	ID   *types.UUID `json:"id"  tableName:"public.t_user"`
	Name *string     `json:"info"`
	Age  *int        `json:"age"`
}

create
	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	// create 是引用,会返回id
	num, err := db.Insert(&user)
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	//return id
	fmt.Println(user.ID)
	
	//-----------------------

	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	// create 不是引用,不会返回id
	num, err := db.Insert(user)
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	// nil
	fmt.Println(user.ID)

###create or update

	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	// 创建或更新,根据主键
	num, err := db.InsertOrUpdate(&user).ByPrimaryKey()
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	//------------------
	
	user := NullUser{
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	// 创建或更新,根据 name,age组合的唯一索引;mysql不支持此功能
	num, err := db.InsertOrUpdate(&user).ByUnique([]string{"name","age"})
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)

update
	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	//根据主键更新
	num, err := db.Update(&user).ByPrimaryKey()
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	
	//----------------
	
	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	//根据条件更新
	num, err := db.Update(&user).ByModel(NullUser{
		Name: types.NewString("tom"),
	})
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	//-------------------
	
	
	user := NullUser{
		ID:   types.NewV4P(),
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}
	
	//使用条件构造器
	num, err := db.Update(&user).ByWhere(new(lorm.WhereBuilder).
		Eq("id", user.ID,true).
		NoLike("age", *user.Name, user.Name != nil).
		Ne("age", user.Age,false))
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)

delete
 
	
	//根据主键删除
	num, err := db.Delete(User{}).ByPrimaryKey(id)
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	
	//----------------
	
 
	//根据条件删除
	num, err := db.Delete(User{}).ByModel(NullUser{
		Name: types.NewString("tom"),
	})
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	//-------------------
	
	 
	
	//使用条件构造器
	num, err := db.Delete(User{}).ByWhere(new(lsql.WhereBuilder).
		Eq("id", user.ID,true).
		NoLike("age", *user.Name, user.Name != nil).
		Ne("age", user.Age,false))
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)

###select

	user := User{}
	num, err := db.Select(User{}).ByPrimaryKey(id).ScanOne(&user)
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	
	fmt.Println(user)
	//-----------------
	
	users := make([]User,0)
	num, err := db.Select(User{}).ByPrimaryKey(id1,id2,id3).ScanList(&users)
	if err != nil {
		return err
	}
	// num=1
	fmt.Println(num)
	
	fmt.Println(user)
	//-----------------
	
	
	users := make([]User, 0)
	num, err := db.Select(User{}).ByModel(NullUser{
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}).ScanList(&users)
	if err != nil {
		return err
	}
	// num 查询的数据个数
	fmt.Println(num)
	
	fmt.Println(users)
	//----------------
	
	user := User{}
	//随机获取一个
	num, err := db.Select(User{}).ByModel(NullUser{
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	}).ScanFirst(&user)
	if err != nil {
		return err
	}
	// num 查询的数据个数
	fmt.Println(num)
	
	fmt.Println(user)
	//-----------------------
	
	
	has, err := db.Select(User{}).ByModel(NullUser{
		Name: types.NewString("tom"),
		Age:  types.NewInt(12),
	})
	if err != nil {
		return err
	}
	// has 查询是否存在数据
	fmt.Println(num)
	
	
	
	//----------------------------
	has, err := db.Has(User{}).ByWhere(new(lsql.WhereBuilder).
		Eq("id", user.ID, true).
		NoLike("age", *user.Name, user.Name != nil).
		Ne("age", user.Age, false))
	if err != nil {
		return err
	}
	// has 查询是否存在数据
	fmt.Println(has)

	
	
	
	has, err := db.Has(User{}).ByWhere(new(lsql.WhereBuilder).
		Eq("id", user.ID, true).
		NoLike("age", *user.Name, user.Name != nil).
		Ne("age", user.Age, false))
	if err != nil {
		return err
	}
	// num 查询是否存在数据
	fmt.Println(has)

	
	
	

Documentation

Index

Constants

View Source
const (
	None packType = iota
	Ptr
	Slice
)
View Source
const (
	Invade compType = iota
	Single
	Composite
)

Variables

View Source
var (
	ErrNil          = errors.New("nil")
	ErrContainEmpty = errors.New("slice empty")
	ErrNoPkOrUnique = errors.New(" ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification (SQLSTATE 42P10) ")
)
View Source
var ImpNuller = reflect.TypeOf((*types.NullEr)(nil)).Elem()
View Source
var ImpValuer = reflect.TypeOf((*driver.Valuer)(nil)).Elem()

Functions

This section is empty.

Types

type ColFieldIndexLinkMap

type ColFieldIndexLinkMap []int

type DB

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

func Connect

func Connect(c DbConfig, pc *PoolConf) (*DB, error)

func MustConnect

func MustConnect(c DbConfig, pc *PoolConf) *DB

func MustConnectMock

func MustConnectMock(db *sql.DB, c DbConfig) *DB

func (DB) Begin

func (db DB) Begin() DB

func (DB) BeginTx

func (db DB) BeginTx(ctx context.Context, opts *sql.TxOptions) DB

func (DB) Builder

func (db DB) Builder() *SqlBuilder

func (DB) Commit

func (db DB) Commit() error

func (DB) Delete

func (db DB) Delete(v interface{}) OrmTableDelete

Delete delete

func (DB) Exec

func (db DB) Exec(query string, args ...interface{}) (rowsNum int64, err error)

func (DB) Has

func (db DB) Has(v interface{}) OrmTableHas

Select select

func (DB) Insert

func (db DB) Insert(v interface{}) (num int64, err error)

Insert 1.ptr 2.comp-struct

func (DB) InsertOrUpdate

func (db DB) InsertOrUpdate(v interface{}) OrmTableCreate

InsertOrUpdate 1.ptr 2.comp-struct

func (DB) OrmConf

func (db DB) OrmConf(c *OrmConf) DB

func (DB) Page

func (db DB) Page(size int, current int64) *SqlBuilder

func (DB) Prepare

func (db DB) Prepare(query string) (s Stmt, err error)

func (DB) Query

func (db DB) Query(query string, args ...interface{}) *NativeQuery

func (DB) Rollback

func (db DB) Rollback() error

func (DB) Select

func (db DB) Select(v interface{}) OrmTableSelect

func (DB) Update

func (db DB) Update(v interface{}) OrmTableUpdate

type DBer

type DBer interface {
	Query(query string, args ...interface{}) (*sql.Rows, error)
	Exec(query string, args ...interface{}) (sql.Result, error)
	Prepare(query string) (*sql.Stmt, error)
}

type DbConfig

type DbConfig interface {
	Open() (*sql.DB, error)
	Dialect(db *sql.DB, pc *PoolConf) Dialect
}

type Dialect

type Dialect interface {
	Copy(db DBer) Dialect
	// contains filtered or unexported methods
}

type EngineBatch

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

批量操作

type Logger

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

func (*Logger) Fatalln

func (l *Logger) Fatalln(msg string, v ...interface{})

func (*Logger) Panicln

func (l *Logger) Panicln(msg string, v ...interface{})

func (*Logger) Println

func (l *Logger) Println(msg string, v ...interface{})

type MysqlConf

type MysqlConf struct {
	Host     string
	Port     string
	DbName   string
	User     string
	Password string
}

func (*MysqlConf) Dialect

func (c *MysqlConf) Dialect(db *sql.DB, pc *PoolConf) Dialect

func (*MysqlConf) Open

func (c *MysqlConf) Open() (*sql.DB, error)

type MysqlDialect

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

func (MysqlDialect) Copy

func (m MysqlDialect) Copy(db DBer) Dialect

type NativeQuery

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

func (NativeQuery) GetList

func (q NativeQuery) GetList(dest interface{}) (rowsNum int64, err error)

func (NativeQuery) GetOne

func (q NativeQuery) GetOne(dest interface{}) (rowsNum int64, err error)

type OrmConf

type OrmConf struct {
	//po生成文件目录
	PoDir string
	//是否覆盖,默认true
	IsFileOverride bool

	//作者
	Author string
	//是否开启ActiveRecord模式,默认false
	IsActiveRecord bool

	IdType int

	//表名
	//TableNameFun >  tag > TableNamePrefix
	TableNamePrefix string
	TableNameFun    func(structName string, dest interface{}) string

	//字段名
	FieldNamePrefix string

	//主键 默认为id
	PrimaryKeyNames   []string
	PrimaryKeyNameFun func(tableName string) []string

	//逻辑删除 logicDeleteFieldName不为零值,即开启
	// LogicDeleteYesSql   deleted_at is null
	// LogicDeleteNoSql   deleted_at is not null
	// LogicDeleteSetSql   deleted_at = now()
	LogicDeleteYesSql string
	LogicDeleteNoSql  string
	LogicDeleteSetSql string

	//多租户 tenantIdFieldName不为零值,即开启
	TenantIdFieldName    string
	TenantIdValueFun     func() interface{}
	TenantIgnoreTableFun func(tableName string) bool
}

func (OrmConf) GenWhere

func (c OrmConf) GenWhere(keys []string, hasTen bool) []byte

有tenantid功能

type OrmContext

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

func (OrmContext) Copy

func (ctx OrmContext) Copy() OrmContext

func (OrmContext) Scan

func (ctx OrmContext) Scan(rows *sql.Rows) (int64, error)

Scan 接收多行结果 1.[]- *

func (OrmContext) ScanBatch

func (ctx OrmContext) ScanBatch(rowss []*sql.Rows) (int64, error)

ScanBatch 批量 1.ptr single/comp 2.slice- single

func (OrmContext) ScanLn

func (ctx OrmContext) ScanLn(rows *sql.Rows) (num int64, err error)

ScanLn 接收一行结果 1.ptr single/comp 2.slice- single

type OrmTableCreate

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

func (OrmTableCreate) ByPrimaryKey

func (orm OrmTableCreate) ByPrimaryKey() (int64, error)

ByPrimaryKey ptr single / comp复合主键

func (OrmTableCreate) ByUnique

func (orm OrmTableCreate) ByUnique(fs types.Fields) (int64, error)

ByUnique ptr-comp

type OrmTableDelete

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

func (OrmTableDelete) ByModel

func (orm OrmTableDelete) ByModel(v interface{}) (int64, error)

ByModel ptr comp,只能一个comp-struct

func (OrmTableDelete) ByPrimaryKey

func (orm OrmTableDelete) ByPrimaryKey(v ...interface{}) (int64, error)

ByPrimaryKey [] single -> 单主键 comp -> 复合主键

func (OrmTableDelete) ByWhere

func (orm OrmTableDelete) ByWhere(w *WhereBuilder) (int64, error)

type OrmTableHas

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

func (OrmTableHas) ByModel

func (orm OrmTableHas) ByModel(v interface{}) (bool, error)

ByModel v0.6 ptr-comp

func (OrmTableHas) ByPrimaryKey

func (orm OrmTableHas) ByPrimaryKey(v ...interface{}) (bool, error)

ByPrimaryKey v0.8

func (OrmTableHas) ByWhere

func (orm OrmTableHas) ByWhere(w *WhereBuilder) (bool, error)

type OrmTableSelect

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

func (OrmTableSelect) ByModel

func (orm OrmTableSelect) ByModel(v interface{}) OrmTableSelectWhere

ByModel ptr-comp

func (OrmTableSelect) ByPrimaryKey

func (orm OrmTableSelect) ByPrimaryKey(v ...interface{}) OrmTableSelectWhere

func (OrmTableSelect) ByWhere

type OrmTableSelectWhere

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

func (OrmTableSelectWhere) Limit

func (orm OrmTableSelectWhere) Limit(num int64, condition ...bool) OrmTableSelectWhere

func (OrmTableSelectWhere) Offset

func (orm OrmTableSelectWhere) Offset(num int64, condition ...bool) OrmTableSelectWhere

func (OrmTableSelectWhere) OrderBy

func (orm OrmTableSelectWhere) OrderBy(name string, condition ...bool) OrmTableSelectWhere

func (OrmTableSelectWhere) OrderDescBy

func (orm OrmTableSelectWhere) OrderDescBy(name string, condition ...bool) OrmTableSelectWhere

func (OrmTableSelectWhere) ScanFirst

func (orm OrmTableSelectWhere) ScanFirst(v interface{}) (int64, error)

func (OrmTableSelectWhere) ScanList

func (orm OrmTableSelectWhere) ScanList(v interface{}) (int64, error)

func (OrmTableSelectWhere) ScanOne

func (orm OrmTableSelectWhere) ScanOne(v interface{}) (int64, error)

type OrmTableUpdate

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

func (OrmTableUpdate) ByModel

func (orm OrmTableUpdate) ByModel(v interface{}) (int64, error)

func (OrmTableUpdate) ByPrimaryKey

func (orm OrmTableUpdate) ByPrimaryKey() (int64, error)

func (OrmTableUpdate) ByWhere

func (orm OrmTableUpdate) ByWhere(w *WhereBuilder) (int64, error)

type PackTyp

type PackTyp struct {
	Typ       packType
	Base      reflect.Value
	SliceBase reflect.Value
}

type Page

type Page struct {
	Records interface{} `json:"records"`
	Size    int         `json:"size"`
	Current int64       `json:"current"`
	Total   int64       `json:"total"`
	Pages   int64       `json:"pages"`
}

type PageCnfig

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

type PgConf

type PgConf struct {
	Host     string
	Port     string
	DbName   string
	User     string
	Password string
	Other    string
}

func (*PgConf) Dialect

func (c *PgConf) Dialect(db *sql.DB, pc *PoolConf) Dialect

func (*PgConf) Open

func (c *PgConf) Open() (*sql.DB, error)

type PgDialect

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

func (PgDialect) Copy

func (m PgDialect) Copy(db DBer) Dialect

type PoolConf

type PoolConf struct {
	MaxIdleCount int           // zero means defaultMaxIdleConns; negative means 0
	MaxOpen      int           // <= 0 means unlimited
	MaxLifetime  time.Duration // maximum amount of time a connection may be reused
	MaxIdleTime  time.Duration // maximum amount of time a connection may be idle before being closed

	Logger *log.Logger
}

type Prepare

type Prepare struct {
}

func (Prepare) ScanFirst

func (p Prepare) ScanFirst(v interface{}) (int64, error)

func (Prepare) ScanList

func (p Prepare) ScanList(v interface{}) (int64, error)

func (Prepare) ScanOne

func (p Prepare) ScanOne(v interface{}) (int64, error)

type SqlBuilder

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

func (*SqlBuilder) AppendArg

func (b *SqlBuilder) AppendArg(arg interface{}, condition ...bool) *SqlBuilder

func (*SqlBuilder) AppendArgs

func (b *SqlBuilder) AppendArgs(args ...interface{}) *SqlBuilder

func (*SqlBuilder) AppendSql

func (b *SqlBuilder) AppendSql(sql string) *SqlBuilder

func (*SqlBuilder) Arg

func (b *SqlBuilder) Arg(arg interface{}, condition ...bool) *SqlBuilder

func (*SqlBuilder) Args

func (b *SqlBuilder) Args(args ...interface{}) *SqlBuilder

func (*SqlBuilder) Exec

func (b *SqlBuilder) Exec() (rowsNum int64, err error)

func (*SqlBuilder) From

func (b *SqlBuilder) From(name string) *SqlBuilder

func (*SqlBuilder) Join

func (b *SqlBuilder) Join(name string, condition ...bool) *SqlBuilder

func (*SqlBuilder) LeftJoin

func (b *SqlBuilder) LeftJoin(name string, condition ...bool) *SqlBuilder

func (*SqlBuilder) Limit

func (b *SqlBuilder) Limit(num int64, condition ...bool) *SqlBuilder

func (*SqlBuilder) Native

func (b *SqlBuilder) Native(sql string, condition ...bool) *SqlBuilder

func (*SqlBuilder) Offset

func (b *SqlBuilder) Offset(num int64, condition ...bool) *SqlBuilder

func (*SqlBuilder) OrderBy

func (b *SqlBuilder) OrderBy(name string, condition ...bool) *SqlBuilder

func (*SqlBuilder) OrderDescBy

func (b *SqlBuilder) OrderDescBy(name string, condition ...bool) *SqlBuilder

func (*SqlBuilder) PageScan

func (b *SqlBuilder) PageScan(dest interface{}) (rowsNum int64, dto Page, err error)

PageSelect 查询分页

func (*SqlBuilder) RightJoin

func (b *SqlBuilder) RightJoin(name string, condition ...bool) *SqlBuilder

func (*SqlBuilder) ScanList

func (b *SqlBuilder) ScanList(dest interface{}) (rowsNum int64, err error)

func (*SqlBuilder) ScanOne

func (b *SqlBuilder) ScanOne(dest interface{}) (rowsNum int64, err error)

func (*SqlBuilder) Select

func (b *SqlBuilder) Select(arg string, condition ...bool) *SqlBuilder

func (*SqlBuilder) SelectModel

func (b *SqlBuilder) SelectModel(v interface{}) *SqlBuilder

func (*SqlBuilder) Where

func (b *SqlBuilder) Where(whereStr string, condition ...bool) *SqlBuilder

func (*SqlBuilder) WhereBuilder

func (b *SqlBuilder) WhereBuilder(v *WhereBuilder) *SqlBuilder

type Stmt

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

func (*Stmt) Exec

func (s *Stmt) Exec(args ...interface{}) Prepare

func (*Stmt) Query

func (s *Stmt) Query(args ...interface{}) (int64, error)

type StructValidFieldValueMap

type StructValidFieldValueMap map[string]interface{}

type WhereBuilder

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

func (*WhereBuilder) Eq

func (w *WhereBuilder) Eq(query string, arg interface{}, condition ...bool) *WhereBuilder

func (*WhereBuilder) Like

func (w *WhereBuilder) Like(query, arg string, condition ...bool) *WhereBuilder

func (*WhereBuilder) Ne

func (w *WhereBuilder) Ne(query string, arg interface{}, condition ...bool) *WhereBuilder

func (*WhereBuilder) NoLike

func (w *WhereBuilder) NoLike(query, arg string, condition ...bool) *WhereBuilder

type WhereContext

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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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