Skip to content

Commit dbcbedc

Browse files
alexpeattiemathiasrw
authored andcommitted
Fix for aggregate functions applied to empty sets (#964)
* Return undefined from aggregate functions when the accumulator is undefined (fixes #917) * Build from src
1 parent b3e6f13 commit dbcbedc

File tree

7 files changed

+68
-15
lines changed

7 files changed

+68
-15
lines changed

dist/alasql-worker.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
//! AlaSQL v0.4.4 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
1+
//! AlaSQL v0.4.4-fix-aggregate-empty-sets-1566 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
22
/*
33
@module alasql
4-
@version 0.4.4
4+
@version 0.4.4-fix-aggregate-empty-sets-1566
55
66
AlaSQL - JavaScript SQL database
77
© 2014-2016 Andrey Gershun & Mathias Rangel Wulff

dist/alasql-worker.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/alasql.fs.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
//! AlaSQL v0.4.4 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
1+
//! AlaSQL v0.4.4-fix-aggregate-empty-sets-1566 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
22
/*
33
@module alasql
4-
@version 0.4.4
4+
@version 0.4.4-fix-aggregate-empty-sets-1566
55

66
AlaSQL - JavaScript SQL database
77
© 2014-2016 Andrey Gershun & Mathias Rangel Wulff
@@ -137,7 +137,7 @@ var alasql = function(sql, params, cb, scope) {
137137
Current version of alasql
138138
@constant {string}
139139
*/
140-
alasql.version = '0.4.4';
140+
alasql.version = '0.4.4-fix-aggregate-empty-sets-1566';
141141

142142
/**
143143
Debug flag
@@ -10832,6 +10832,15 @@ alasql.aggr.STD = alasql.aggr.STDDEV = alasql.aggr.STDEVP = function(v,s,stage){
1083210832
}
1083310833
};
1083410834

10835+
alasql._aggrOriginal = alasql.aggr
10836+
alasql.aggr = {}
10837+
Object.keys(alasql._aggrOriginal).forEach(function(k) {
10838+
alasql.aggr[k] = function(v, s, stage) {
10839+
if(stage === 3 && typeof(s) === 'undefined') return undefined;
10840+
return alasql._aggrOriginal[k].apply(null, arguments)
10841+
}
10842+
})
10843+
1083510844
// String functions
1083610845
stdfn.REPLACE = function (target,pattern,replacement) {
1083710846
return (target||'').split(pattern).join(replacement);

dist/alasql.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
//! AlaSQL v0.4.4 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
1+
//! AlaSQL v0.4.4-fix-aggregate-empty-sets-1566 | © 2014-2016 Andrey Gershun & Mathias Rangel Wulff | License: MIT
22
/*
33
@module alasql
4-
@version 0.4.4
4+
@version 0.4.4-fix-aggregate-empty-sets-1566
55

66
AlaSQL - JavaScript SQL database
77
© 2014-2016 Andrey Gershun & Mathias Rangel Wulff
@@ -137,7 +137,7 @@ var alasql = function(sql, params, cb, scope) {
137137
Current version of alasql
138138
@constant {string}
139139
*/
140-
alasql.version = '0.4.4';
140+
alasql.version = '0.4.4-fix-aggregate-empty-sets-1566';
141141

142142
/**
143143
Debug flag
@@ -10832,6 +10832,15 @@ alasql.aggr.STD = alasql.aggr.STDDEV = alasql.aggr.STDEVP = function(v,s,stage){
1083210832
}
1083310833
};
1083410834

10835+
alasql._aggrOriginal = alasql.aggr
10836+
alasql.aggr = {}
10837+
Object.keys(alasql._aggrOriginal).forEach(function(k) {
10838+
alasql.aggr[k] = function(v, s, stage) {
10839+
if(stage === 3 && typeof(s) === 'undefined') return undefined;
10840+
return alasql._aggrOriginal[k].apply(null, arguments)
10841+
}
10842+
})
10843+
1083510844
// String functions
1083610845
stdfn.REPLACE = function (target,pattern,replacement) {
1083710846
return (target||'').split(pattern).join(replacement);

dist/alasql.min.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/55functions.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,15 @@ alasql.aggr.STD = alasql.aggr.STDDEV = alasql.aggr.STDEVP = function(v,s,stage){
387387
}
388388
};
389389

390+
alasql._aggrOriginal = alasql.aggr
391+
alasql.aggr = {}
392+
Object.keys(alasql._aggrOriginal).forEach(function(k) {
393+
alasql.aggr[k] = function(v, s, stage) {
394+
if(stage === 3 && typeof(s) === 'undefined') return undefined;
395+
return alasql._aggrOriginal[k].apply(null, arguments)
396+
}
397+
})
398+
390399
// String functions
391400
stdfn.REPLACE = function (target,pattern,replacement) {
392401
return (target||'').split(pattern).join(replacement);

test/test619.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
if(typeof exports === 'object') {
2+
var assert = require("assert");
3+
var alasql = require('..');
4+
};
5+
6+
/*
7+
Test for issue #917
8+
*/
9+
10+
var test = 619;
11+
12+
describe('Test '+test+' calling aggregate functions on empty sets', function() {
13+
14+
before(function(){
15+
alasql('CREATE DATABASE test'+test+';USE test'+test);
16+
});
17+
18+
after(function(){
19+
alasql('DROP DATABASE test'+test);
20+
});
21+
22+
it('1. Should always return undefined', function(){
23+
res = alasql('SELECT STDDEV(col) AS Result FROM ? WHERE 1=0', [[{col:1},{col:2}]]);
24+
assert.equal(res[0]['Result'], undefined);
25+
})
26+
});

0 commit comments

Comments
 (0)