新增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) paramsLength := len(params)
switch paramsLength { switch paramsLength {
case 5: //四个参数{subquery} case 4: //SubWhere专用4+1参数
fmt.Println(5, "new") res, err := b.parseParams(params, ormApi)
fmt.Println(params) if err != nil {
return "", errors.New("test") return res, err
}
where = append(where, condition+" "+res)
case 3: // 常规3个参数: {"id",">",1} case 3: // 常规3个参数: {"id",">",1}
res, err := b.parseParams(params, ormApi) res, err := b.parseParams(params, ormApi)
if err != nil { if err != nil {
@@ -605,6 +607,30 @@ func (b *BuilderDefault) parseParams(args []interface{}, ormApi IOrm) (s string,
var paramsToArr []string var paramsToArr []string
switch paramsLength { 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} case 3: // 常规3个参数: {"id",">",1}
//if !inArray(argsReal[1], b.GetRegex()) { //if !inArray(argsReal[1], b.GetRegex()) {
if !inArray(argsReal[1], b.GetOperator()) { 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 // Where : query or execute where condition, the relation is and
func (dba *Orm) SubWhere(field, condition, alias, sql string, args []interface{}) IOrm { func (dba *Orm) SubWhere(field, condition, sql string, args []interface{}) IOrm {
dba.Where(field, condition, alias, sql, args) dba.Where(field, condition, "("+sql+")", args)
return dba return dba
} }

View File

@@ -11,7 +11,7 @@ type IOrm interface {
BuildSql(operType ...string) (string, []interface{}, error) BuildSql(operType ...string) (string, []interface{}, error)
Table(tab interface{}) IOrm Table(tab interface{}) IOrm
SubQuery(sql, alias string, args []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=select
Fields(fields ...string) IOrm Fields(fields ...string) IOrm
AddFields(fields ...string) IOrm AddFields(fields ...string) IOrm