waterline-sql-builder
Version:
Generate SQL (stage 5 query) from a Waterline statement (stage 4 query).
197 lines (192 loc) • 5.32 kB
JavaScript
var Test = require('../../support/test-runner');
describe('Query Generation ::', function() {
describe('Simple WHERE statements', function() {
it('should generate a query with a simple WHERE statement', function(done) {
Test({
query: {
select: ['id'],
where: {
and: [
{
firstName: 'Test'
},
{
lastName: 'User'
}
]
},
from: 'users'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'select "id" from "users" where "firstName" = $1 and "lastName" = $2',
bindings: ['Test', 'User']
},
{
dialect: 'mysql',
sql: 'select `id` from `users` where `firstName` = ? and `lastName` = ?',
bindings: ['Test', 'User']
},
{
dialect: 'sqlite3',
sql: 'select `id` from `users` where `firstName` = ? and `lastName` = ?',
bindings: ['Test', 'User']
},
{
dialect: 'oracledb',
sql: 'select "id" from "users" where "firstName" = :1 and "lastName" = :2',
bindings: ['Test', 'User']
},
{
dialect: 'mariadb',
sql: 'select `id` from `users` where `firstName` = ? and `lastName` = ?',
bindings: ['Test', 'User']
}
]
}, done);
});
it('should generate a query when operators are used', function(done) {
Test({
query: {
select: ['*'],
where: {
and: [
{
votes: {
'>': 100
}
}
]
},
from: 'users'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'select * from "users" where "votes" > $1',
bindings: ['100']
},
{
dialect: 'mysql',
sql: 'select * from `users` where `votes` > ?',
bindings: ['100']
},
{
dialect: 'sqlite3',
sql: 'select * from `users` where `votes` > ?',
bindings: ['100']
},
{
dialect: 'oracledb',
sql: 'select * from "users" where "votes" > :1',
bindings: ['100']
},
{
dialect: 'mariadb',
sql: 'select * from `users` where `votes` > ?',
bindings: ['100']
}
]
}, done);
});
it('should generate a query when multiple operators are used', function(done) {
Test({
query: {
select: ['*'],
where: {
and: [
{
votes: {
'>': 100
}
},
{
votes: {
'<': 200
}
}
]
},
from: 'users'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'select * from "users" where "votes" > $1 and "votes" < $2',
bindings: ['100', '200']
},
{
dialect: 'mysql',
sql: 'select * from `users` where `votes` > ? and `votes` < ?',
bindings: ['100', '200']
},
{
dialect: 'sqlite3',
sql: 'select * from `users` where `votes` > ? and `votes` < ?',
bindings: ['100', '200']
},
{
dialect: 'oracledb',
sql: 'select * from "users" where "votes" > :1 and "votes" < :2',
bindings: ['100', '200']
},
{
dialect: 'mariadb',
sql: 'select * from `users` where `votes` > ? and `votes` < ?',
bindings: ['100', '200']
}
]
}, done);
});
it('should generate a query when multiple columns and operators are used', function(done) {
Test({
query: {
select: ['*'],
where: {
and: [
{
votes: {
'>': 100
}
},
{
age: {
'<': 50
}
}
]
},
from: 'users'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'select * from "users" where "votes" > $1 and "age" < $2',
bindings: ['100', '50']
},
{
dialect: 'mysql',
sql: 'select * from `users` where `votes` > ? and `age` < ?',
bindings: ['100', '50']
},
{
dialect: 'sqlite3',
sql: 'select * from `users` where `votes` > ? and `age` < ?',
bindings: ['100', '50']
},
{
dialect: 'oracledb',
sql: 'select * from "users" where "votes" > :1 and "age" < :2',
bindings: ['100', '50']
},
{
dialect: 'mariadb',
sql: 'select * from `users` where `votes` > ? and `age` < ?',
bindings: ['100', '50']
}
]
}, done);
});
});
});