如何使用builder 支持mysql的函数 #55

Closed
opened 2019-06-20 15:54:47 +00:00 by creaplus · 3 comments
data := make([]builder.Eq, 0)
data = append(data, builder.Eq{"content": "JSON_SET(content,'$.topic',2)"})

sql, args,_ := builder.Update(data...).From(TableName).Where(builder.Eq{"id": 1}).ToSQL()

a := make([]interface{}, 0)
a = append(a, sql)

for _, v := range args {
	a = append(a, v)
}

Engine.Exec(a)

会报错:Unsupported type error

我想用 builder 去封装 mysql的json_set(或者其他函数)函数去完成我的业务,我如何实现?

```go data := make([]builder.Eq, 0) data = append(data, builder.Eq{"content": "JSON_SET(content,'$.topic',2)"}) sql, args,_ := builder.Update(data...).From(TableName).Where(builder.Eq{"id": 1}).ToSQL() a := make([]interface{}, 0) a = append(a, sql) for _, v := range args { a = append(a, v) } Engine.Exec(a) ``` 会报错:Unsupported type error 我想用 builder 去封装 mysql的json_set(或者其他函数)函数去完成我的业务,我如何实现?
Owner

能贴下生成的SQL吗?

能贴下生成的SQL吗?
Author

sql, args 变量打印出来是这个样子

UPDATE feed_content SET content=? WHERE id=? [JSON_SET(content,'$.topic',2) 1]

我现在是使用 拼SQL,直接执行SQL去完成我的业务逻辑

sql, args 变量打印出来是这个样子 UPDATE feed_content SET content=? WHERE id=? [JSON_SET(content,'$.topic',2) 1] 我现在是使用 拼SQL,直接执行SQL去完成我的业务逻辑
lunny added the
enhancement
label 2019-07-11 02:47:15 +00:00
Owner

#56 will fix this one. After that merged, you can use Expr to do that.

data := make([]builder.Cond, 0)
data = append(data, builder.Expr("content = JSON_SET(content,'$.topic',2)"))

sql, args,_ := builder.Update(data...).From(TableName).Where(builder.Eq{"id": 1}).ToSQL()

a := make([]interface{}, 0)
a = append(a, sql)

for _, v := range args {
	a = append(a, v)
}

Engine.Exec(a)
https://gitea.com/xorm/builder/pulls/56 will fix this one. After that merged, you can use `Expr` to do that. ```go data := make([]builder.Cond, 0) data = append(data, builder.Expr("content = JSON_SET(content,'$.topic',2)")) sql, args,_ := builder.Update(data...).From(TableName).Where(builder.Eq{"id": 1}).ToSQL() a := make([]interface{}, 0) a = append(a, sql) for _, v := range args { a = append(a, v) } Engine.Exec(a) ```
lunny closed this issue 2019-07-11 02:49:52 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/builder#55
No description provided.