UNPKG

@abaplint/runtime

Version:
198 lines • 7.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createData = createData; const throw_error_1 = require("../throw_error"); const types_1 = require("../types"); const tableOptions = { withHeader: false, keyType: types_1.TableKeyType.default }; function createData(target, options) { // console.dir(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) { if (abap.DDIC[options.name.trimEnd()] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } target.assign(new abap.types.Table(abap.DDIC[options.name.trimEnd()].type(), tableOptions)); } else if (options?.name !== undefined) { if (abap.DDIC[options.name.trimEnd()]) { target.assign(abap.DDIC[options.name.trimEnd()].type().clone()); } else if (options.name.includes("=>")) { const [className, typeName] = options.name.trimEnd().toUpperCase().split("=>"); if (abap.Classes[className] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } if (abap.Classes[className][typeName.toLowerCase()] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } target.assign(abap.Classes[className][typeName.toLowerCase()].clone()); } else if (options.name.startsWith("\\TYPE=%")) { // currently, only the runtime knows the references to the anonymous types 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) { if (abap.Classes[options.name.toUpperCase()] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } 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(target.getPointer().getRowType().clone()); } } 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; case "DECFLOAT34": target.assign(new types_1.DecFloat34()); break; default: if (abap.DDIC[options.typeName.trimEnd()]) { target.assign(abap.DDIC[options.typeName.trimEnd()].type().clone()); } else if (options.typeName.includes("=>")) { const [className, typeName] = options.typeName.toUpperCase().split("=>"); if (abap.Classes[className] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } if (abap.Classes[className][typeName.toLowerCase().trimEnd()] === undefined) { (0, throw_error_1.throwError)("CX_SY_CREATE_DATA_ERROR"); } target.assign(abap.Classes[className][typeName.toLowerCase().trimEnd()].clone()); } else { throw "CREATE DATA, unknown type " + options.typeName; } } } else if (options?.type) { target.assign(options.type.clone()); } else if (options?.likeLineOf) { if (options.likeLineOf instanceof types_1.FieldSymbol) { options.likeLineOf = options.likeLineOf.getPointer(); } target.assign(options.likeLineOf.getRowType().clone()); } else if (options?.like) { if (options.like instanceof types_1.FieldSymbol) { options.like = options.like.getPointer(); } if (options.table === true) { target.assign(new abap.types.Table(options.like.clone(), tableOptions)); } else { target.assign(options.like.clone()); } } else { target.assign(target.getType()?.clone()); } } //# sourceMappingURL=create_data.js.map