新增SubWhere

This commit is contained in:
火线兔
2023-08-09 12:59:15 +08:00
parent fe12c77081
commit b51360b8f3
3 changed files with 33 additions and 7 deletions

View File

@@ -452,10 +452,12 @@ func (b *BuilderDefault) parseWhere(ormApi IOrm) (string, error) {
paramsLength := len(params)
switch paramsLength {
case 5: //四个参数{subquery}
fmt.Println(5, "new")
fmt.Println(params)
return "", errors.New("test")
case 4: //SubWhere专用4+1参数
res, err := b.parseParams(params, ormApi)
if err != nil {
return res, err
}
where = append(where, condition+" "+res)
case 3: // 常规3个参数: {"id",">",1}
res, err := b.parseParams(params, ormApi)
if err != nil {
@@ -605,6 +607,30 @@ func (b *BuilderDefault) parseParams(args []interface{}, ormApi IOrm) (s string,
var paramsToArr []string
switch paramsLength {
case 4: //SubWhere专用4+1参数
if !inArray(argsReal[1], b.GetOperator()) {
err = errors.New("where parameter is wrong")
b.IOrm.GetISession().GetIEngin().GetLogger().Error(err.Error())
return
}
//paramsToArr = append(paramsToArr, argsReal[0].(string))
paramsToArr = append(paramsToArr, b.current.AddFieldQuotes(argsReal[0].(string)))
paramsToArr = append(paramsToArr, argsReal[1].(string))
switch strings.Trim(strings.ToLower(t.New(argsReal[1]).String()), " ") {
//case "like", "not like":
// paramsToArr = append(paramsToArr, b.GetPlaceholder())
// b.SetBindValues(argsReal[2])
case "in", "not in":
paramsToArr = append(paramsToArr, "("+argsReal[2].(string)+")")
paramsToArr = append(paramsToArr, b.GetPlaceholder())
b.SetBindValues(argsReal[3])
default:
paramsToArr = append(paramsToArr, b.GetPlaceholder())
b.SetBindValues(argsReal[3])
}
case 3: // 常规3个参数: {"id",">",1}
//if !inArray(argsReal[1], b.GetRegex()) {
if !inArray(argsReal[1], b.GetOperator()) {

4
orm.go
View File

@@ -177,8 +177,8 @@ func (dba *Orm) Page(page int) IOrm {
}
// Where : query or execute where condition, the relation is and
func (dba *Orm) SubWhere(field, condition, alias, sql string, args []interface{}) IOrm {
dba.Where(field, condition, alias, sql, args)
func (dba *Orm) SubWhere(field, condition, sql string, args []interface{}) IOrm {
dba.Where(field, condition, "("+sql+")", args)
return dba
}

View File

@@ -11,7 +11,7 @@ type IOrm interface {
BuildSql(operType ...string) (string, []interface{}, error)
Table(tab interface{}) IOrm
SubQuery(sql, alias string, args []interface{}) IOrm
SubWhere(field, condition, alias, sql string, args []interface{}) IOrm
SubWhere(field, condition, sql string, args []interface{}) IOrm
// fields=select
Fields(fields ...string) IOrm
AddFields(fields ...string) IOrm