@@ -3,6 +3,7 @@ package golang
3
3
import (
4
4
"bufio"
5
5
"bytes"
6
+ "errors"
6
7
"fmt"
7
8
"go/format"
8
9
"strings"
@@ -11,6 +12,7 @@ import (
11
12
"github.com/kyleconroy/sqlc/internal/codegen"
12
13
"github.com/kyleconroy/sqlc/internal/compiler"
13
14
"github.com/kyleconroy/sqlc/internal/config"
15
+ "github.com/kyleconroy/sqlc/internal/metadata"
14
16
)
15
17
16
18
type Generateable interface {
@@ -37,6 +39,7 @@ type tmplCtx struct {
37
39
EmitInterface bool
38
40
EmitEmptySlices bool
39
41
EmitMethodsWithDBArgument bool
42
+ UsesCopyFrom bool
40
43
}
41
44
42
45
func (t * tmplCtx ) OutputQuery (sourceName string ) bool {
@@ -87,6 +90,7 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
87
90
EmitPreparedQueries : golang .EmitPreparedQueries ,
88
91
EmitEmptySlices : golang .EmitEmptySlices ,
89
92
EmitMethodsWithDBArgument : golang .EmitMethodsWithDBArgument ,
93
+ UsesCopyFrom : usesCopyFrom (queries ),
90
94
SQLPackage : SQLPackageFromString (golang .SQLPackage ),
91
95
Q : "`" ,
92
96
Package : golang .Package ,
@@ -95,6 +99,10 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
95
99
Structs : structs ,
96
100
}
97
101
102
+ if tctx .UsesCopyFrom && tctx .SQLPackage != SQLPackagePGX {
103
+ return nil , errors .New (":copyfrom is only supported by pgx" )
104
+ }
105
+
98
106
output := map [string ]string {}
99
107
100
108
execute := func (name , templateName string ) error {
@@ -135,6 +143,8 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
135
143
if golang .OutputQuerierFileName != "" {
136
144
querierFileName = golang .OutputQuerierFileName
137
145
}
146
+ copyfromFileName := "copyfrom.go"
147
+ // TODO(Jille): Make this configurable.
138
148
139
149
if err := execute (dbFileName , "dbFile" ); err != nil {
140
150
return nil , err
@@ -147,6 +157,11 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
147
157
return nil , err
148
158
}
149
159
}
160
+ if tctx .UsesCopyFrom {
161
+ if err := execute (copyfromFileName , "copyfromFile" ); err != nil {
162
+ return nil , err
163
+ }
164
+ }
150
165
151
166
files := map [string ]struct {}{}
152
167
for _ , gq := range queries {
@@ -160,3 +175,12 @@ func generate(settings config.CombinedSettings, enums []Enum, structs []Struct,
160
175
}
161
176
return output , nil
162
177
}
178
+
179
+ func usesCopyFrom (queries []Query ) bool {
180
+ for _ , q := range queries {
181
+ if q .Cmd == metadata .CmdCopyFrom {
182
+ return true
183
+ }
184
+ }
185
+ return false
186
+ }
0 commit comments