Browse Source

实现了记录谓词生成错误的功能

pull/72/head
allanwei 3 years ago
parent
commit
bd25f5988b
4 changed files with 62 additions and 27 deletions
  1. +2
    -2
      grmi/ConditionItem.go
  2. +1
    -1
      grmi/Field.go
  3. +9
    -3
      grmi/Predicate.go
  4. +50
    -21
      grmi/grmi.go

+ 2
- 2
grmi/ConditionItem.go View File

@ -2,11 +2,11 @@ package grmi
type ConditionItem struct { type ConditionItem struct {
Field Field
PredicateType func(Predicate) string
PredicateType func(Predicate) (string, error)
OrderBy bool OrderBy bool
valueParser func(string) (interface{}, error) valueParser func(string) (interface{}, error)
} }
func NewConditionItem(field Field, predicateType func(Predicate) string, orderBy bool) ConditionItem {
func NewConditionItem(field Field, predicateType func(Predicate) (string, error), orderBy bool) ConditionItem {
return ConditionItem{field, predicateType, orderBy, nil} return ConditionItem{field, predicateType, orderBy, nil}
} }

+ 1
- 1
grmi/Field.go View File

@ -11,6 +11,6 @@ func NewField(name string, columnName string, urlParameterName string, goType Go
return Field{name, columnName, urlParameterName, goType} return Field{name, columnName, urlParameterName, goType}
} }
func (field *Field) NewPredicate(predicateType func(Predicate) string, values ...interface{}) Predicate {
func (field *Field) NewPredicate(predicateType func(Predicate) (string, error), values ...interface{}) Predicate {
return NewPredicate(field.ColumnName, predicateType, values) return NewPredicate(field.ColumnName, predicateType, values)
} }

+ 9
- 3
grmi/Predicate.go View File

@ -1,15 +1,21 @@
package grmi package grmi
import "log"
type Predicate struct { type Predicate struct {
ColumnName string ColumnName string
PredicateType func(Predicate) string
PredicateType func(Predicate) (string, error)
Values []interface{} Values []interface{}
} }
func NewPredicate(columnName string, predicateType func(Predicate) string, values []interface{}) Predicate {
func NewPredicate(columnName string, predicateType func(Predicate) (string, error), values []interface{}) Predicate {
return Predicate{columnName, predicateType, values} return Predicate{columnName, predicateType, values}
} }
func (self *Predicate) Build() string { func (self *Predicate) Build() string {
return self.PredicateType(*self)
result, err := self.PredicateType(*self)
if err != nil {
log.Println(err.Error())
}
return result
} }

+ 50
- 21
grmi/grmi.go View File

@ -4,6 +4,7 @@ import (
"LAPP_GAAS_GFrame_BACKEND/container" "LAPP_GAAS_GFrame_BACKEND/container"
"LAPP_GAAS_GFrame_BACKEND/utils" "LAPP_GAAS_GFrame_BACKEND/utils"
"LAPP_GAAS_GFrame_BACKEND/web/models" "LAPP_GAAS_GFrame_BACKEND/web/models"
"errors"
"fmt" "fmt"
"github.com/kataras/iris/v12/core/router" "github.com/kataras/iris/v12/core/router"
"strconv" "strconv"
@ -68,48 +69,76 @@ func RepeatStrings(content string, count int) []string {
return result return result
} }
func Equal(predicate Predicate) string {
return fmt.Sprintf(" and %s = ?", predicate.ColumnName)
func Equal(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("相等性比较只支持一个参数")
}
return fmt.Sprintf(" and %s = ?", predicate.ColumnName), nil
} }
func NotEqual(predicate Predicate) string {
return fmt.Sprintf(" and %s <> ?", predicate.ColumnName)
func NotEqual(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("相等性比较只支持一个参数")
}
return fmt.Sprintf(" and %s <> ?", predicate.ColumnName), nil
} }
func Like(predicate Predicate) string {
return fmt.Sprintf(" and %s like concat('%%', ?, '%%')", predicate.ColumnName)
func Like(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("相似性比较只支持一个参数")
}
return fmt.Sprintf(" and %s like concat('%%', ?, '%%')", predicate.ColumnName), nil
} }
func NotLike(predicate Predicate) string {
return fmt.Sprintf(" and %s not like concat('%%', ?, '%%')", predicate.ColumnName)
func NotLike(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("相似性比较只支持一个参数")
}
return fmt.Sprintf(" and %s not like concat('%%', ?, '%%')", predicate.ColumnName), nil
} }
func IsNull(predicate Predicate) string {
return fmt.Sprintf(" and %s is null", predicate.ColumnName)
func IsNull(predicate Predicate) (string, error) {
if predicate.Values != nil && len(predicate.Values) > 0 {
return "", errors.New("为空比较比较不支持参数")
}
return fmt.Sprintf(" and %s is null", predicate.ColumnName), nil
} }
func IsNotNull(predicate Predicate) string {
return fmt.Sprintf(" and %s is not null", predicate.ColumnName)
func IsNotNull(predicate Predicate) (string, error) {
if predicate.Values != nil && len(predicate.Values) > 0 {
return "", errors.New("为空比较比较不支持参数")
}
return fmt.Sprintf(" and %s is not null", predicate.ColumnName), nil
} }
func Include(predicate Predicate) string {
func Include(predicate Predicate) (string, error) {
if predicate.Values != nil && len(predicate.Values) > 0 { if predicate.Values != nil && len(predicate.Values) > 0 {
return fmt.Sprintf(" and %s in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ","))
return fmt.Sprintf(" and %s in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ",")), nil
} else { } else {
return " and 1 <> 1"
return " and 1 <> 1", nil
} }
} }
func Exclude(predicate Predicate) string {
return fmt.Sprintf(" and %s not in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ","))
func Exclude(predicate Predicate) (string, error) {
if predicate.Values != nil && len(predicate.Values) > 0 {
return fmt.Sprintf(" and %s not in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ",")), nil
} else {
return " and 1 = 1", nil
}
} }
func Approximate(predicate Predicate) string {
return fmt.Sprintf(" and datediff(second, %s, ?) = 0", predicate.ColumnName)
func Approximate(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("约等于比较比较只支持一个参数")
}
return fmt.Sprintf(" and datediff(second, %s, ?) = 0", predicate.ColumnName), nil
} }
func NotApproximate(predicate Predicate) string {
return fmt.Sprintf(" and datediff(second, %s, ?) <> 0", predicate.ColumnName)
func NotApproximate(predicate Predicate) (string, error) {
if predicate.Values == nil || len(predicate.Values) != 1 {
return "", errors.New("约等于比较比较只支持一个参数")
}
return fmt.Sprintf(" and datediff(second, %s, ?) <> 0", predicate.ColumnName), nil
} }
func Log(user *models.Usertab, codeFile string, function string, message string) { func Log(user *models.Usertab, codeFile string, function string, message string) {


Loading…
Cancel
Save