waterline-sql-builder
Version:
Generate SQL (stage 5 query) from a Waterline statement (stage 4 query).
124 lines (120 loc) • 4.05 kB
JavaScript
var Test = require('../../support/test-runner');
describe('Query Generation ::', function() {
describe('RETURNING statements', function() {
it('should generate an returning query', function(done) {
Test({
query: {
insert: {
title: 'Slaughterhouse Five'
},
into: 'books',
returning: 'author'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'insert into "books" ("title") values ($1) returning "author"',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'mysql',
sql: 'insert into `books` (`title`) values (?)',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'sqlite3',
sql: 'insert into `books` (`title`) values (?) returning `author`',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'oracledb',
sql: 'insert into "books" ("title") values (:1) returning "author" into :2',
bindings: ['Slaughterhouse Five', { 'columnName': 'author' }]
},
{
dialect: 'mariadb',
sql: 'insert into `books` (`title`) values (?)',
bindings: ['Slaughterhouse Five']
}
]
}, done);
});
it('should generate a returning query when using multiple values', function(done) {
Test({
query: {
insert: {
title: 'Slaughterhouse Five',
author: 'Kurt Vonnegut'
},
into: 'books',
returning: ['author', 'title']
},
outcomes: [
{
dialect: 'postgresql',
sql: 'insert into "books" ("author", "title") values ($1, $2) returning "author", "title"',
bindings: ['Kurt Vonnegut', 'Slaughterhouse Five']
},
{
dialect: 'mysql',
sql: 'insert into `books` (`author`, `title`) values (?, ?)',
bindings: ['Kurt Vonnegut', 'Slaughterhouse Five']
},
{
dialect: 'sqlite3',
sql: 'insert into `books` (`author`, `title`) values (?, ?) returning `author`, `title`',
bindings: ['Kurt Vonnegut', 'Slaughterhouse Five']
},
{
dialect: 'oracledb',
sql: 'insert into "books" ("author", "title") values (:1, :2) returning "author","title" into :3,:4',
bindings: ['Kurt Vonnegut', 'Slaughterhouse Five', { 'columnName': 'author'}, { 'columnName': 'title' }]
},
{
dialect: 'mariadb',
sql: 'insert into `books` (`author`, `title`) values (?, ?)',
bindings: ['Kurt Vonnegut', 'Slaughterhouse Five']
}
]
}, done);
});
it('should generate an returning query returning all values if possible', function(done) {
Test({
query: {
insert: {
title: 'Slaughterhouse Five'
},
into: 'books',
returning: '*'
},
outcomes: [
{
dialect: 'postgresql',
sql: 'insert into "books" ("title") values ($1) returning *',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'mysql',
sql: 'insert into `books` (`title`) values (?)',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'sqlite3',
sql: 'insert into `books` (`title`) values (?) returning *',
bindings: ['Slaughterhouse Five']
},
{
dialect: 'oracledb',
sql: 'insert into "books" ("title") values (:1) returning "ROWID" into :2',
bindings: ['Slaughterhouse Five', { 'columnName': 'ROWID' }]
},
{
dialect: 'mariadb',
sql: 'insert into `books` (`title`) values (?)',
bindings: ['Slaughterhouse Five']
}
]
}, done);
});
});
});