summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/driver/util.go
blob: 9875855763475f06099707f5e8db134e6d40c4ab (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
62
63
64
65
66
67
68
69
70
71
72
73
74
package driver

import "database/sql/driver"

func namedValues(args []driver.Value) []driver.NamedValue {
	named := make([]driver.NamedValue, len(args))
	for i, v := range args {
		named[i] = driver.NamedValue{
			Ordinal: i + 1,
			Value:   v,
		}
	}
	return named
}

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
}