MCPcopy Index your code
hub / github.com/bytebase/bytebase / skipHeadingSQLs

Function skipHeadingSQLs

backend/plugin/parser/mysql/completion.go:1057–1091  ·  view source on GitHub ↗

caretLine is 1-based and caretOffset is 0-based.

(statement string, caretLine int, caretOffset int)

Source from the content-addressed store, hash-verified

1055
1056// caretLine is 1-based and caretOffset is 0-based.
1057func 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.
1094func skipHeadingSQLWithoutSemicolon(statement string, caretLine int, caretOffset int) (string, int, int) {

Callers 1

computeSQLAndByteOffsetFunction · 0.70

Calls 5

FilterEmptyStatementsFunction · 0.92
SplitSQLFunction · 0.70
StringMethod · 0.65
GetLineMethod · 0.45
GetColumnMethod · 0.45

Tested by

no test coverage detected