alasql
Version:
AlaSQL.js - JavaScript SQL database library for relational and graph data manipulation with support of localStorage, IndexedDB, and Excel
294 lines (241 loc) • 8.94 kB
JavaScript
if(typeof exports === 'object') {
var assert = require("assert");
var alasql = require('..');
var _ = require('lodash');
} else {
__dirname = '.';
};
describe('Test 270 RECORDSET tests', function() {
var emptydata = [];
var data1 = [{a:1,b:10},{a:2,b:20},{a:3,b:30}];
var data2 = [{b:10,c:100},{b:20,c:200},{b:40,c:400}];
it('1. Create database', function(done) {
alasql('CREATE DATABASE test270; USE test270');
alasql('CREATE TABLE one(a INT, b INT)');
alasql('CREATE TABLE two(b INT, c INT)');
alasql('CREATE TABLE three');
alasql('CREATE TABLE four');
alasql.options.modifier = 'RECORDSET';
done();
});
it('2. Empty test on param throws error', function(done) {
assert.throws(function(){
var res = alasql('SELECT * FROM ?',[]);
},Error);
done();
});
it('3. Empty test on param throws error', function(done) {
var res = alasql('SELECT * FROM ?',[emptydata]);
assert.deepEqual(res,{data:[],columns:[]});
done();
});
it('4. Empty test on table with columns', function(done) {
var res = alasql('SELECT * FROM one');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","b"]);
done();
});
it('5. Test on empty table without column definitions', function(done) {
var res = alasql('SELECT * FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,[]);
done();
});
it('6. Test on empty table without column definitions', function(done) {
alasql('SELECT * INTO three FROM ?',[data1])
var res = alasql('SELECT * FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('7. Test on empty table without column definitions', function(done) {
var res = alasql('SELECT a,b FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('8. Test on empty table without column definitions', function(done) {
var res = alasql('SELECT b,a FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['b','a']);
done();
});
it('9. Test on empty table without column definitions', function(done) {
var res = alasql('SELECT a,b,a*a AS a2 FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b','a2']);
done();
});
it('9a. Test on table without column definitions', function(done) {
var res = alasql('SELECT a,a*a AS a2,b FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','a2','b']);
done();
});
it('9b. Test on table without column definitions', function(done) {
var res = alasql('SELECT a,* FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('9c. Test on table without column definitions', function(done) {
var res = alasql('SELECT *,a FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('9c1. Test on table without column definitions', function(done) {
var res = alasql('SELECT b,*,a FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['b','a']);
done();
});
it('9d. Test on table without column definitions', function(done) {
var res = alasql('SELECT a,*,a*a AS a2 FROM three');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','a','b','a2']);
done();
});
it('10. Array on param with *', function(done) {
var res = alasql('SELECT * FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('11. Array with column', function(done) {
var res = alasql('SELECT a,b FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b']);
done();
});
it('11a. Array with column', function(done) {
var res = alasql('SELECT b,a FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['b','a']);
done();
});
it('11b. Array with column', function(done) {
var res = alasql('SELECT *,b,a FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres,['a','b','b','a']);
done();
});
it('12. Array with column', function(done) {
var res = alasql('SELECT a,a*a AS a2 FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","a2"]);
done();
});
it('12a. Array with column', function(done) {
var res = alasql('SELECT a,a*a AS a2,b FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","a2",'b']);
done();
});
it('13. Array with column from table', function(done) {
var res = alasql('SELECT a,a*a AS a2 FROM one');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","a2"]);
done();
});
it('14. Array with column in reversed order', function(done) {
var res = alasql('SELECT a*a AS a2,a FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a2","a"]);
done();
});
it('15. Array with column in reversed order', function(done) {
var res = alasql('SELECT a*a AS a2,a FROM ?',[data1]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a2","a"]);
done();
});
it('16. JOIN params', function(done) {
var res = alasql('SELECT one.*,two.* FROM ? one JOIN ? two USING b',[data1,data2]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","b","c"]);
done();
});
it('17. JOIN tables', function(done) {
alasql('SELECT * INTO one FROM ?',[data1]);
alasql('SELECT * INTO two FROM ?',[data2]);
var res = alasql('SELECT one.*,two.* FROM one JOIN two USING b');
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","b","b","c"]);
done();
});
it('18. JOIN params', function(done) {
var res = alasql('SELECT one.*,two.* FROM ? one JOIN ? two USING b',[data1,data2]);
var colres = _.pluck(res.columns,'columnid');
assert.deepEqual(colres, ["a","b","c"]);
done();
});
/*
it('3. VALUE', function(done) {
alasql.options.modifier = 'VALUE';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
assert.deepEqual(res,1);
done();
});
it('4. ROW', function(done) {
alasql.options.modifier = 'ROW';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
assert.deepEqual(res,[1,10,100]);
done();
});
it('5. COLUMN', function(done) {
alasql.options.modifier = 'COLUMN';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
assert.deepEqual(res,[1,2,3,undefined]);
done();
});
it('6. MATRIX', function(done) {
alasql.options.modifier = 'MATRIX';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
//console.log(res);
// Wrong with reduced rows
assert.deepEqual(res,[[1,10,100],[2,20,200],[3,30,undefined],[undefined,40,400]]);
done();
});
it('6a. MATRIX', function(done) {
alasql.options.modifier = 'MATRIX';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b \
ORDER BY a',[data1,data2]);
//console.log(res);
// Wrong with reduced rows
assert.deepEqual(res,[[undefined,40,400],[1,10,100],[2,20,200],[3,30,undefined]]);
done();
});
it('7. RECORDSET', function(done) {
alasql.options.modifier = "RECORDSET";
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
//console.log(res);
// Wrong with reduced rows
assert.deepEqual(res, {data:
[ { a: 1, b: 10, c: 100 },
{ a: 2, b: 20, c: 200 },
{ a: 3, b: 30 },
{ b: 40, c: 400 } ],
columns: [{columnid:'a'},{columnid:'b'},{columnid:'c'}]}
);
done();
});
it('8. INDEX', function(done) {
alasql.options.modifier = 'INDEX';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
assert.deepEqual(res,{ '1': 10, '2': 20, '3': 30, undefined: 40 });
done();
});
it('9. TEXTSTRING', function(done) {
alasql.options.modifier = 'TEXTSTRING';
var res = alasql('SELECT t1.*,t2.* FROM ? t1 OUTER JOIN ? t2 USING b',[data1,data2]);
assert.deepEqual(res,'1\n2\n3\n');
done();
});
*/
it('99. Drop phase', function(done) {
delete alasql.options.modifier;
alasql('DROP DATABASE test270');
done();
});
});