@@ -22,7 +22,9 @@ function wrapQuery(_context, connection) {
2222 }
2323
2424 function doQuery ( query , onCompleted ) {
25- const result = [ ] ;
25+ const results = [ ] ; // Array to hold multiple result sets
26+ let currentResult = [ ] ; // Current result set being built
27+ let hasResultSet = false ; // Track if we're in an actual result set
2628
2729 log . emitQuery ( { sql : query . sql ( ) , parameters : query . parameters } ) ;
2830 const sql = replaceParamChar ( query . sql ( ) , query . parameters ) ;
@@ -50,7 +52,6 @@ function wrapQuery(_context, connection) {
5052 }
5153
5254 let keys ;
53- // Now we can safely create Request using CachedRequest
5455 var request = new CachedRequest ( sql , onInnerCompleted ) ;
5556 addParameters ( request , query . parameters , CachedTypes ) ;
5657
@@ -62,7 +63,35 @@ function wrapQuery(_context, connection) {
6263 keys . forEach ( cols => {
6364 tmp [ cols ] = rows [ cols ] . value ;
6465 } ) ;
65- result . push ( tmp ) ;
66+ currentResult . push ( tmp ) ;
67+ hasResultSet = true ; // We're definitely in a result set
68+ } ) ;
69+
70+ // Handle column metadata - indicates a result set is starting
71+ request . on ( 'columnMetadata' , ( _columns ) => {
72+ hasResultSet = true ; // A result set is starting (even if it ends up empty)
73+ } ) ;
74+
75+ // Handle end of each result set
76+ request . on ( 'doneInProc' , ( _rowCount , _more ) => {
77+ // End of a result set within a stored procedure
78+ // Add to results if we had a result set (even if empty)
79+ if ( hasResultSet ) {
80+ results . push ( currentResult ) ;
81+ currentResult = [ ] ;
82+ keys = null ; // Reset keys for next result set
83+ hasResultSet = false ; // Reset for next potential result set
84+ }
85+ } ) ;
86+
87+ request . on ( 'doneProc' , ( _rowCount , _more ) => {
88+ // End of stored procedure execution
89+ // Add to results if we had a result set (even if empty)
90+ if ( hasResultSet ) {
91+ results . push ( currentResult ) ;
92+ currentResult = [ ] ;
93+ hasResultSet = false ; // Reset for next potential result set
94+ }
6695 } ) ;
6796
6897 connection . execSql ( request ) ;
@@ -71,14 +100,28 @@ function wrapQuery(_context, connection) {
71100 if ( err ) {
72101 onCompleted ( extractError ( err ) ) ;
73102 } else {
74- onCompleted ( null , result ) ;
103+ // If we have any remaining result set, add it
104+ if ( hasResultSet ) {
105+ results . push ( currentResult ) ;
106+ }
107+
108+ // Return based on number of actual result sets
109+ if ( results . length === 0 ) {
110+ // No result sets - return empty array
111+ onCompleted ( null , [ ] ) ;
112+ } else if ( results . length === 1 ) {
113+ // Single result set - return as single-depth array (even if empty)
114+ onCompleted ( null , results [ 0 ] ) ;
115+ } else {
116+ // Multiple result sets - return as array of arrays
117+ onCompleted ( null , results ) ;
118+ }
75119 }
76120 }
77121 }
78122}
79123
80- // same helpers as before
81-
124+ // Helper functions remain the same
82125function extractError ( e ) {
83126 if ( e && e . errors ) {
84127 return e . errors [ 0 ] ;
@@ -130,4 +173,4 @@ function addParameters(request, params, TYPES) {
130173 }
131174}
132175
133- module . exports = wrapQuery ;
176+ module . exports = wrapQuery ;
0 commit comments