diff --git a/dbpool.go b/dbpool.go index 3fd3f14..d28bb4b 100644 --- a/dbpool.go +++ b/dbpool.go @@ -2,6 +2,7 @@ package f5 import ( "q5" + "fmt" "strings" ) @@ -14,7 +15,7 @@ type dbPool struct { style int32 dataSourceHash map[string]*q5.Mysql } -n + func (this *dbPool) init() { } @@ -28,7 +29,7 @@ func (this *dbPool) Select( whereKv [][]string, cb QueryResultCb) { params := []string{} - sql := "SELECT " + this.joinSelectFields(fields) + " FROM " + tblName + " WHERE 1=1" + sql := fmt.Sprintf("SELECT %s FROM %s WHERE 1=1 ", this.joinSelectFields(fields), tblName) this.joinWhere(&sql, ¶ms, whereKv) this.internalQuery(dataSource, sql, params, cb) } @@ -39,7 +40,7 @@ func (this *dbPool) OrmSelect( whereKv [][]string, cb QueryResultCb) { params := []string{} - sql := "SELECT * FROM " + tblName + " WHERE 1=1" + sql := fmt.Sprintf("SELECT * FROM %s WHERE 1=1 ", tblName) this.joinWhere(&sql, ¶ms, whereKv) this.internalQuery(dataSource, sql, params, cb) } @@ -51,7 +52,7 @@ func (this *dbPool) SelectOne( whereKv [][]string, cb QueryOneCb) { params := []string{} - sql := "SELECT " + this.joinSelectFields(fields) + " FROM " + tblName + " WHERE 1=1" + sql := fmt.Sprintf("SELECT %s FROM %s WHERE 1=1 ", this.joinSelectFields(fields), tblName) this.joinWhere(&sql, ¶ms, whereKv) this.internalQueryOne(dataSource, sql, params, cb) } @@ -63,7 +64,7 @@ func (this *dbPool) OrmSelectOne( whereKv [][]string, cb QueryOneCb) { params := []string{} - sql := "SELECT * FROM " + tblName + " WHERE 1=1" + sql := fmt.Sprintf("SELECT * FROM %s WHERE 1=1 ", tblName) this.joinWhere(&sql, ¶ms, whereKv) this.internalQueryOne(dataSource, sql, params, cb) } @@ -102,10 +103,15 @@ func (this *dbPool) Upsert( func (this *dbPool) PageQuery( dataSource string, - tblName string, - whereKv [][]string, - fieldsKv [][]string, - cb QueryResultCb) { + perPage int32, + page int32, + sql string, + params []string, + queryParam *PageQueryParam, + cb PageQueryCb) { + var pagination Pagination + pagination.PerPage = q5.Max(1, perPage) + pagination.CurrentPage = q5.Max(1, page) } func (this *dbPool) borrowConn(dataSource string) *q5.Mysql { diff --git a/export.go b/export.go index 2c0b243..aba8375 100644 --- a/export.go +++ b/export.go @@ -5,6 +5,7 @@ var _timer *Timer var _sysLog *SysLog_ var _tgLog *TGLog_ var _httpCliMgr *HttpCliMgr +var _pageQuery *pageQuery var _goStyleDb *dbPool var _jsStyleDb *dbPool @@ -28,6 +29,10 @@ func GetHttpCliMgr() *HttpCliMgr { return _httpCliMgr } +func GetPageQuery() *pageQuery { + return _pageQuery +} + func GetGoStyleDb() *dbPool { return _goStyleDb } diff --git a/pagequery.go b/pagequery.go new file mode 100644 index 0000000..0665fd4 --- /dev/null +++ b/pagequery.go @@ -0,0 +1,132 @@ +package f5 + +/* +import ( + "fmt" +) +*/ + +type LinkOp int32 + +const ( + LK_AND LinkOp = iota + LK_OR +) + +type QueryCond int32 + +const ( + QC_LIKE QueryCond = iota + QC_EQ + QC_LT + QC_LE + QC_GT + QC_GE + QC_CUSTOM +) + +type pageQuery struct { +} + +type PageQueryFilter interface { + And() PageQueryFilter + Or() PageQueryFilter + Not() PageQueryFilter + GenSql() string +} + +type PageQueryOne struct { + linkOp LinkOp + not bool + fieldName string + cond QueryCond + ignoreEmpty bool + val string +} + +type PageQueryComp struct { + linkOp LinkOp + not bool + subFilters []*PageQueryOne +} + +type PageQueryParam struct { + Filter []PageQueryFilter + OrderBy string +} + +func (this *PageQueryParam) genSql() string { + sql := " " + /* + for _, field := range this.Filter { + }*/ + sql += " " + this.OrderBy + " " + return sql +} + +func (this *pageQuery) Like(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_LIKE, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) EQ(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_EQ, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) LT(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_LT, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) LE(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_LE, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) GT(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_GT, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) GE(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_GE, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) Custom(fieldName string, val string) *PageQueryOne { + f := &PageQueryOne{ + cond: QC_CUSTOM, + fieldName: fieldName, + val: val} + return f +} + +func (this *pageQuery) Comp(subFilters []*PageQueryOne) *PageQueryComp { + f := &PageQueryComp{ + subFilters: subFilters} + return f +} + +func (this *PageQueryOne) IgnoreEmpy() *PageQueryOne { + this.ignoreEmpty = true + return this +} diff --git a/types.go b/types.go index 8910a31..38996f3 100644 --- a/types.go +++ b/types.go @@ -20,10 +20,20 @@ type IMMsgNode struct { next *IMMsgNode } +type Pagination struct { + Total int32 + Count int32 + PerPage int32 + CurrentPage int32 + TotalPages int32 + Rows *DataSet +} + type HandlerFunc func(*Context) type QueryResultCb func (error, *DataSet); type QueryOneCb func (error, *[]*string); +type PageQueryCb func (error, Pagination); type ExecResultCb func (error, int64, int64); type middleware struct {