XiaoFeiASK commented on code in PR #1152:
URL: 
https://github.com/apache/incubator-seata-go/pull/1152#discussion_r3926168680


##########
pkg/datasource/sql/exec/at/base_executor.go:
##########
@@ -218,73 +218,50 @@ func (b *baseExecutor) traversalArgs(node ast.Node, 
argsIndex *[]int32) {
        if node == nil {
                return
        }
-       switch node.(type) {
+       switch expr := node.(type) {
        case *ast.BinaryOperationExpr:
-               expr := node.(*ast.BinaryOperationExpr)
                b.traversalArgs(expr.L, argsIndex)
                b.traversalArgs(expr.R, argsIndex)
-               break
        case *ast.BetweenExpr:
-               expr := node.(*ast.BetweenExpr)
                b.traversalArgs(expr.Left, argsIndex)
                b.traversalArgs(expr.Right, argsIndex)
-               break
        case *ast.PatternInExpr:

Review Comment:
   这里`traversalArgs`好像没有处理`ast.ParenthesesExpr`
   例如 SQL:
   `WHERE (id = ? OR name = ?) AND tenant_id = ?`
   括号内的两个参数不会被遍历到,最终生成的 SELECT ... FOR UPDATE 含有 3 个占位符,却只会传入 1 个参数,导致参数数量不匹配。
   建议补充:
   ```
   case *ast.ParenthesesExpr:
       b.traversalArgs(expr.Expr, argsIndex)
   ```



##########
pkg/datasource/sql/exec/at/base_executor.go:
##########
@@ -218,73 +218,50 @@ func (b *baseExecutor) traversalArgs(node ast.Node, 
argsIndex *[]int32) {
        if node == nil {
                return
        }
-       switch node.(type) {
+       switch expr := node.(type) {
        case *ast.BinaryOperationExpr:
-               expr := node.(*ast.BinaryOperationExpr)
                b.traversalArgs(expr.L, argsIndex)
                b.traversalArgs(expr.R, argsIndex)
-               break
        case *ast.BetweenExpr:
-               expr := node.(*ast.BetweenExpr)
                b.traversalArgs(expr.Left, argsIndex)
                b.traversalArgs(expr.Right, argsIndex)
-               break
        case *ast.PatternInExpr:

Review Comment:
   可以检查一下这个问题是否存在



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to