caretLine is 1-based and caretOffset is 0-based.
(statement string, caretLine int, caretOffset int)
| 1055 | |
| 1056 | // caretLine is 1-based and caretOffset is 0-based. |
| 1057 | func skipHeadingSQLs(statement string, caretLine int, caretOffset int) (string, int, int) { |
| 1058 | newCaretLine, newCaretOffset := caretLine, caretOffset |
| 1059 | list, err := SplitSQL(statement) |
| 1060 | if err != nil || len(base.FilterEmptyStatements(list)) <= 1 { |
| 1061 | return statement, caretLine, caretOffset |
| 1062 | } |
| 1063 | |
| 1064 | start := 0 |
| 1065 | for i, sql := range list { |
| 1066 | sqlEndLine := int(sql.End.GetLine()) |
| 1067 | sqlEndColumn := int(sql.End.GetColumn()) |
| 1068 | if sqlEndLine > caretLine || (sqlEndLine == caretLine && sqlEndColumn > caretOffset) { |
| 1069 | start = i |
| 1070 | if i == 0 { |
| 1071 | break |
| 1072 | } |
| 1073 | previousSQLEndLine := int(list[i-1].End.GetLine()) |
| 1074 | previousSQLEndColumn := int(list[i-1].End.GetColumn()) |
| 1075 | newCaretLine = caretLine - previousSQLEndLine + 1 |
| 1076 | if caretLine == previousSQLEndLine { |
| 1077 | newCaretOffset = caretOffset - previousSQLEndColumn + 1 |
| 1078 | } |
| 1079 | break |
| 1080 | } |
| 1081 | } |
| 1082 | |
| 1083 | var buf strings.Builder |
| 1084 | for i := start; i < len(list); i++ { |
| 1085 | if _, err := buf.WriteString(list[i].Text); err != nil { |
| 1086 | return statement, caretLine, caretOffset |
| 1087 | } |
| 1088 | } |
| 1089 | |
| 1090 | return buf.String(), newCaretLine, newCaretOffset |
| 1091 | } |
| 1092 | |
| 1093 | // caretLine is 1-based and caretOffset is 0-based. |
| 1094 | func skipHeadingSQLWithoutSemicolon(statement string, caretLine int, caretOffset int) (string, int, int) { |
no test coverage detected