2013-09-11 23:36:55 -04:00
|
|
|
module.exports = function(knex) {
|
|
|
|
|
2013-09-12 13:30:47 -04:00
|
|
|
describe('Aggregate', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2013-09-12 01:00:44 -04:00
|
|
|
it('has a sum', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2013-12-27 14:44:21 -05:00
|
|
|
return knex('accounts').sum('logins').testSql(function(tester) {
|
|
|
|
tester(
|
|
|
|
'mysql',
|
|
|
|
'select sum(`logins`) from `accounts`',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'sum(`logins`)': 10
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'postgresql',
|
|
|
|
'select sum("logins") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
sum: '10'
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'sqlite3',
|
|
|
|
'select sum("logins") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'sum("logins")': 10
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-09-12 01:00:44 -04:00
|
|
|
it('has a count', function() {
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2013-12-27 14:44:21 -05:00
|
|
|
return knex('accounts').count('id').testSql(function(tester) {
|
|
|
|
tester(
|
|
|
|
'mysql',
|
|
|
|
'select count(`id`) from `accounts`',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count(`id`)': 6
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'postgresql',
|
|
|
|
'select count("id") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
count: '6'
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'sqlite3',
|
|
|
|
'select count("id") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count("id")': 6
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-11-23 12:10:01 -05:00
|
|
|
it('supports multiple aggregate functions', function() {
|
|
|
|
|
2013-12-27 14:44:21 -05:00
|
|
|
return knex('accounts').count('id').max('logins').min('logins').testSql(function(tester) {
|
|
|
|
tester(
|
|
|
|
'mysql',
|
|
|
|
'select count(`id`), max(`logins`), min(`logins`) from `accounts`',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count(`id`)': 6,
|
|
|
|
'max(`logins`)': 2,
|
|
|
|
'min(`logins`)': 1
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'postgresql',
|
|
|
|
'select count("id"), max("logins"), min("logins") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
count: '6',
|
|
|
|
max: 2,
|
|
|
|
min: 1
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'sqlite3',
|
|
|
|
'select count("id"), max("logins"), min("logins") from "accounts"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count("id")': 6,
|
|
|
|
'max("logins")': 2,
|
|
|
|
'min("logins")': 1
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
});
|
2013-11-23 12:10:01 -05:00
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-09-12 01:00:44 -04:00
|
|
|
it("support the groupBy function", function() {
|
|
|
|
|
2013-12-27 14:44:21 -05:00
|
|
|
return knex('accounts').count('id').groupBy('logins').testSql(function(tester) {
|
|
|
|
tester(
|
|
|
|
'mysql',
|
|
|
|
'select count(`id`) from `accounts` group by `logins`',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count(`id`)': 2
|
|
|
|
},{
|
|
|
|
'count(`id`)': 4
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'postgresql',
|
|
|
|
'select count("id") from "accounts" group by "logins"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
count: '2'
|
|
|
|
},{
|
|
|
|
count: '4'
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'sqlite3',
|
|
|
|
'select count("id") from "accounts" group by "logins"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count("id")': 2
|
|
|
|
},{
|
|
|
|
'count("id")': 4
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
|
|
|
|
}).then(function() {
|
|
|
|
return knex('accounts').count('id').groupBy('first_name').testSql(function(tester) {
|
|
|
|
tester(
|
|
|
|
'mysql',
|
|
|
|
'select count(`id`) from `accounts` group by `first_name`',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count(`id`)': 6
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'postgresql',
|
|
|
|
'select count("id") from "accounts" group by "first_name"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
count: '6'
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
tester(
|
|
|
|
'sqlite3',
|
|
|
|
'select count("id") from "accounts" group by "first_name"',
|
|
|
|
[],
|
|
|
|
[{
|
|
|
|
'count("id")': 6
|
|
|
|
}]
|
|
|
|
);
|
|
|
|
});
|
2013-09-13 18:48:28 -04:00
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
|
2013-09-12 01:00:44 -04:00
|
|
|
});
|
2013-09-11 23:36:55 -04:00
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
};
|