1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Routine = void 0;
|
4 | /*!
|
5 | * Copyright 2020 Google LLC
|
6 | *
|
7 | * Licensed under the Apache License, Version 2.0 (the "License");
|
8 | * you may not use this file except in compliance with the License.
|
9 | * You may obtain a copy of the License at
|
10 | *
|
11 | * http://www.apache.org/licenses/LICENSE-2.0
|
12 | *
|
13 | * Unless required by applicable law or agreed to in writing, software
|
14 | * distributed under the License is distributed on an "AS IS" BASIS,
|
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16 | * See the License for the specific language governing permissions and
|
17 | * limitations under the License.
|
18 | */
|
19 | const common_1 = require("@google-cloud/common");
|
20 | const promisify_1 = require("@google-cloud/promisify");
|
21 | const extend = require("extend");
|
22 | /**
|
23 | * Routine objects are returned by methods such as
|
24 | * {@link Dataset#routine}, {@link Dataset#createRoutine}, and
|
25 | * {@link Dataset#getRoutines}.
|
26 | *
|
27 | * @class
|
28 | * @param {Dataset} dataset {@link Dataset} instance.
|
29 | * @param {string} id The ID of the routine.
|
30 | *
|
31 | * @example
|
32 | * ```
|
33 | * const {BigQuery} = require('@google-cloud/bigquery');
|
34 | * const bigquery = new BigQuery();
|
35 | * const dataset = bigquery.dataset('my-dataset');
|
36 | *
|
37 | * const routine = dataset.routine('my_routine');
|
38 | * ```
|
39 | */
|
40 | class Routine extends common_1.ServiceObject {
|
41 | constructor(dataset, id) {
|
42 | const methods = {
|
43 | /**
|
44 | * Create a routine.
|
45 | *
|
46 | * See {@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/insert| Routines: insert API Documentation}
|
47 | *
|
48 | * @method Routine#create
|
49 | * @param {object} config A [routine resource]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines#Routine}.
|
50 | * @param {CreateRoutineCallback} [callback] The callback function.
|
51 | * @returns {Promise<CreateRoutineResponse>}
|
52 | *
|
53 | * @example
|
54 | * ```
|
55 | * const {BigQuery} = require('@google-cloud/bigquery');
|
56 | * const bigquery = new BigQuery();
|
57 | * const dataset = bigquery.dataset('my-dataset');
|
58 | * const routine = dataset.routine('my_routine');
|
59 | *
|
60 | * const config = {
|
61 | * arguments: [{
|
62 | * name: 'x',
|
63 | * dataType: {
|
64 | * typeKind: 'INT64'
|
65 | * }
|
66 | * }],
|
67 | * definitionBody: 'x * 3',
|
68 | * routineType: 'SCALAR_FUNCTION',
|
69 | * returnType: {
|
70 | * typeKind: 'INT64'
|
71 | * }
|
72 | * };
|
73 | *
|
74 | * routine.create(config, (err, routine, apiResponse) => {
|
75 | * if (!err) {
|
76 | * // The routine was created successfully.
|
77 | * }
|
78 | * });
|
79 | *
|
80 | * ```
|
81 | * @example If the callback is omitted a Promise will be returned
|
82 | * ```
|
83 | * const [routine, apiResponse] = await routine.create(config);
|
84 | * ```
|
85 | */
|
86 | create: true,
|
87 | /**
|
88 | * @callback DeleteRoutineCallback
|
89 | * @param {?Error} err Request error, if any.
|
90 | * @param {object} apiResponse The full API response.
|
91 | */
|
92 | /**
|
93 | * @typedef {array} DeleteRoutineResponse
|
94 | * @property {object} 0 The full API response.
|
95 | */
|
96 | /**
|
97 | * Deletes a routine.
|
98 | *
|
99 | * See {@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/delete| Routines: delete API Documentation}
|
100 | *
|
101 | * @method Routine#delete
|
102 | * @param {DeleteRoutineCallback} [callback] The callback function.
|
103 | * @returns {Promise<DeleteRoutineResponse>}
|
104 | *
|
105 | * @example
|
106 | * ```
|
107 | * const {BigQuery} = require('@google-cloud/bigquery');
|
108 | * const bigquery = new BigQuery();
|
109 | * const dataset = bigquery.dataset('my-dataset');
|
110 | * const routine = dataset.routine('my_routine');
|
111 | *
|
112 | * routine.delete((err, apiResponse) => {
|
113 | * if (!err) {
|
114 | * // The routine was deleted successfully.
|
115 | * }
|
116 | * });
|
117 | *
|
118 | * ```
|
119 | * @example If the callback is omitted a Promise will be returned
|
120 | * ```
|
121 | * const [apiResponse] = await routine.delete();
|
122 | * ```
|
123 | */
|
124 | delete: true,
|
125 | /**
|
126 | * @callback RoutineExistsCallback
|
127 | * @param {?Error} err Request error, if any.
|
128 | * @param {boolean} exists Indicates if the routine exists.
|
129 | */
|
130 | /**
|
131 | * @typedef {array} RoutineExistsResponse
|
132 | * @property {boolean} 0 Indicates if the routine exists.
|
133 | */
|
134 | /**
|
135 | * Check if the routine exists.
|
136 | *
|
137 | * @method Routine#exists
|
138 | * @param {RoutineExistsCallback} [callback] The callback function.
|
139 | * @returns {Promise<RoutineExistsResponse>}
|
140 | *
|
141 | * @example
|
142 | * ```
|
143 | * const {BigQuery} = require('@google-cloud/bigquery');
|
144 | * const bigquery = new BigQuery();
|
145 | * const dataset = bigquery.dataset('my-dataset');
|
146 | * const routine = dataset.routine('my_routine');
|
147 | *
|
148 | * routine.exists((err, exists) => {});
|
149 | *
|
150 | * ```
|
151 | * @example If the callback is omitted a Promise will be returned
|
152 | * ```
|
153 | * const [exists] = await routine.exists();
|
154 | * ```
|
155 | */
|
156 | exists: true,
|
157 | /**
|
158 | * @callback GetRoutineCallback
|
159 | * @param {?Error} err Request error, if any.
|
160 | * @param {Routine} routine The routine.
|
161 | * @param {object} apiResponse The full API response body.
|
162 | */
|
163 | /**
|
164 | * @typedef {array} GetRoutineResponse
|
165 | * @property {Routine} 0 The routine.
|
166 | * @property {object} 1 The full API response body.
|
167 | */
|
168 | /**
|
169 | * Get a routine if it exists.
|
170 | *
|
171 | * See {@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/get| Routines: get API Documentation}
|
172 | *
|
173 | * @method Routine#get
|
174 | * @param {GetRoutineCallback} [callback] The callback function.
|
175 | * @returns {Promise<GetRoutineResponse>}
|
176 | *
|
177 | * @example
|
178 | * ```
|
179 | * const {BigQuery} = require('@google-cloud/bigquery');
|
180 | * const bigquery = new BigQuery();
|
181 | * const dataset = bigquery.dataset('my-dataset');
|
182 | * const routine = dataset.routine('my_routine');
|
183 | *
|
184 | * routine.get((err, routine) => {});
|
185 | *
|
186 | * ```
|
187 | * @example If the callback is omitted a Promise will be returned
|
188 | * ```
|
189 | * const [routine2] = await routine.get();
|
190 | * ```
|
191 | */
|
192 | get: true,
|
193 | /**
|
194 | * @callback GetRoutineMetadataCallback
|
195 | * @param {?Error} err Request error, if any.
|
196 | * @param {object} metadata The routine metadata.
|
197 | * @param {object} apiResponse The full API response.
|
198 | */
|
199 | /**
|
200 | * @typedef {array} GetRoutineMetadataResponse
|
201 | * @property {object} 0 The routine metadata.
|
202 | * @property {object} 1 The full API response.
|
203 | */
|
204 | /**
|
205 | * Get the metadata associated with a routine.
|
206 | *
|
207 | * See {@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/get| Routines: get API Documentation}
|
208 | *
|
209 | * @method Routine#getMetadata
|
210 | * @param {GetRoutineMetadataCallback} [callback] The callback function.
|
211 | * @returns {Promise<GetRoutineMetadataResponse>}
|
212 | *
|
213 | * @example
|
214 | * ```
|
215 | * const {BigQuery} = require('@google-cloud/bigquery');
|
216 | * const bigquery = new BigQuery();
|
217 | * const dataset = bigquery.dataset('my-dataset');
|
218 | * const routine = dataset.routine('my_routine');
|
219 | *
|
220 | * routine.getMetadata((err, metadata, apiResponse) => {});
|
221 | *
|
222 | * ```
|
223 | * @example If the callback is omitted a Promise will be returned
|
224 | * ```
|
225 | * const [metadata, apiResponse] = await routine.getMetadata();
|
226 | * ```
|
227 | */
|
228 | getMetadata: true,
|
229 | /**
|
230 | * @callback SetRoutineMetadataCallback
|
231 | * @param {?Error} err Request error, if any.
|
232 | * @param {object} metadata The routine metadata.
|
233 | * @param {object} apiResponse The full API response.
|
234 | */
|
235 | /**
|
236 | * @typedef {array} SetRoutineMetadataResponse
|
237 | * @property {object} 0 The routine metadata.
|
238 | * @property {object} 1 The full API response.
|
239 | */
|
240 | /**
|
241 | * Update a routine.
|
242 | *
|
243 | * See {@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/update| Routines: update API Documentation}
|
244 | *
|
245 | * @method Routine#setMetadata
|
246 | * @param {object} metadata A [routine resource object]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines#Routine}.
|
247 | * @param {SetRoutineMetadataCallback} [callback] The callback function.
|
248 | * @returns {Promise<SetRoutineMetadataResponse>}
|
249 | *
|
250 | * @example
|
251 | * ```
|
252 | * const {BigQuery} = require('@google-cloud/bigquery');
|
253 | * const bigquery = new BigQuery();
|
254 | * const dataset = bigquery.dataset('my-dataset');
|
255 | * const routine = dataset.routine('my_routine');
|
256 | *
|
257 | * const updates = {
|
258 | * description: 'The perfect description!'
|
259 | * };
|
260 | *
|
261 | * routine.setMetadata(updates, (err, metadata, apiResponse) => {});
|
262 | *
|
263 | * ```
|
264 | * @example If the callback is omitted a Promise will be returned
|
265 | * ```
|
266 | * const [metadata, apiResponse] = await routine.setMetadata(updates);
|
267 | * ```
|
268 | */
|
269 | setMetadata: {
|
270 | reqOpts: {
|
271 | method: 'PUT',
|
272 | },
|
273 | },
|
274 | };
|
275 | super({
|
276 | parent: dataset,
|
277 | baseUrl: '/routines',
|
278 | id,
|
279 | methods,
|
280 | createMethod: dataset.createRoutine.bind(dataset),
|
281 | });
|
282 | }
|
283 | setMetadata(metadata, callback) {
|
284 | // per the python client, it would appear that in order to update a routine
|
285 | // you need to send the routine in its entirety, not just the updated fields
|
286 | this.getMetadata((err, fullMetadata) => {
|
287 | if (err) {
|
288 | callback(err);
|
289 | return;
|
290 | }
|
291 | const updatedMetadata = extend(true, {}, fullMetadata, metadata);
|
292 | super.setMetadata(updatedMetadata, callback);
|
293 | });
|
294 | }
|
295 | }
|
296 | exports.Routine = Routine;
|
297 | /*! Developer Documentation
|
298 | *
|
299 | * All async methods (except for streams) will return a Promise in the event
|
300 | * that a callback is omitted.
|
301 | */
|
302 | (0, promisify_1.promisifyAll)(Routine);
|
303 | //# sourceMappingURL=routine.js.map |
\ | No newline at end of file |