UNPKG

sfcc-cip-analytics-client

Version:

SFCC Commerce Intelligence Platform Analytics Client

101 lines (100 loc) 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeQuery = executeQuery; exports.executeParameterizedQuery = executeParameterizedQuery; exports.formatDateRange = formatDateRange; exports.validateRequiredParams = validateRequiredParams; const types_1 = require("./types"); const utils_1 = require("../utils"); async function* executeQuery(client, sql, batchSize = 100) { const statementId = await client.createStatement(); try { const executeResponse = await client.execute(statementId, sql, batchSize); if (executeResponse.results && executeResponse.results.length > 0) { const result = executeResponse.results[0]; if (!result.firstFrame) { return; } debugger; const firstFrameData = (0, utils_1.processFrame)(result.signature || undefined, result.firstFrame); if (firstFrameData.length > 0) { yield firstFrameData; } let done = result.firstFrame.done; let currentFrame = result.firstFrame; while (!done && currentFrame) { const currentOffset = currentFrame.offset || 0; const currentRowCount = currentFrame.rows?.length || 0; const nextResponse = await client.fetch(result.statementId || 0, currentOffset + currentRowCount, batchSize); currentFrame = nextResponse.frame; if (!currentFrame) break; const nextData = (0, utils_1.processFrame)(result.signature || undefined, currentFrame); if (nextData.length > 0) { yield nextData; } done = currentFrame.done; } } } finally { await client.closeStatement(statementId); } } async function* executeParameterizedQuery(client, sql, parameters = [], batchSize = 100) { try { const executeResponse = await client.prepareAndExecuteWithParameters(sql, parameters, batchSize); if (executeResponse.results && executeResponse.results.length > 0) { const result = executeResponse.results[0]; if (!result.firstFrame) { return; } const firstFrameData = (0, utils_1.processFrame)(result.signature || undefined, result.firstFrame); if (firstFrameData.length > 0) { yield firstFrameData; } let done = result.firstFrame.done; let currentFrame = result.firstFrame; while (!done && currentFrame) { const currentOffset = typeof currentFrame.offset === 'number' ? currentFrame.offset : (currentFrame.offset ? Number(currentFrame.offset) : 0); const currentRowCount = currentFrame.rows?.length || 0; const nextResponse = await client.fetch(result.statementId || 0, currentOffset + currentRowCount, batchSize); currentFrame = nextResponse.frame; if (!currentFrame) break; const nextData = (0, utils_1.processFrame)(result.signature || undefined, currentFrame); if (nextData.length > 0) { yield nextData; } done = currentFrame.done; } } } catch (error) { throw new Error(`Failed to execute parameterized query: ${error}`); } } function formatDateRange(dateRange) { return { startDate: (0, types_1.formatDateForSQL)(dateRange.startDate), endDate: (0, types_1.formatDateForSQL)(dateRange.endDate) }; } function validateRequiredParams(params, requiredFields) { const missingFields = []; for (const field of requiredFields) { if (params[field] === undefined || params[field] === null) { missingFields.push(String(field)); } } if (missingFields.length > 0) { throw new Error(`Missing required parameters: ${missingFields.join(', ')}`); } // Validate nested required fields if ('dateRange' in params && params.dateRange) { const dateRange = params.dateRange; if (!dateRange.startDate || !dateRange.endDate) { throw new Error('DateRange must include both startDate and endDate'); } } }