UNPKG

@sap/hdbext

Version:

Hana-client extension library and utility functions for using SAP HANA in node.js

97 lines (73 loc) 2.47 kB
'use strict'; var debug = require('debug')('hdbext:sp'); var isInput = require('./utils').isInput; var isInputTable = require('./utils').isInputTable; module.exports = function wrapProcedureParams(metadata, arrArgs) { debug('Input length: %s', arrArgs.length); if (usingNamedParams(arrArgs)) { debug('Creating named parameters'); return new NamedParams(arrArgs[0]); } if (usingArrayWithParams(metadata, arrArgs)) { debug('Creating positioned parameters from an array with input arguments'); return new PositionedParams(metadata, arrArgs[0]); } debug('Creating positioned parameters from comma-separated input arguments'); return new PositionedParams(metadata, arrArgs); }; function usingNamedParams(arrArgs) { if (arrArgs.length !== 1) { return false; } var arg = arrArgs[0]; return typeof arg === 'object' && arg !== null && !Array.isArray(arg) && !Buffer.isBuffer(arg) && !Object.prototype.hasOwnProperty.call(arg, 'table'); } function usingArrayWithParams(metadata, arrArgs) { if (arrArgs.length !== 1 || !Array.isArray(arrArgs[0])) { return false; } var inputParams = metadata.filter(isInput); if (inputParams.length === 1 && isInputTable(inputParams[0])) { debug('Procedure has only one input parameter which is an input table parameter'); return false; } return true; } function NamedParams(nameToValue) { this._params = nameToValue; } NamedParams.prototype.getAll = function () { return this._params; }; NamedParams.prototype.has = function (name) { return name in this._params; }; NamedParams.prototype.get = function (name) { return this._params[name]; }; NamedParams.prototype.empty = function () { return Object.keys(this._params).length === 0; }; function PositionedParams(metadata, arr) { this._params = arr; this._nameToPosition = {}; var paramPosition = 0; metadata.filter(isInput).forEach(function (paramMeta) { this._nameToPosition[paramMeta.PARAMETER_NAME] = paramPosition++; }, this); } PositionedParams.prototype.getAll = function () { return this._params; }; PositionedParams.prototype.has = function (name) { var paramPosition = this._nameToPosition[name]; return this._params.length > paramPosition; }; PositionedParams.prototype.get = function (name) { var position = this._nameToPosition[name]; return this._params[position]; }; PositionedParams.prototype.empty = function () { return this._params.length === 0; };