Skip to content

Commit 05db797

Browse files
committed
closes #130
1 parent 3a442fc commit 05db797

File tree

3 files changed

+100
-14
lines changed

3 files changed

+100
-14
lines changed

dist/index.mjs

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18269,7 +18269,9 @@ function requireWrapQuery$1 () {
1826918269
}
1827018270

1827118271
function doQuery(query, onCompleted) {
18272-
const result = [];
18272+
const results = []; // Array to hold multiple result sets
18273+
let currentResult = []; // Current result set being built
18274+
let hasResultSet = false; // Track if we're in an actual result set
1827318275

1827418276
log.emitQuery({ sql: query.sql(), parameters: query.parameters });
1827518277
const sql = replaceParamChar(query.sql(), query.parameters);
@@ -18297,7 +18299,6 @@ function requireWrapQuery$1 () {
1829718299
}
1829818300

1829918301
let keys;
18300-
// Now we can safely create Request using CachedRequest
1830118302
var request = new CachedRequest(sql, onInnerCompleted);
1830218303
addParameters(request, query.parameters, CachedTypes);
1830318304

@@ -18309,7 +18310,35 @@ function requireWrapQuery$1 () {
1830918310
keys.forEach(cols => {
1831018311
tmp[cols] = rows[cols].value;
1831118312
});
18312-
result.push(tmp);
18313+
currentResult.push(tmp);
18314+
hasResultSet = true; // We're definitely in a result set
18315+
});
18316+
18317+
// Handle column metadata - indicates a result set is starting
18318+
request.on('columnMetadata', (_columns) => {
18319+
hasResultSet = true; // A result set is starting (even if it ends up empty)
18320+
});
18321+
18322+
// Handle end of each result set
18323+
request.on('doneInProc', (_rowCount, _more) => {
18324+
// End of a result set within a stored procedure
18325+
// Add to results if we had a result set (even if empty)
18326+
if (hasResultSet) {
18327+
results.push(currentResult);
18328+
currentResult = [];
18329+
keys = null; // Reset keys for next result set
18330+
hasResultSet = false; // Reset for next potential result set
18331+
}
18332+
});
18333+
18334+
request.on('doneProc', (_rowCount, _more) => {
18335+
// End of stored procedure execution
18336+
// Add to results if we had a result set (even if empty)
18337+
if (hasResultSet) {
18338+
results.push(currentResult);
18339+
currentResult = [];
18340+
hasResultSet = false; // Reset for next potential result set
18341+
}
1831318342
});
1831418343

1831518344
connection.execSql(request);
@@ -18318,14 +18347,28 @@ function requireWrapQuery$1 () {
1831818347
if (err) {
1831918348
onCompleted(extractError(err));
1832018349
} else {
18321-
onCompleted(null, result);
18350+
// If we have any remaining result set, add it
18351+
if (hasResultSet) {
18352+
results.push(currentResult);
18353+
}
18354+
18355+
// Return based on number of actual result sets
18356+
if (results.length === 0) {
18357+
// No result sets - return empty array
18358+
onCompleted(null, []);
18359+
} else if (results.length === 1) {
18360+
// Single result set - return as single-depth array (even if empty)
18361+
onCompleted(null, results[0]);
18362+
} else {
18363+
// Multiple result sets - return as array of arrays
18364+
onCompleted(null, results);
18365+
}
1832218366
}
1832318367
}
1832418368
}
1832518369
}
1832618370

18327-
// same helpers as before
18328-
18371+
// Helper functions remain the same
1832918372
function extractError(e) {
1833018373
if (e && e.errors) {
1833118374
return e.errors[0];

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "orange-orm",
3-
"version": "4.7.7",
3+
"version": "4.7.8-beta.0",
44
"main": "./src/index.js",
55
"module": "./dist/index.mjs",
66
"browser": "./dist/index.browser.mjs",

src/tedious/wrapQuery.js

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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
82125
function 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

Comments
 (0)