| 98 | } |
| 99 | |
| 100 | func getStatementWithResultLimitInline(statement string, limitCount int) (string, error) { |
| 101 | if strings.TrimSpace(statement) == "" { |
| 102 | return "", errors.New("empty statement") |
| 103 | } |
| 104 | |
| 105 | list, err := mysqlparser.ParseMySQLOmni(statement) |
| 106 | if err != nil { |
| 107 | if stmt, procedureErr := rewriteMySQLSelectProcedureLimit(statement, limitCount); procedureErr == nil { |
| 108 | return stmt, nil |
| 109 | } |
| 110 | return "", err |
| 111 | } |
| 112 | if len(list.Items) != 1 { |
| 113 | return "", errors.Errorf("expected exactly one statement, got %d", len(list.Items)) |
| 114 | } |
| 115 | |
| 116 | stmt, ok := list.Items[0].(*ast.SelectStmt) |
| 117 | if !ok { |
| 118 | return statement, nil |
| 119 | } |
| 120 | |
| 121 | return rewriteMySQLSelectLimit(statement, stmt, limitCount) |
| 122 | } |
| 123 | |
| 124 | func rewriteMySQLSelectProcedureLimit(sql string, limitCount int) (string, error) { |
| 125 | statements, err := mysqlparser.SplitSQL(sql) |