UNPKG

@abaplint/runtime

Version:
78 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.select = select; exports.rowsToTarget = rowsToTarget; const types_1 = require("../types"); async function select(target, input, runtimeOptions, context) { const { rows: rows } = await context.defaultDB().select(input); if (target instanceof types_1.FieldSymbol) { if (target.isAssigned() === false) { throw new Error("GETWA_NOT_ASSIGNED"); } target = target.getPointer(); } if (rows.length === 0) { abap.builtin.sy.get().dbcnt.set(0); abap.builtin.sy.get().subrc.set(4); return; } if (runtimeOptions?.appending !== true) { if (Array.isArray(target)) { target.forEach(f => f.clear()); } else { target?.clear(); } } rowsToTarget(target, rows); if (target === undefined && rows.length === 1) { abap.builtin.sy.get().dbcnt.set(Object.values(rows[0])[0]); } else { abap.builtin.sy.get().dbcnt.set(rows.length); } abap.builtin.sy.get().subrc.set(0); } function rowsToTarget(target, rows) { if (target instanceof types_1.Structure) { const result = {}; for (const column in rows[0]) { if (rows[0][column] === null || target.get()[column] === undefined) { continue; } result[column] = target.get()[column].clone().set(rows[0][column]); } abap.statements.moveCorresponding(new types_1.Structure(result), target); } else if (target instanceof types_1.Table || target instanceof types_1.HashedTable) { for (const row of rows) { const targetRow = target.getRowType().clone(); if (targetRow instanceof types_1.Structure) { for (let columnName in row) { columnName = columnName.toLowerCase(); if (row[columnName] === null) { targetRow.get()[columnName]?.clear(); continue; } targetRow.get()[columnName]?.set(row[columnName]); } } else { const columnName = Object.keys(row)[0]; targetRow.set(row[columnName]); } abap.statements.insertInternal({ table: target, data: targetRow, noClone: true }); } } else if (Array.isArray(target)) { for (let index = 0; index < target.length; index++) { const element = target[index]; element.set(rows[0][Object.keys(rows[0])[index]]); } } else if (target !== undefined) { // its a simple type target.set(rows[0][Object.keys(rows[0])[0]]); } } //# sourceMappingURL=select.js.map