func parseQueryString()

in analysis/app/parse.go [15:60]


func parseQueryString(q string) (string, []string) {
	var queries []string
	var parts []string
	var prefix string
	quoting := false
	for r := 0; r < len(q); {
		switch c := q[r]; {
		case c == '"' && quoting:
			quoting = false
			r++
		case quoting:
			if c == '\\' {
				r++
			}
			r++
		case c == '"':
			quoting = true
			r++
		case c == ' ', c == '\t':
			switch part := q[:r]; {
			case part == "|" && prefix == "":
				prefix = strings.Join(parts, " ")
				parts = nil
			case part == "vs":
				queries = append(queries, strings.Join(parts, " "))
				parts = nil
			default:
				parts = append(parts, part)
			}
			q = q[r+1:]
			r = 0
		default:
			if c == '\\' {
				r++
			}
			r++
		}
	}
	if len(q) > 0 {
		parts = append(parts, q)
	}
	if len(parts) > 0 {
		queries = append(queries, strings.Join(parts, " "))
	}
	return prefix, queries
}