gt

package module
v1.7.13 Latest Latest
Warning

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

Go to latest
Published: Apr 28, 2020 License: MIT Imports: 34 Imported by: 0

README

Erwin Schrödinger's Cat

GT

via orm/other tools to fast dev project

文档

Documentation

Index

Constants

View Source
const (
	Debug = "debug" // default level
	Info  = "info"
	Warn  = "warn"
	Error = "error"
)

log level

View Source
const Version = "1.7.x"

Variables

View Source
var LogFormatter = func(values ...interface{}) (messages []interface{}) {
	if len(values) > 1 {
		var (
			sql             string
			formattedValues []string
			level           = values[0]
			currentTime     = "\033[33m[" + gorm.NowFunc().Format("2006-01-02 15:04:05") + "]\033[0m"
		)

		messages = []interface{}{currentTime}

		if len(values) == 2 {

			currentTime = currentTime[1:]

			messages = []interface{}{currentTime}
		}

		if level == "sql" {

			messages = append(messages, fmt.Sprintf(" \033[36;1m[%.2fms]\033[0m ", float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0))

			for _, value := range values[4].([]interface{}) {
				indirectValue := reflect.Indirect(reflect.ValueOf(value))
				if indirectValue.IsValid() {
					value = indirectValue.Interface()
					if t, ok := value.(time.Time); ok {
						if t.IsZero() {
							formattedValues = append(formattedValues, fmt.Sprintf("'%v'", "0000-00-00 00:00:00"))
						} else {
							formattedValues = append(formattedValues, fmt.Sprintf("'%v'", t.Format("2006-01-02 15:04:05")))
						}
					} else if b, ok := value.([]byte); ok {
						if str := string(b); isPrintable(str) {
							formattedValues = append(formattedValues, fmt.Sprintf("'%v'", str))
						} else {
							formattedValues = append(formattedValues, "'<binary>'")
						}
					} else if r, ok := value.(driver.Valuer); ok {
						if value, err := r.Value(); err == nil && value != nil {
							formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value))
						} else {
							formattedValues = append(formattedValues, "NULL")
						}
					} else {
						switch value.(type) {
						case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64, bool:
							formattedValues = append(formattedValues, fmt.Sprintf("%v", value))
						default:
							formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value))
						}
					}
				} else {
					formattedValues = append(formattedValues, "NULL")
				}
			}

			if numericPlaceHolderRegexp.MatchString(values[3].(string)) {
				sql = values[3].(string)
				for index, value := range formattedValues {
					placeholder := fmt.Sprintf(`\$%d([^\d]|$)`, index+1)
					sql = regexp.MustCompile(placeholder).ReplaceAllString(sql, value+"$1")
				}
			} else {
				formattedValuesLength := len(formattedValues)
				for index, value := range sqlRegexp.Split(values[3].(string), -1) {
					sql += value
					if index < formattedValuesLength {
						sql += formattedValues[index]
					}
				}
			}

			messages = append(messages, sql)
			messages = append(messages, fmt.Sprintf(" \n\033[36;31m[%v]\033[0m ", strconv.FormatInt(values[5].(int64), 10)+" rows affected or returned "))
		} else {
			messages = append(messages, "\033[31;1m")
			messages = append(messages, values[2:]...)
			messages = append(messages, "\033[0m")
		}
	}

	return
}

Functions

func DBTooler

func DBTooler()

single db

func GetColParamSQL

func GetColParamSQL(model interface{}) (sql string)

get col ?

func GetColSQL

func GetColSQL(model interface{}) (sql string)

根据model中表模型的json标签获取表字段 将select* 变为对应的字段名

func GetColSQLAlias

func GetColSQLAlias(model interface{}, alias string) (sql string)

根据model中表模型的json标签获取表字段 将select* 中'*'变为对应的字段名 增加别名,表连接问题

func GetDataSQL

func GetDataSQL(gt *GT) (sql string, args []interface{})

get data sql

func GetInsertSQL

func GetInsertSQL(table string, params cmap.CMap) (sql string, args []interface{})

传入数据库表名 插入语句拼接

func GetMoreSearchSQL

func GetMoreSearchSQL(gt *GT) (sqlNt, sql string, clientPage, everyPage int64, args []interface{})

More Table params: innerTables is inner join tables, must even number params: leftTables is left join tables return: select sql table1 as main table, include other tables_id(foreign key)

func GetMoreTableColumnSQL

func GetMoreTableColumnSQL(model interface{}, tables ...string) (sql string)

select * replace select more tables tables : table name / table alias name 主表放在tables中第一个, 紧接着为主表关联的外键表名(无顺序)

func GetParams

func GetParams(data interface{}) (params []interface{})

get data value like GetColSQL

func GetReflectTag

func GetReflectTag(reflectType reflect.Type, buf *bytes.Buffer)

层级递增解析tag

func GetReflectTagAlias

func GetReflectTagAlias(ref reflect.Type, buf *bytes.Buffer, alias string)

层级递增解析tag, 别名

func GetReflectTagMore

func GetReflectTagMore(ref reflect.Type, buf *bytes.Buffer, tables ...string)

层级递增解析tag, more tables

func GetSearchSQL

func GetSearchSQL(gt *GT) (sqlNt, sql string, clientPage, everyPage int64, args []interface{})

分页参数不传, 查询所有 默认根据id倒序 单张表

func GetSelectSearchSQL

func GetSelectSearchSQL(gt *GT) (sqlNt, sql string, clientPage, everyPage int64)

select sql

func GetUpdateSQL

func GetUpdateSQL(table string, params cmap.CMap) (sql string, args []interface{})

传入数据库表名 更新语句拼接

Types

type Config

type Config struct {
	// different devMode yaml data
	YamlS map[string]*Yaml
	// contains filtered or unexported fields
}

config

func Configger

func Configger(params ...string) *Config

single config

func NewConfig

func NewConfig(params ...string) *Config

new Config load all devMode yaml data

func (*Config) Get

func (c *Config) Get(name string) interface{}

get yaml data find the first data, must different from app.yaml

func (*Config) GetBool

func (c *Config) GetBool(name string) bool

func (*Config) GetInt

func (c *Config) GetInt(name string) int

func (*Config) GetString

func (c *Config) GetString(name string) string

func (*Config) GetStruct

func (c *Config) GetStruct(name string, s interface{})

yaml to struct only support Accessible Field

type Crud

type Crud interface {

	// DB
	DB() *DBTool
	// new/replace param
	// return param
	Params(param ...Param) Crud

	// get url params
	// like form data
	GetBySearch(params cmap.CMap) Crud     // search
	GetByData(params cmap.CMap) Crud       // get data no search
	GetByID(id interface{}) Crud           // by id
	GetMoreBySearch(params cmap.CMap) Crud // more search

	// delete by id
	Delete(id interface{}) Crud // delete

	// crud and search id
	// form data
	// [create/update] future all will use json replace form request
	// form will not update
	UpdateForm(params cmap.CMap) error            // update
	CreateForm(params cmap.CMap) error            // create
	CreateResID(params cmap.CMap) (str.ID, error) // create res insert id

	// crud and search id
	// json data
	Update() Crud // update
	Create() Crud // create, include res insert id
	// Deprecated
	CreateMoreData() Crud // create more, data must array type, single table
	CreateMore() Crud     // create more, data must array type, single table

	// select
	Select(query string, args ...interface{}) Crud // select sql
	From(query string) Crud                        // from sql, if use search, From must only once
	Group(query string) Crud                       // the last group by
	Search(params cmap.CMap) Crud                  // search pager
	Single() Crud                                  // no search
	Exec() Crud                                    // exec insert/update/delete sql
	Error() error                                  // crud error
	RowsAffected() int64                           // inflect rows
	Pager() result.Pager                           // search pager
	Begin() Crud                                   // start a transaction
	Commit() Crud                                  // commit a transaction
	Rollback() Crud                                // rollback a transaction
	// contains filtered or unexported methods
}

crud is db driver extend

func NewCrud

func NewCrud(params ...Param) Crud

new crud

type DBCrud

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

implement DBCrud form data

func (*DBCrud) Begin

func (c *DBCrud) Begin() Crud

func (*DBCrud) Commit

func (c *DBCrud) Commit() Crud

func (*DBCrud) Create

func (c *DBCrud) Create() Crud

create

func (*DBCrud) CreateForm

func (c *DBCrud) CreateForm(params cmap.CMap) error

create

func (*DBCrud) CreateMore

func (c *DBCrud) CreateMore() Crud

create more

func (*DBCrud) CreateMoreData

func (c *DBCrud) CreateMoreData() Crud

create

func (*DBCrud) CreateResID

func (c *DBCrud) CreateResID(params cmap.CMap) (str.ID, error)

create res insert id

func (*DBCrud) DB

func (c *DBCrud) DB() *DBTool

func (*DBCrud) Delete

func (c *DBCrud) Delete(id interface{}) Crud

delete

func (*DBCrud) Error

func (c *DBCrud) Error() error

func (*DBCrud) Exec

func (c *DBCrud) Exec() Crud

func (*DBCrud) From

func (c *DBCrud) From(query string) Crud

func (*DBCrud) GetByData

func (c *DBCrud) GetByData(params cmap.CMap) Crud

func (*DBCrud) GetByID

func (c *DBCrud) GetByID(id interface{}) Crud

by id

func (*DBCrud) GetBySearch

func (c *DBCrud) GetBySearch(params cmap.CMap) Crud

search pager info

func (*DBCrud) GetMoreBySearch

func (c *DBCrud) GetMoreBySearch(params cmap.CMap) Crud

the same as search more tables

func (*DBCrud) Group

func (c *DBCrud) Group(query string) Crud

func (*DBCrud) Pager

func (c *DBCrud) Pager() result.Pager

func (*DBCrud) Params

func (c *DBCrud) Params(params ...Param) Crud

func (*DBCrud) Rollback

func (c *DBCrud) Rollback() Crud

func (*DBCrud) RowsAffected

func (c *DBCrud) RowsAffected() int64

func (*DBCrud) Search

func (c *DBCrud) Search(params cmap.CMap) Crud

func (*DBCrud) Select

func (c *DBCrud) Select(query string, args ...interface{}) Crud

create

func (*DBCrud) Single

func (c *DBCrud) Single() Crud

func (*DBCrud) Update

func (c *DBCrud) Update() Crud

update

func (*DBCrud) UpdateForm

func (c *DBCrud) UpdateForm(params cmap.CMap) error

update

type DBTool

type DBTool struct {

	// db driver
	*gorm.DB
	// contains filtered or unexported fields
}

DB tool

func NewDBTool

func NewDBTool() *DBTool

init DBTool

func (*DBTool) CreateData

func (db *DBTool) CreateData(data interface{})

create

func (*DBTool) CreateDataResID

func (db *DBTool) CreateDataResID(table string, params cmap.CMap) (id str.ID, err error)

创建数据,通用 返回id,事务,慎用 业务少可用

func (*DBTool) CreateFormData

func (db *DBTool) CreateFormData(table string, params cmap.CMap) error

via form data create

func (*DBTool) CreateMoreData

func (db *DBTool) CreateMoreData(table string, model interface{}, data interface{})

data must array type more data create single table

func (*DBTool) Delete

func (db *DBTool) Delete(table string, id interface{})

delete

func (*DBTool) ExecSQL

func (db *DBTool) ExecSQL(sql string, args ...interface{})

exec sql

func (*DBTool) GetData

func (db *DBTool) GetData(gt *GT)

获得数据, no search

func (*DBTool) GetDataByID

func (db *DBTool) GetDataByID(data interface{}, id interface{})

获得数据,根据id

func (*DBTool) GetDataByName

func (db *DBTool) GetDataByName(data interface{}, name, value string) (err error)

获得数据,根据name条件

func (*DBTool) GetDataBySQL

func (db *DBTool) GetDataBySQL(data interface{}, sql string, args ...interface{})

获得数据,根据sql语句,无分页

func (*DBTool) GetDataBySQLSearch

func (db *DBTool) GetDataBySQLSearch(data interface{}, sql, sqlNt string, clientPage, everyPage int64, args []interface{}, argsNt []interface{}) (pager result.Pager)

获得数据,根据sql语句,分页 args : sql参数'?' sql, sqlNt args 相同, 共用args

func (*DBTool) GetDataBySearch

func (db *DBTool) GetDataBySearch(gt *GT) (pager result.Pager)

获得数据,分页/查询

func (*DBTool) GetDataBySelectSQLSearch

func (db *DBTool) GetDataBySelectSQLSearch(gt *GT) (pager result.Pager)

select sql search

func (*DBTool) GetMoreDataBySearch

func (db *DBTool) GetMoreDataBySearch(gt *GT) (pager result.Pager)

More Table params: innerTables is inner join tables params: leftTables is left join tables return: search info table1 as main table, include other tables_id(foreign key)

func (*DBTool) NewDB

func (db *DBTool) NewDB()

new db driver

func (*DBTool) UpdateData

func (db *DBTool) UpdateData(gt *GT)

update

func (*DBTool) UpdateFormData

func (db *DBTool) UpdateFormData(table string, params cmap.CMap) (err error)

via form data update

func (*DBTool) UpdateStructData

func (db *DBTool) UpdateStructData(data interface{}) (err error)

结合struct修改

func (*DBTool) ValidateSQL

func (db *DBTool) ValidateSQL(sql string) (err error)

select检查是否存在 == nil 即存在

type GT

type GT struct {
	*Params
	// CMap
	CMaps cmap.CMap // params

	// select sql
	Select string // select sql
	From   string // only once
	Group  string // the last group
	Args   []interface{}
	ArgsNt []interface{}
	// contains filtered or unexported fields
}

GT SQL struct

type Log

type Log struct {
	*logrus.Logger
	LogWriter
}

log

func Logger

func Logger() *Log

one single log

func NewLog

func NewLog() *Log

new log

func (*Log) DefaultFileLog

func (l *Log) DefaultFileLog()

Default file log maintain 7 days data, every 24 hour split file

func (*Log) FileLog

func (l *Log) FileLog(logPath string, logFileName string, maxNum uint, rotationTime time.Duration)

new output file log

func (Log) Print

func (l Log) Print(values ...interface{})

Print format & print log

type LogWriter

type LogWriter interface {
	Println(v ...interface{})
}

LogWriter log writer interface

type Param

type Param func(*Params)

func Data

func Data(Data interface{}) Param

func InnerTable

func InnerTable(InnerTables []string) Param

func KeyModel

func KeyModel(KeyModel interface{}) Param

func LeftTable

func LeftTable(LeftTable []string) Param

func Model

func Model(Model interface{}) Param

func SubSQL

func SubSQL(SubSQL ...string) Param

func SubWhereSQL

func SubWhereSQL(SubWhereSQL ...string) Param

func Table

func Table(Table string) Param

type Params

type Params struct {
	// attributes
	InnerTable []string    // inner join tables
	LeftTable  []string    // left join tables
	Table      string      // table name
	Model      interface{} // table model, like User{}
	KeyModel   interface{} // key like model
	Data       interface{} // table model data, like var user User{}, it is 'user', it store real data

	// count
	SubSQL string // SubQuery SQL
	// where
	SubWhereSQL string // SubWhere SQL
}

crud params

type Yaml

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

go tool yaml use go-yaml

func (*Yaml) Get

func (c *Yaml) Get(name string) interface{}

从配置文件中获取值

func (*Yaml) GetBool

func (c *Yaml) GetBool(name string) bool

bool

func (*Yaml) GetInt

func (c *Yaml) GetInt(name string) int

int

func (*Yaml) GetString

func (c *Yaml) GetString(name string) string

string

func (*Yaml) GetStruct

func (c *Yaml) GetStruct(name string, s interface{})

从配置文件中获取Struct类型的值 这里的struct是你自己定义的根据配置文件

Directories

Path Synopsis
tool
id
sql
xss

Jump to

Keyboard shortcuts

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