-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathintsql.go
More file actions
95 lines (89 loc) · 1.58 KB
/
intsql.go
File metadata and controls
95 lines (89 loc) · 1.58 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
// Arguments to format are: [1]: type name
const intValueMethod = `func (i %[1]s) Value() (driver.Value, error) {
return int64(i), nil
}
`
const intScanMethod = `
var err%[1]sNilPtr = fmt.Errorf("nil pointer")
func (i *%[1]s) Scan(value interface{}) (err error) {
if value == nil {
*i = %[1]s(0)
return
}
switch v := value.(type) {
case int64:
*i = %[1]s(v)
case string:
var val int
// try parsing the integer value as a string
val, err = strconv.Atoi(v)
if err == nil {
*i = %[1]s(val)
}
case []byte:
var val int
val, err = strconv.Atoi(string(v))
if err == nil {
*i = %[1]s(val)
}
case %[1]s:
*i = v
case int:
*i = %[1]s(v)
case *%[1]s:
if v == nil {
return err%[1]sNilPtr
}
*i = *v
case uint:
*i = %[1]s(v)
case uint64:
*i = %[1]s(v)
case *int:
if v == nil {
return err%[1]sNilPtr
}
*i = %[1]s(*v)
case *int64:
if v == nil {
return err%[1]sNilPtr
}
*i = %[1]s(*v)
case float64:
*i = %[1]s(v)
case *float64:
if v == nil {
return err%[1]sNilPtr
}
*i = %[1]s(*v)
case *uint:
if v == nil {
return err%[1]sNilPtr
}
*i = %[1]s(*v)
case *uint64:
if v == nil {
return err%[1]sNilPtr
}
*i = %[1]s(*v)
case *string:
if v == nil {
return err%[1]sNilPtr
}
var val int
// try parsing the integer value as a string
val, err = strconv.Atoi(*v)
if err == nil {
*i, err = %[1]s(val), nil
}
}
return
}
`
func (g *Generator) addIntValueAndScanMethod(typeName string) {
g.Printf("\n")
g.Printf(intValueMethod, typeName)
g.Printf("\n\n")
g.Printf(intScanMethod, typeName)
}