UNPKG

@sap/xsodata

Version:

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

172 lines (150 loc) 5.37 kB
'use strict'; //Include var dbToJson = require('./typeConverters/dbToJson').dbToJson; var dbToXml = require('./typeConverters/dbToXml').dbToXml; var dbToUri = require('./typeConverters/dbToUri').dbToUri; var jsonToDb = require('./typeConverters/jsonToDb').jsonToDb; var uriToDb = require('./typeConverters/uriToDb').uriToDb; var xmlValueToOdataJson = require('./typeConverters/xmlValueToJson').xmlValueToODataJson; var Type_Error = require("./errors/typeError"); exports.converterFunctions = { dbNameToUri: dbToUri, dbNameToXmlPayload: dbToXml, dbNameToJsonPayload: dbToJson, jsonPayloadToDbName: jsonToDb, uriPayloadToDbName: uriToDb, xmlValueToODataJson: xmlValueToOdataJson }; exports.serializeDbValueToUriLiteral = function (value, propertyInfo) { var dbTypeName = propertyInfo.DATA_TYPE_NAME; return exports.converterFunctions.dbNameToUri[dbTypeName](value); }; /** * Returns the corresponding Xml value for given json payload value. * * The propertyInfo object hold metadata information about the provided * value like the and MUST HAVE .DATA_TYPE_NAME field which contains the * db field declaration like "NVARCHAR" * * @throws {Type_Error} Throws Type_Error on invalid value * @param value {String | Number} Value to convert * @param propertyInfo {Object} Metadata object describing value parameter * @returns {string|number|boolean} Corresponding DbJson value */ exports.serializeXmlValueToODataJsonValue = function (value, propertyInfo) { var dbTypeName = propertyInfo.DATA_TYPE_NAME; var edmTypeName = dbTypeNameToODataTypeName[dbTypeName]; /*jshint eqnull:true */ if(edmTypeName == null){ throw new Type_Error("Can not find edm type for db type name " + dbTypeName, propertyInfo); } var convert = exports.converterFunctions.xmlValueToODataJson[edmTypeName]; if(typeof convert !== 'function'){ throw new Error("Converter function for "+edmTypeName+"(dbTypeName: "+dbTypeName+") could not be found!"); } return convert(value, dbTypeName); }; //Supported OData types exports.oDataTypeIDs = [ //order is important 'Edm.Time', // 0 'Edm.DateTime', // 1 'Edm.Byte', // 2 'Edm.Int16', // 3 'Edm.Int32', // 4 'Edm.Int64', // 5 'Edm.Decimal', // 6 'Edm.Single', // 7 'Edm.Double', // 8 'Edm.String', // 9 'Edm.Binary', // 10 'Edm.Guid' // 11 ]; var conversionODataTypeNameToODataTypeID = { 'Edm.Time': 0, 'Edm.DateTime': 1, 'Edm.Byte': 2, 'Edm.Int16': 3, 'Edm.Int32': 4, 'Edm.Int64': 5, 'Edm.Decimal': 6, 'Edm.Single': 7, 'Edm.Double': 8, 'Edm.String': 9, 'Edm.Binary': 10, 'Edm.Guid': 11 }; var dbTypeNameToODataTypeName = { 'DATE': 'Edm.DateTime', 'DAYDATE': 'Edm.DateTime', 'TIME': 'Edm.Time', 'SECONDTIME': 'Edm.Time', 'SECONDDATE': 'Edm.DateTime', 'TIMESTAMP': 'Edm.DateTime', 'TINYINT': 'Edm.Byte', 'SMALLINT': 'Edm.Int16', 'INTEGER': 'Edm.Int32', 'BIGINT': 'Edm.Int64', //l 'SMALLDECIMAL': 'Edm.Decimal', //m 'DECIMAL': 'Edm.Decimal', //m 'REAL': 'Edm.Single', //f 'DOUBLE': 'Edm.Double', //d 'FLOAT': 'Edm.Single', //d 'VARCHAR': 'Edm.String', 'NVARCHAR': 'Edm.String', 'ALPHANUM': 'Edm.String', 'SHORTTEXT': 'Edm.String', 'CHAR': 'Edm.String', 'NCHAR': 'Edm.String', 'BLOB': 'Edm.Binary', 'CLOB': 'Edm.String', 'NCLOB': 'Edm.String', 'BINARY': 'Edm.Binary', 'VARBINARY': 'Edm.Binary', 'LONGDATE': 'Edm.DateTime' }; exports.dbTypeNameToODataTypeName = dbTypeNameToODataTypeName; function oDataTypeNameToODataTypeID(oDataTypeName) { var tmp = conversionODataTypeNameToODataTypeID[oDataTypeName]; if (tmp !== undefined) { return tmp; } throw new Type_Error('invalid ODataType name: ' + oDataTypeName); } var _to_ID = oDataTypeNameToODataTypeID; var conversionDbTypeNameToODataTypeID = { 'DATE': _to_ID('Edm.DateTime'), 'DAYDATE': _to_ID('Edm.DateTime'), // new 'TIME': _to_ID('Edm.Time'), 'SECONDTIME': _to_ID('Edm.Time'),// new 'SECONDDATE': _to_ID('Edm.DateTime'), 'TIMESTAMP': _to_ID('Edm.DateTime'), 'TINYINT': _to_ID('Edm.Byte'), 'SMALLINT': _to_ID('Edm.Int16'), 'INTEGER': _to_ID('Edm.Int32'), 'BIGINT': _to_ID('Edm.Int64'), 'SMALLDECIMAL': _to_ID('Edm.Decimal'), 'DECIMAL': _to_ID('Edm.Decimal'), 'REAL': _to_ID('Edm.Single'), 'DOUBLE': _to_ID('Edm.Double'), 'FLOAT': _to_ID('Edm.Single'), 'VARCHAR': _to_ID('Edm.String'), 'NVARCHAR': _to_ID('Edm.String'), 'ALPHANUM': _to_ID('Edm.String'), 'SHORTTEXT': _to_ID('Edm.String'), 'CHAR': _to_ID('Edm.String'), 'NCHAR': _to_ID('Edm.String'), 'BLOB': _to_ID('Edm.Binary'), 'CLOB': _to_ID('Edm.String'), 'NCLOB': _to_ID('Edm.String'), 'BINARY': _to_ID('Edm.Binary'), 'VARBINARY': _to_ID('Edm.Binary'), 'LONGDATE': _to_ID('Edm.DateTime') }; function dbTypeNameToODataTypeID(dbTypeName) { //TYPE_ID seem is not unique var tmp = conversionDbTypeNameToODataTypeID[dbTypeName]; if (tmp !== undefined) { return tmp; } throw new Type_Error('invalid dbTypeName name: ' + dbTypeName); } exports.dbTypeNameToODataTypeID = dbTypeNameToODataTypeID;