MCPcopy Create free account
hub / github.com/Kilo-Org/cloud / executeSnowflakeStatement

Function executeSnowflakeStatement

apps/web/src/lib/snowflake.ts:270–330  ·  view source on GitHub ↗
(params: {
  config: SnowflakeConfig;
  statement: string;
  bindings?: SnowflakeBinding[];
  timeoutSeconds?: number;
  signal?: AbortSignal;
})

Source from the content-addressed store, hash-verified

268 * column-declaration order.
269 */
270export async function executeSnowflakeStatement(params: {
271 config: SnowflakeConfig;
272 statement: string;
273 bindings?: SnowflakeBinding[];
274 timeoutSeconds?: number;
275 signal?: AbortSignal;
276}): Promise<SnowflakeRow[]> {
277 const token = getOrBuildJwt(params.config);
278 const requestId = crypto.randomUUID();
279
280 const url = new URL(`https://${params.config.accountHost}/api/v2/statements`);
281 url.searchParams.set('requestId', requestId);
282
283 const body: Record<string, unknown> = {
284 statement: params.statement,
285 warehouse: params.config.warehouse,
286 database: params.config.database,
287 schema: params.config.schema,
288 role: params.config.role,
289 };
290
291 if (params.bindings && params.bindings.length > 0) {
292 body.bindings = Object.fromEntries(params.bindings.map((b, i) => [String(i + 1), b]));
293 }
294
295 if (params.timeoutSeconds !== undefined) {
296 body.timeout = params.timeoutSeconds;
297 }
298
299 const response = await fetch(url, {
300 method: 'POST',
301 headers: { ...authHeaders(token), 'content-type': 'application/json' },
302 body: JSON.stringify(body),
303 signal: params.signal,
304 });
305
306 if (response.status === 200) {
307 const payload = (await response.json()) as SnowflakeApiResponse;
308 return parseAllRows(params.config, token, payload, params.signal);
309 }
310
311 if (response.status === 202) {
312 const payload = (await response.json()) as SnowflakeApiResponse;
313 if (!payload.statementStatusUrl) {
314 throw new Error('Snowflake response missing statementStatusUrl');
315 }
316 const completed = await pollStatement(
317 params.config,
318 token,
319 payload.statementStatusUrl,
320 params.signal
321 );
322 if (completed.code === '090001' || Array.isArray(completed.data)) {
323 return parseAllRows(params.config, token, completed, params.signal);
324 }
325 throw new Error(completed.message ?? 'Snowflake async query failed');
326 }
327

Callers 2

fetchReportFunction · 0.90

Calls 8

getOrBuildJwtFunction · 0.85
parseAllRowsFunction · 0.85
authHeadersFunction · 0.70
pollStatementFunction · 0.70
setMethod · 0.65
jsonMethod · 0.65
textMethod · 0.65
fetchFunction · 0.50

Tested by

no test coverage detected