Documentation ¶
Overview ¶
*
- desc : 参数校验函数
- author : 畅雨
- date : 2016.12.13
- desc :
- history : 2018.06.15:
- 默认参数增加直接设置值类型,DT_VALUE,格式{value} ,示例:{""},{0} 2017.05.28
- 增加主从表关联id的服务端处理。
* * func : 查询sql结果缓存处理单元 * author : 畅雨 * date : 2016.11.25 * desc : 缓存查询的结果 * history :
- 2106.11.30 -优化缓存的存储
* * func : 查询sql的参数默认值 shortuuid 与 intuuid的处理单元 * author : 畅雨 * date : 2018.8.26 * desc : * history :
* * func : sql参数值的服务端来源定义 * author : 畅雨 * date : 2016.12.17 * desc : 可以将常量,变量,函数的值提供给sql参数的服务端默认值,通过reg函数注册到Context(MAP)中,在SQL的参数中通过名字进行调用得到值作为sql参数的值 * history :
* * func : 动态SQL执行引擎 * author : 畅雨参数校验函数 * date : 2016.06.13 * desc : 关联关系全部通Id进行关联 * history :
-2018.12.18 -配置参数增加,批量SQL的事务处理:全部一个事务还是分开不同的事务中。 - 2017.03.22 -增加两种类型的sql,处理二进制对象保存到数据库和从数据库获取: ST_GETBLOB //10 获取BLOB (binary large object),二进制大对象从数据库 ST_SETBLOB //11 保存BLOB (binary large object),二进制大对象到数据库 -2016.11.20 将执行sql的execMap修改该可以执行多个配置的cmd,采用相同的参数
*
- desc : 请求处理handle
- author:畅雨
- date: 2016.10.27
- history: 2017.03.22 增加 单独的获取与保存二进制文件到数据库配置项 2016.10.17:优化 select与pagingselect返回结果,当数据为空时返回[]
*
功能:辅助函数
*
desc : 管理动态SQL,根据配置文件目录从配置文件加载到内存中
author : 畅雨
date : 2016.12.13
desc :
history: 2018.08.22 sql节点配置增加 eachtran 属性,配置 batchexec、batchmultiexec类型生成的所有SQL是否一个事务中执行,默认为false,true的话则每个批次循环在不同的事务。 2018.06.15 默认参数增加直接设置值类型,DT_VALUE,格式{value} ,示例:{""},{0} 2018.03.15 修复参数默认值未定判断处理bug default: 原 if len(strings.TrimSpace(para.Paratypestr)) > 0 { 改为 if len(strings.TrimSpace(para.Defaultstr)) > 0 {
2017.05.28 -增加 对主从表的使用id的处理--待测试 2017.03.22 -增加两种类型的sql,处理二进制对象保存到数据库和从数据库获取: ST_GETBLOB //10 获取BLOB (binary large object),二进制大对象从数据库 ST_SETBLOB //11 保存BLOB (binary large object),二进制大对象到数据库
动态SQL路由注册 特别说明:将router定义代码放到 sysrouter.go中
功能:动态SQL执行函数供其他包调用单元 日期: 更新: 2017.06.05 增加 SelectMapIsExist 2017.03.29 增加几个函数,返回Rows 2017.03.13 增加默认参数处理 2016.10.18 增加 PagingSelectMapToMap func
功能:监控配置目录下的文件变化自动载入(修改,删除--OK) 作者:畅雨 日期:2016.06.01 已知问题: 1) 文件改名检测到但无法获知改名后文件故未更新----->可以用ReloadAll重新载入即可 更新记录:
Index ¶
- Constants
- func BacthExecMap(modelId, sqlId string, sp []map[string]interface{}) error
- func BacthMultiExecMap(modelId, sqlId string, mp map[string][]map[string]interface{}) error
- func CheckRequired(str string) bool
- func ClearCache()
- func DealwithParameter(modelId, sqlId string, mp map[string]interface{}, sqlindex int, ...) error
- func DirectSQL() faygo.HandlerFunc
- func DirectSQLReloadAll() faygo.HandlerFunc
- func DirectSQLReloadModel() faygo.HandlerFunc
- func ExecMap(modelId, sqlId string, mp map[string]interface{}) (sql.Result, error)
- func ExecStruct(modelId, sqlId string, st interface{}) (sql.Result, error)
- func GetCache(key string, suffix string) (ok bool, result []byte)
- func IsEmail(str string) bool
- func IsFloat(str interface{}) bool
- func IsInt(str interface{}) bool
- func IsVaildDate(str string) bool
- func IsVaildDatetime(str string) bool
- func IsVaildLength(str string, min, max int) bool
- func IsVaildValue(value, min, max float64) bool
- func JSONString(v interface{}, Indent bool) (string, error)
- func Map2Struct(mp map[string]interface{}, st interface{}) error
- func MultiSelectMapToMap(modelId, sqlId string, mp map[string]interface{}) (map[string][]map[string]interface{}, error)
- func MultiSelectMapToRows(modelId, sqlId string, mp map[string]interface{}) (map[string]*core.Rows, error)
- func RegAny(name string, fn interface{}) (err error)
- func ReloadAll()
- func ReloadModel(msqlfile string) error
- func RemoveCache(key string)
- func SelectMapIsExist(modelId, sqlId string, mp map[string]interface{}) (bool, error)
- func SelectMapToMap(modelId, sqlId string, mp map[string]interface{}) ([]map[string]interface{}, error)
- func SelectMapToRows(modelId, sqlId string, mp map[string]interface{}) (*core.Rows, error)
- func SelectMapToStruct(modelId, sqlId string, mp map[string]interface{}, st interface{}) (*[]interface{}, error)
- func SelectMapToStructPro(modelId, sqlId string, mp map[string]interface{}, dest interface{}) error
- func SetCache(key string, suffix string, value []byte, timeout int)
- func SplitRight(s string, c byte) (left, right string)
- func Struct2Map(st interface{}) map[string]interface{}
- type Execresult
- type MemoPool
- type PagingSelectResult
- type PagingSelectRows
- type TCmd
- type TDefaultType
- type TModel
- type TModels
- type TParaType
- type TSql
- type TSqlParameter
- type TSqltype
- type Worker
Constants ¶
const ( Int string = "^(?:[-+]?(?:0|[1-9][0-9]*))$" Float string = "^(?:[-+]?(?:[0-9]+))?(?:\\.[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$" Email string = "" /* 1212-byte string literal not displayed */ )
类型判断正则表达式定义
const MSCONFIGFILE = "./config/directsql.ini"
配置文件配置参数
Variables ¶
This section is empty.
Functions ¶
func BacthExecMap ¶
批量执行 UPDATE、INSERT、DELETE、mp 是MAP类型命名参数
func BacthMultiExecMap ¶
批量执行 BacthComplex、mp 是MAP类型命名参数,事务中依次执行
func DealwithParameter ¶
func DealwithParameter(modelId, sqlId string, mp map[string]interface{}, sqlindex int, ctx *faygo.Context) error
默认参数处理
func ExecStruct ¶
执行EXEC (UPDATE、DELETE、INSERT),SQL参数是struct 返回结果 sql.Result
func MultiSelectMapToMap ¶
func MultiSelectMapToMap(modelId, sqlId string, mp map[string]interface{}) (map[string][]map[string]interface{}, error)
多個查询 返回 map[string][]map[string]interface{}
func MultiSelectMapToRows ¶
func MultiSelectMapToRows(modelId, sqlId string, mp map[string]interface{}) (map[string]*core.Rows, error)
执行返回多個結果集的多個查询根据modelId,sqlId ,SQLmp:map[string]interface{}命名参数 返回结果 map[string]*Rows
func SelectMapIsExist ¶ added in v1.3.0
func SelectMapToMap ¶
func SelectMapToMap(modelId, sqlId string, mp map[string]interface{}) ([]map[string]interface{}, error)
查询 根据modelId,sqlId ,SQL参数 map 返回 []map[string]interface{}
func SelectMapToRows ¶
查询 根据modelId,sqlId ,mp:map[string]interface{}命名参数,返回*core.Rows
func SelectMapToStruct ¶
func SelectMapToStruct(modelId, sqlId string, mp map[string]interface{}, st interface{}) (*[]interface{}, error)
查询 根据modelId,sqlId ,SQL参数是map, 返回 []struct 目前使用比较繁琐:st --是结构体的一个空实例,返回的是 改结构体的实例的slice,再使用返还结果时还的需要转换下类型。
func SelectMapToStructPro ¶
查询 根据modelId,sqlId ,SQL参数是map,dest 是待填充的返回结果 []*Struct ---未完成
func SplitRight ¶
将s 根据从右边第一个出现的c进行分割成两个stirng,比如 'aa / bb / cc' -> 'aa / bb','cc'
Types ¶
type Execresult ¶
type Execresult struct { LastInsertId int64 `json:"lastinsertdd"` RowsAffected int64 `json:"rowsaffected"` Info string `json:"info"` }
execMap的返回结果定义
type PagingSelectResult ¶
type PagingSelectResult struct { Total int `json:"total"` Data []map[string]interface{} `json:"data"` }
分頁查詢的返回結果
func PagingSelectMapToMap ¶
func PagingSelectMapToMap(modelId, sqlId string, mp map[string]interface{}) (*PagingSelectResult, error)
执行分页查询SQL mp 是MAP类型命名参数 返回结果 int,[]map[string][]interface{}
type PagingSelectRows ¶
分頁查詢的返回結果
func PagingSelectMapToRows ¶
func PagingSelectMapToRows(modelId, sqlId string, mp map[string]interface{}) (*PagingSelectRows, error)
执行分页查询SQL mp 是MAP类型命名参数 返回结果 int,Rows
type TCmd ¶
type TCmd struct { XMLName xml.Name `xml:"cmd"` Pin string `xml:"in,attr"` // 输入参数标示 Rout string `xml:"out,attr"` // 输出结果标示 Sql string `xml:",chardata"` // SQL Parameters []*TSqlParameter `xml:"parameters>parameter"` }
TCmd <Select/>等节点的下级节点<sql />对应结构
type TDefaultType ¶
type TDefaultType int
---------------------------------------------------------------------------------------------------- 默认值类型:uuid/nowdate/now/nowunix
const ( DT_UNDEFINED TDefaultType = iota // 0=未定义,不处理默认值 DT_UUID // uuid DT_INT64UUID // 64位整数长度的唯一id (具体说明见 readme) DT_SHORTUUID // 短字符串的唯一id(将int64uuid转为36进制的值(10个数字+26个字母组成的)) DT_NOWDATE // 当前日期 now date DT_NOWDATETIME // 当前日期时间 now datetime DT_NOW_UNIX // 当前时间的unix值 int64 now date DT_CUSTOM // 自定义变量,采用注册自定义函数获取变量实现 DT_PARENTID // 关联的主表的Id的值 DT_VALUE // 直接设置默认值,比如字符串设置{""},数值设置 {0} 用大括号括起来 )
type TModel ¶
type TModel struct { Id string // root起用映射、不带扩展名的文件名 DB *core.DB // 本模块的db引擎 *xorm.Engine.DB() Sqls map[string]*TSql // sqlentity key=sqlentity.id }
sqlmodel 一个配置文件的SQLModel对应的结构
type TModels ¶
type TModels struct {
// contains filtered or unexported fields
}
全部业务SQL路由表,不根据目录分层次,直接放在map sqlmodels中,key=带路径不带扩展名的文件名
type TSql ¶
type TSql struct { XMLName xml.Name `xml:"sql"` Id string `xml:"id,attr"` // sqlid Sqltypestr string `xml:"type,attr"` Sqltype TSqltype `xml:"-"` // SQL类型 Idfield string `xml:"idfield,attr"` // SQlType为6=嵌套jsoin树时的ID字段 Pidfield string `xml:"pidfield,attr"` // SQlType为6=嵌套jsoin树时的ParentID字段 Cmds []*TCmd `xml:"cmd"` // sqlcmd(sqltype为分页查询时的计数SQL放第一个,结果SQL放第二个) Cached bool `xml:"cached,attr"` // 是否启用查询数据缓存功能 Cachetime int `xml:"cachetime,attr"` // 默认缓存的时间,单位为分钟,-1为一直有效,-2为一月,-3为一周 -4为一天,单位为分钟 Eachtran bool `xml:"eachtran,attr"` // 对于 batchexec、batchmultiexec类型SQL 如果为 false则所有SQL在一个事务执行,true则每一个批次在一个事务中 }
sql <Select/>等节点对应的结构
type TSqlParameter ¶
type TSqlParameter struct { Name string `xml:"name,attr"` // 参数名称必须与cmd中的对应 Paratypestr string `xml:"type,attr"` // string/number/email/date/datetime/time -不定义则不需要验证 Paratype TParaType `-` // 数值类型 Required bool `xml:"required,attr"` // 0=不是必须的 1=必须的不能为空 Minlen int `xml:"minlen,attr"` // 最小长度 Maxlen int `xml:"maxlen,attr"` // 最大长度 MinValue float64 `xml:"minvalue,attr"` // 最小值 MaxValue float64 `xml:"maxvalue,attr"` // 最大值 Defaultstr string `xml:"default,attr"` // 默认值 undefined/uuid/userid/usercode/username/rootgroupid/rootgroupname/groupid/groupname/nowdate/nowtime Default TDefaultType `-` // 数值类型 Return bool `xml:"return,attr"` // 服务端生成的默认值是否返回到客户端: 0(false)=默认,不返回 1(true)=返回到客户端 Parentid bool `xml:"parentid,attr"` // 是否作为从表的关联本表(主表)的id的值 }
TSqlParameter 参数校验定义
type TSqltype ¶
type TSqltype int
TSql 类型
const ( ST_SELECT TSqltype = iota // 0 普通查询 ---OK! ST_PAGINGSELECT // 1 分页查询 ---OK! ST_NESTEDSELECT // 2 嵌套jsoin树---------未实现 ST_MULTISELECT // 3 多结果集查询---OK! ST_EXEC // 4 执行SQL,可以一个事务内批量执行多个cmd ST_BATCHEXEC // 5 根据传入参数在一个事务内多次执行SQL ST_BATCHMULTIEXEC // 6 批量执行复合SQL(多数据集批量插入、更新、删除)---OK! ST_IMPORT // 7 导入数据的SQL:通过xlsx导入数据配置的SQL ST_EXPORT // 8 导出数据的SQL:导出excel格式文件数据 ST_REPORT // 9 报表用的SQL:通过xlsx模板创建报表的SQL ST_GETBLOB // 10 获取BLOB (binary large object),二进制大对象从数据库 ST_SETBLOB // 11 保存BLOB (binary large object),二进制大对象到数据库 )
func GetSqlType ¶
type Worker ¶ added in v1.3.0
type Worker struct {
// contains filtered or unexported fields
}
定义一个woker工作节点所需要的基本参数
func (*Worker) GetInt64Id ¶ added in v1.3.0
生成方法一定要挂载在某个woker下,这样逻辑会比较清晰 指定某个节点生成id