UNPKG

@sap/xsodata

Version:

Expose data from a HANA database as OData V2 service with help of .xsodata files.

270 lines (242 loc) 9.26 kB
'use strict'; let dbToJson = exports.dbToJson = {}; const Type_Error = require("./../errors/typeError"); const converterTools = require('./converterTools'); const NUMBER_OF_DIGITS_IN_MILLIS = 3; dbToJson.DATE = dbToJson.DAYDATE = function dbToJsonDATE(dbValue) { /* in "1753-01-01" */ /* out "/Date(-6847804800000)/" */ /* in "9999-12-31" */ /* out "/Date(253402214400000)/" */ /*--->'Edm.DateTime' */ if (dbValue === null) { return null; } let date = new Date(Date.UTC(dbValue.substr(0, 4), dbValue.substr(5, 2) - 1, dbValue.substr(8, 2), 0, 0, 0, 0)); return "/Date(" + date.getTime() + ")/"; }; dbToJson.TIME = dbToJson.SECONDTIME = function dbToJsonTIME(dbValue) { /* in "00:00:00" */ /* out "PT0H0M0S" */ /* in "23:59:59" */ /* out "PT23H59M59S" */ /*--->'Edm.Time' */ if (dbValue === null) { return null; } return 'PT' + parseInt(dbValue.substr(0, 2)) + 'H' + parseInt(dbValue.substr(3, 2)) + 'M' + parseInt(dbValue.substr(6, 2)) + 'S'; }; dbToJson.SECONDDATE = function dbToJsonSECONDDATE(dbValue) { /* in "1753-01-01T00:00:00" */ /* out "/Date(-6847804800000)/" */ /* in "9999-12-31T13:34:56" */ /* out "/Date(253402263296000)/" */ /*--->'Edm.DateTime' */ if (dbValue === null) { return null; } let date = new Date(Date.UTC( dbValue.substr(0, 4), dbValue.substr(5, 2) - 1, dbValue.substr(8, 2), dbValue.substr(11, 2), dbValue.substr(14, 2), dbValue.substr(17, 2), 0)); return "/Date(" + date.getTime() + ")/"; }; dbToJson.TIMESTAMP = function dbToJsonTIMESTAMP(dbValue) { /* in "1753-01-01T00:00:00" */ /* out "/Date(-6847804800000)/" */ /* in "9999-12-31T23:59:59.999" */ /* out "/Date(253402300799999)/" */ /*--->'Edm.DateTime' */ /* additional possible input-values are /* in "1753-01-01T00:00:00.123 hdb connector*/ /* in "1753-01-01T00:00:00.1234" */ /* in "1753-01-01T00:00:00.123Z" if used with non-hana db (e.g. PostgreSQL)*/ /* in "1753-01-01T00:00:00.132400000" hana-client connector*/ if (dbValue === null) { return null; } let millis = dbValue.substring(20); if (millis.endsWith('Z')) { millis = millis.substring(0, millis.length - 1); // if used with non-hana db (e.g. PostgreSQL)*/ } if (millis.length < NUMBER_OF_DIGITS_IN_MILLIS) { millis += '0'.repeat(NUMBER_OF_DIGITS_IN_MILLIS - millis.length); } else { millis = millis.substr(0,3); } let date = new Date(Date.UTC(dbValue.substr(0, 4), dbValue.substr(5, 2) - 1, dbValue.substr(8, 2), dbValue.substr(11, 2), dbValue.substr(14, 2), dbValue.substr(17, 2), millis)); return "/Date(" + date.getTime() + ")/"; }; dbToJson.TINYINT = function dbToJsonTINYINT(dbValue) { /* in 0 */ /* out 0 */ /* in 255 */ /* out 255, */ /*--->'Edm.Byte' */ return dbValue; }; dbToJson.SMALLINT = function dbToJsonSMALLINT(dbValue) { /* in -32767 */ /* out -32767 */ /* in 32767 */ /* out 32767, */ /*--->'Edm.Int16' */ return dbValue; }; dbToJson.INTEGER = function dbToJsonINTEGER(dbValue) { /* in -2147483648 */ /* out -2147483648 */ /* in 2147483647 */ /* out 2147483647, */ /*--->'Edm.Int32' */ return dbValue; }; dbToJson.BIGINT = function dbToJsonBIGINT(dbValue) { /* in "-9223372036854775808" */ /* out "-9223372036854775808" */ /* in "9223372036854775807" */ /* out "9223372036854775807" */ /*--->'Edm.Int64' */ if (typeof dbValue === 'string') { return dbValue; } if (dbValue) { return dbValue.toString(); } return dbValue; }; dbToJson.SMALLDECIMAL = function dbToJsonSMALLDECIMAL(dbValue) { /* in "-1.4e-45" */ /* out "-1.4e-45" */ /* in "1.4e-45" */ /* out "1.4e-45" */ /*--->'Edm.Decimal' */ return converterTools.formatDecimal(dbValue); }; dbToJson.DECIMAL = function dbToJsonDECIMAL(dbValue) { /* in "1234567890.012345678901234567890123" */ /* out "1234567890.012345678901234567890123" */ /* in "1234567890.012345678901234567890123" */ /* out "1234567890.012345678901234567890123", */ /*--->'Edm.Decimal' */ if (dbValue === null) { return null; } return converterTools.formatDecimal(dbValue); }; dbToJson.REAL = function dbToJsonREAL(dbValue) { /* in -3.4028234663852886e+38 */ /* out "-3.40282346e+38" */ /* in 3.3028234797236365e+38 */ /* out "3.30282347e+38", */ /*--->'Edm.Single' */ if (dbValue === null) { return null; } return dbValue.toString(); }; dbToJson.DOUBLE = function dbToJsonDOUBLE(dbValue) { /* in -1.7976931348623157e+308 */ /* out "-1.7976931348623157e+308" */ /* in 1.7976931348623157e+308 */ /* out "1.7976931348623157e+308" */ /*--->'Edm.Double' */ if (dbValue === null) { return null; } return dbValue.toString(); }; dbToJson.FLOAT = function dbToJsonFLOAT(dbValue) { /* in -3.4028234e+38 */ /* out "-3.4028234e+38" */ /* in 3.402823466e+38 */ /* out "3.402823466e+38", */ /*--->'Edm.Single' */ if (dbValue === null) { return null; } return dbValue.toString(); }; dbToJson.VARCHAR = function dbToJsonVARCHAR(dbValue) { /* in "VARCHAR" */ /* out "VARCHAR" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.NVARCHAR = function dbToJsonNVARCHAR(dbValue) { /* in "NVARCHAR" */ /* out "NVARCHAR" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.ALPHANUM = function dbToJsonALPHANUM(dbValue) { /* in "ALPHANUM" */ /* out "ALPHANUM" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.SHORTTEXT = function dbToJsonSHORTTEXT(dbValue) { /* in "SHORTTEXT" */ /* out "SHORTTEXT" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.CHAR = function dbToJsonCHAR(dbValue) { /* in "CHAR" */ /* out "CHAR" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.NCHAR = function dbToJsonNCHAR(dbValue) { /* in "NCHAR" */ /* out "NCHAR" */ /*--->'Edm.String' */ return dbValue; }; dbToJson.BLOB = function dbToJsonBLOB(dbValue) { /* in buffer */ /* out "iVBORg==" */ /*--->'Edm.Binary' */ if (dbValue === null) { return null; } return dbValue.toString('base64'); }; dbToJson.CLOB = function dbToJsonCLOB(dbValue) { /* in buffer */ /* out "CLOB" */ /*--->'Edm.String' */ if (dbValue === null) { return null; } return dbValue.toString('utf8'); }; dbToJson.NCLOB = function dbToJsonNCLOB(dbValue) { /* in buffer */ /* out "NCLOB" */ /*--->'Edm.String' */ if (dbValue === null) { return null; } return dbValue.toString('utf8'); }; dbToJson.BINARY = function dbToJsonBINARY(/*dbValue*/) { throw new Type_Error("db type BINARY is not supported"); }; dbToJson.VARBINARY = function dbToJsonVARBINARY(dbValue) { /* in buffer */ /* out iVBONA==" */ /*--->'Edm.Binary' */ if (dbValue === null) { return null; } return dbValue.toString('base64'); }; dbToJson.LONGDATE = function dbToUriLONGDATE(/*dbValue*/) { /* in */ /* out */ throw new Type_Error("db type LONGDATE is not supported"); };