@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
JavaScript
;
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");
};