UNPKG

1.4 kBJavaScriptView Raw
1const mssql = require( 'mssql' );
2
3const config = require( '../config/datawarehouse.mssql' );
4
5/**
6 * executeSproc
7 *
8 * Executes a sproc 🖖🏼. Based on a pre-defined query,
9 * known as a "stored procedure", build a request with a
10 * set of known parameters to execute on one of the Madera
11 * DBs. An engineer may find out what parameters belong to
12 * what procedure, but this is not presently documented.
13 * When you ask Madera for a procedure to be created, the
14 * one who creates the procedure will also outline the
15 * requirements for that sproc.
16 *
17 */
18
19module.exports = function executeSproc( sprocInfo, onRow ) {
20
21 return new Promise( async ( resolve, reject ) => {
22 const { parameters, procedure } = sprocInfo;
23 const results = [];
24
25 const pool = await new mssql.ConnectionPool( config ).connect();
26 const request = await pool.request();
27 request.stream = true;
28
29 request.on( 'row', ( row ) => {
30 let newRow = row;
31
32 if ( onRow ) {
33 newRow = onRow( row );
34 }
35
36 results.push( newRow );
37 } );
38
39 request.on( 'error', ( error ) => {
40 console.error( error );
41 reject( error );
42 } );
43
44 request.on( 'done', () => resolve( results ) );
45
46 parameters.forEach( ( { name, value } ) => request.input( name, mssql.NVarChar, value ) );
47
48 request.execute( procedure, ( err ) => {
49
50 if ( err ) {
51 console.log( err );
52 console.log( sprocInfo );
53 }
54
55 } );
56
57 } );
58
59};