@abaplint/runtime
Version:
Transpiler - Runtime
204 lines • 8.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createData = createData;
const clone_1 = require("../clone");
const throw_error_1 = require("../throw_error");
const types_1 = require("../types");
function createData(target, options) {
if (target instanceof types_1.FieldSymbol) {
createData(target.getPointer(), options);
return;
}
else if (!(target instanceof types_1.DataReference)) {
throw new Error("CREATE_DATA_REFERENCE_EXPECTED");
}
if (options?.name && options?.table) {
// @ts-ignore
if (abap.DDIC[options.name.trimEnd()] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
target.assign(new abap.types.Table(abap.DDIC[options.name.trimEnd()].type));
}
else if (options?.name) {
// @ts-ignore
if (abap.DDIC[options.name.trimEnd()]) {
// @ts-ignore
target.assign((0, clone_1.clone)(abap.DDIC[options.name.trimEnd()].type));
}
else if (options.name.includes("=>")) {
const [className, typeName] = options.name.trimEnd().toUpperCase().split("=>");
// @ts-ignore
if (abap.Classes[className] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
if (abap.Classes[className][typeName.toLowerCase()] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
target.assign((0, clone_1.clone)(abap.Classes[className][typeName.toLowerCase()]));
}
else if (options.name.startsWith("\\TYPE=%")) {
// currently, only the runtime knows the references to the anonymous types
// @ts-ignore
const clas = abap.Classes["KERNEL_CREATE_DATA_HANDLE"];
if (clas === undefined) {
throw new Error("CreateData, kernel class missing");
}
clas.anonymous({ name: options.name.trimEnd(), dref: target });
}
else if (options.name.trimEnd() === "ABAP_BOOL") {
// ABAP_BOOL is special, its not part of the type pool, its built-into abaplint
target.assign(new types_1.Character(1, { qualifiedName: "ABAP_BOOL", ddicName: "ABAP_BOOL" }));
}
else if (options.name.trimEnd() === "STRING") {
target.assign(new types_1.String());
}
else if (options.name.trimEnd() === "XSTRING") {
target.assign(new types_1.XString());
}
else if (options.name.trimEnd() === "UTCLONG") {
target.assign(new types_1.UTCLong());
}
else if (options.name.trimEnd() === "I") {
target.assign(new types_1.Integer());
}
else if (options.name.trimEnd() === "T") {
target.assign(new types_1.Time());
}
else if (options.name.trimEnd() === "D") {
target.assign(new types_1.Date());
}
else if (options.name.trimEnd() === "F") {
target.assign(new types_1.Float());
}
else if (options.name.trimEnd() === "INT8") {
target.assign(new types_1.Integer8());
}
else if (options.refTo === true) {
// @ts-ignore
if (abap.Classes[options.name.toUpperCase()] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
target.assign(new abap.types.ABAPObject({ qualifiedName: options.name, RTTIName: options.name }));
}
else {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
if (options.typeLineOf === true) {
// @ts-ignore
target.assign((0, clone_1.clone)(target.getPointer().getRowType()));
}
}
else if (options?.typeName) {
switch (options.typeName) {
case "C":
{
let length = 1;
if (options.length) {
length = options.length.get();
}
target.assign(new types_1.Character(length));
}
break;
case "N":
{
let length = 1;
if (options.length) {
length = options.length.get();
}
target.assign(new types_1.Numc({ length: length }));
}
break;
case "X":
{
let length = 1;
if (options.length) {
length = options.length.get();
}
target.assign(new types_1.Hex({ length: length }));
}
break;
case "P":
{
let length = 1;
if (options.length) {
length = options.length.get();
}
let decimals = 0;
if (options.decimals) {
decimals = options.decimals.get();
}
target.assign(new types_1.Packed({ length: length, decimals: decimals }));
}
break;
case "F":
target.assign(new types_1.Float());
break;
case "D":
target.assign(new types_1.Date());
break;
case "T":
target.assign(new types_1.Time());
break;
case "I":
target.assign(new types_1.Integer());
break;
case "STRING":
target.assign(new types_1.String());
break;
case "INT8":
target.assign(new types_1.Integer8());
break;
case "XSTRING":
target.assign(new types_1.XString());
break;
case "UTCLONG":
target.assign(new types_1.UTCLong());
break;
default:
// @ts-ignore
if (abap.DDIC[options.typeName.trimEnd()]) {
// @ts-ignore
target.assign((0, clone_1.clone)(abap.DDIC[options.typeName.trimEnd()].type));
}
else if (options.typeName.includes("=>")) {
const [className, typeName] = options.typeName.toUpperCase().split("=>");
// @ts-ignore
if (abap.Classes[className] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
if (abap.Classes[className][typeName.toLowerCase().trimEnd()] === undefined) {
(0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR");
}
// @ts-ignore
target.assign((0, clone_1.clone)(abap.Classes[className][typeName.toLowerCase().trimEnd()]));
}
else {
throw "CREATE DATA, unknown type " + options.typeName;
}
}
}
else if (options?.type) {
target.assign((0, clone_1.clone)(options.type));
}
else if (options?.likeLineOf) {
if (options.likeLineOf instanceof types_1.FieldSymbol) {
options.likeLineOf = options.likeLineOf.getPointer();
}
target.assign((0, clone_1.clone)(options.likeLineOf.getRowType()));
}
else if (options?.like) {
if (options.like instanceof types_1.FieldSymbol) {
options.like = options.like.getPointer();
}
target.assign((0, clone_1.clone)(options.like));
}
else {
target.assign((0, clone_1.clone)(target.getType()));
}
}
//# sourceMappingURL=create_data.js.map