util.go

 1package driver
 2
 3import "database/sql/driver"
 4
 5func namedValues(args []driver.Value) []driver.NamedValue {
 6	named := make([]driver.NamedValue, len(args))
 7	for i, v := range args {
 8		named[i] = driver.NamedValue{
 9			Ordinal: i + 1,
10			Value:   v,
11		}
12	}
13	return named
14}
15
16func notWhitespace(sql string) bool {
17	const (
18		code = iota
19		slash
20		minus
21		ccomment
22		sqlcomment
23		endcomment
24	)
25
26	state := code
27	for _, b := range ([]byte)(sql) {
28		if b == 0 {
29			break
30		}
31
32		switch state {
33		case code:
34			switch b {
35			case '/':
36				state = slash
37			case '-':
38				state = minus
39			case ' ', ';', '\t', '\n', '\v', '\f', '\r':
40				continue
41			default:
42				return true
43			}
44		case slash:
45			if b != '*' {
46				return true
47			}
48			state = ccomment
49		case minus:
50			if b != '-' {
51				return true
52			}
53			state = sqlcomment
54		case ccomment:
55			if b == '*' {
56				state = endcomment
57			}
58		case sqlcomment:
59			if b == '\n' {
60				state = code
61			}
62		case endcomment:
63			switch b {
64			case '/':
65				state = code
66			case '*':
67				state = endcomment
68			default:
69				state = ccomment
70			}
71		}
72	}
73	return state == slash || state == minus
74}