1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package migration
18
19 import (
20 "bytes"
21 "context"
22 "fmt"
23 "io"
24 "math"
25 "net/http"
26 "net/url"
27
28 migrationpb "cloud.google.com/go/bigquery/migration/apiv2alpha/migrationpb"
29 gax "github.com/googleapis/gax-go/v2"
30 "google.golang.org/api/googleapi"
31 "google.golang.org/api/option"
32 "google.golang.org/api/option/internaloption"
33 gtransport "google.golang.org/api/transport/grpc"
34 httptransport "google.golang.org/api/transport/http"
35 "google.golang.org/grpc"
36 "google.golang.org/protobuf/encoding/protojson"
37 )
38
39 var newSqlTranslationClientHook clientHook
40
41
42 type SqlTranslationCallOptions struct {
43 TranslateQuery []gax.CallOption
44 }
45
46 func defaultSqlTranslationGRPCClientOptions() []option.ClientOption {
47 return []option.ClientOption{
48 internaloption.WithDefaultEndpoint("bigquerymigration.googleapis.com:443"),
49 internaloption.WithDefaultEndpointTemplate("bigquerymigration.UNIVERSE_DOMAIN:443"),
50 internaloption.WithDefaultMTLSEndpoint("bigquerymigration.mtls.googleapis.com:443"),
51 internaloption.WithDefaultUniverseDomain("googleapis.com"),
52 internaloption.WithDefaultAudience("https://bigquerymigration.googleapis.com/"),
53 internaloption.WithDefaultScopes(DefaultAuthScopes()...),
54 internaloption.EnableJwtWithScope(),
55 option.WithGRPCDialOption(grpc.WithDefaultCallOptions(
56 grpc.MaxCallRecvMsgSize(math.MaxInt32))),
57 }
58 }
59
60 func defaultSqlTranslationCallOptions() *SqlTranslationCallOptions {
61 return &SqlTranslationCallOptions{
62 TranslateQuery: []gax.CallOption{},
63 }
64 }
65
66 func defaultSqlTranslationRESTCallOptions() *SqlTranslationCallOptions {
67 return &SqlTranslationCallOptions{
68 TranslateQuery: []gax.CallOption{},
69 }
70 }
71
72
73 type internalSqlTranslationClient interface {
74 Close() error
75 setGoogleClientInfo(...string)
76 Connection() *grpc.ClientConn
77 TranslateQuery(context.Context, *migrationpb.TranslateQueryRequest, ...gax.CallOption) (*migrationpb.TranslateQueryResponse, error)
78 }
79
80
81
82
83
84 type SqlTranslationClient struct {
85
86 internalClient internalSqlTranslationClient
87
88
89 CallOptions *SqlTranslationCallOptions
90 }
91
92
93
94
95
96 func (c *SqlTranslationClient) Close() error {
97 return c.internalClient.Close()
98 }
99
100
101
102
103 func (c *SqlTranslationClient) setGoogleClientInfo(keyval ...string) {
104 c.internalClient.setGoogleClientInfo(keyval...)
105 }
106
107
108
109
110
111 func (c *SqlTranslationClient) Connection() *grpc.ClientConn {
112 return c.internalClient.Connection()
113 }
114
115
116 func (c *SqlTranslationClient) TranslateQuery(ctx context.Context, req *migrationpb.TranslateQueryRequest, opts ...gax.CallOption) (*migrationpb.TranslateQueryResponse, error) {
117 return c.internalClient.TranslateQuery(ctx, req, opts...)
118 }
119
120
121
122
123 type sqlTranslationGRPCClient struct {
124
125 connPool gtransport.ConnPool
126
127
128 CallOptions **SqlTranslationCallOptions
129
130
131 sqlTranslationClient migrationpb.SqlTranslationServiceClient
132
133
134 xGoogHeaders []string
135 }
136
137
138
139
140
141 func NewSqlTranslationClient(ctx context.Context, opts ...option.ClientOption) (*SqlTranslationClient, error) {
142 clientOpts := defaultSqlTranslationGRPCClientOptions()
143 if newSqlTranslationClientHook != nil {
144 hookOpts, err := newSqlTranslationClientHook(ctx, clientHookParams{})
145 if err != nil {
146 return nil, err
147 }
148 clientOpts = append(clientOpts, hookOpts...)
149 }
150
151 connPool, err := gtransport.DialPool(ctx, append(clientOpts, opts...)...)
152 if err != nil {
153 return nil, err
154 }
155 client := SqlTranslationClient{CallOptions: defaultSqlTranslationCallOptions()}
156
157 c := &sqlTranslationGRPCClient{
158 connPool: connPool,
159 sqlTranslationClient: migrationpb.NewSqlTranslationServiceClient(connPool),
160 CallOptions: &client.CallOptions,
161 }
162 c.setGoogleClientInfo()
163
164 client.internalClient = c
165
166 return &client, nil
167 }
168
169
170
171
172
173 func (c *sqlTranslationGRPCClient) Connection() *grpc.ClientConn {
174 return c.connPool.Conn()
175 }
176
177
178
179
180 func (c *sqlTranslationGRPCClient) setGoogleClientInfo(keyval ...string) {
181 kv := append([]string{"gl-go", gax.GoVersion}, keyval...)
182 kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "grpc", grpc.Version)
183 c.xGoogHeaders = []string{"x-goog-api-client", gax.XGoogHeader(kv...)}
184 }
185
186
187
188 func (c *sqlTranslationGRPCClient) Close() error {
189 return c.connPool.Close()
190 }
191
192
193 type sqlTranslationRESTClient struct {
194
195 endpoint string
196
197
198 httpClient *http.Client
199
200
201 xGoogHeaders []string
202
203
204 CallOptions **SqlTranslationCallOptions
205 }
206
207
208
209
210 func NewSqlTranslationRESTClient(ctx context.Context, opts ...option.ClientOption) (*SqlTranslationClient, error) {
211 clientOpts := append(defaultSqlTranslationRESTClientOptions(), opts...)
212 httpClient, endpoint, err := httptransport.NewClient(ctx, clientOpts...)
213 if err != nil {
214 return nil, err
215 }
216
217 callOpts := defaultSqlTranslationRESTCallOptions()
218 c := &sqlTranslationRESTClient{
219 endpoint: endpoint,
220 httpClient: httpClient,
221 CallOptions: &callOpts,
222 }
223 c.setGoogleClientInfo()
224
225 return &SqlTranslationClient{internalClient: c, CallOptions: callOpts}, nil
226 }
227
228 func defaultSqlTranslationRESTClientOptions() []option.ClientOption {
229 return []option.ClientOption{
230 internaloption.WithDefaultEndpoint("https://bigquerymigration.googleapis.com"),
231 internaloption.WithDefaultEndpointTemplate("https://bigquerymigration.UNIVERSE_DOMAIN"),
232 internaloption.WithDefaultMTLSEndpoint("https://bigquerymigration.mtls.googleapis.com"),
233 internaloption.WithDefaultUniverseDomain("googleapis.com"),
234 internaloption.WithDefaultAudience("https://bigquerymigration.googleapis.com/"),
235 internaloption.WithDefaultScopes(DefaultAuthScopes()...),
236 }
237 }
238
239
240
241
242 func (c *sqlTranslationRESTClient) setGoogleClientInfo(keyval ...string) {
243 kv := append([]string{"gl-go", gax.GoVersion}, keyval...)
244 kv = append(kv, "gapic", getVersionClient(), "gax", gax.Version, "rest", "UNKNOWN")
245 c.xGoogHeaders = []string{"x-goog-api-client", gax.XGoogHeader(kv...)}
246 }
247
248
249
250 func (c *sqlTranslationRESTClient) Close() error {
251
252 c.httpClient = nil
253 return nil
254 }
255
256
257
258
259 func (c *sqlTranslationRESTClient) Connection() *grpc.ClientConn {
260 return nil
261 }
262 func (c *sqlTranslationGRPCClient) TranslateQuery(ctx context.Context, req *migrationpb.TranslateQueryRequest, opts ...gax.CallOption) (*migrationpb.TranslateQueryResponse, error) {
263 hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))}
264
265 hds = append(c.xGoogHeaders, hds...)
266 ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...)
267 opts = append((*c.CallOptions).TranslateQuery[0:len((*c.CallOptions).TranslateQuery):len((*c.CallOptions).TranslateQuery)], opts...)
268 var resp *migrationpb.TranslateQueryResponse
269 err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
270 var err error
271 resp, err = c.sqlTranslationClient.TranslateQuery(ctx, req, settings.GRPC...)
272 return err
273 }, opts...)
274 if err != nil {
275 return nil, err
276 }
277 return resp, nil
278 }
279
280
281 func (c *sqlTranslationRESTClient) TranslateQuery(ctx context.Context, req *migrationpb.TranslateQueryRequest, opts ...gax.CallOption) (*migrationpb.TranslateQueryResponse, error) {
282 m := protojson.MarshalOptions{AllowPartial: true, UseEnumNumbers: true}
283 jsonReq, err := m.Marshal(req)
284 if err != nil {
285 return nil, err
286 }
287
288 baseUrl, err := url.Parse(c.endpoint)
289 if err != nil {
290 return nil, err
291 }
292 baseUrl.Path += fmt.Sprintf("/v2alpha/%v:translateQuery", req.GetParent())
293
294
295 hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "parent", url.QueryEscape(req.GetParent()))}
296
297 hds = append(c.xGoogHeaders, hds...)
298 hds = append(hds, "Content-Type", "application/json")
299 headers := gax.BuildHeaders(ctx, hds...)
300 opts = append((*c.CallOptions).TranslateQuery[0:len((*c.CallOptions).TranslateQuery):len((*c.CallOptions).TranslateQuery)], opts...)
301 unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true}
302 resp := &migrationpb.TranslateQueryResponse{}
303 e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
304 if settings.Path != "" {
305 baseUrl.Path = settings.Path
306 }
307 httpReq, err := http.NewRequest("POST", baseUrl.String(), bytes.NewReader(jsonReq))
308 if err != nil {
309 return err
310 }
311 httpReq = httpReq.WithContext(ctx)
312 httpReq.Header = headers
313
314 httpRsp, err := c.httpClient.Do(httpReq)
315 if err != nil {
316 return err
317 }
318 defer httpRsp.Body.Close()
319
320 if err = googleapi.CheckResponse(httpRsp); err != nil {
321 return err
322 }
323
324 buf, err := io.ReadAll(httpRsp.Body)
325 if err != nil {
326 return err
327 }
328
329 if err := unm.Unmarshal(buf, resp); err != nil {
330 return err
331 }
332
333 return nil
334 }, opts...)
335 if e != nil {
336 return nil, e
337 }
338 return resp, nil
339 }
340
View as plain text