summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go
blob: 8f45706f5a36dc1fc8a1624c937495be56b61d28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package driver

func notWhitespace(sql string) bool {
	const (
		code = iota
		slash
		minus
		ccomment
		sqlcomment
		endcomment
	)

	state := code
	for _, b := range ([]byte)(sql) {
		if b == 0 {
			break
		}

		switch state {
		case code:
			switch b {
			case '/':
				state = slash
			case '-':
				state = minus
			case ' ', ';', '\t', '\n', '\v', '\f', '\r':
				continue
			default:
				return true
			}
		case slash:
			if b != '*' {
				return true
			}
			state = ccomment
		case minus:
			if b != '-' {
				return true
			}
			state = sqlcomment
		case ccomment:
			if b == '*' {
				state = endcomment
			}
		case sqlcomment:
			if b == '\n' {
				state = code
			}
		case endcomment:
			switch b {
			case '/':
				state = code
			case '*':
				state = endcomment
			default:
				state = ccomment
			}
		}
	}
	return state == slash || state == minus
}