UNPKG

alasql

Version:

AlaSQL.js - JavaScript SQL database library for relational and graph data manipulation with support of localStorage, IndexedDB, and Excel

80 lines (69 loc) 2.48 kB
if(typeof exports === 'object') { var assert = require("assert"); var alasql = require('..'); } else { __dirname = '.'; }; describe('Test 226 CROSS APPLY and OUTER APPLY', function() { it("1. CROSS APPLY", function(done) { var one = [{a:1},{a:2},{a:3}]; var two = [{a:1,b:10},{a:2,b:20},{a:3,b:30}]; var res = alasql('SELECT one.a,three.b FROM ? one \ CROSS APPLY \ (SELECT b FROM ? two WHERE one.a = two.a) three',[one,two]); assert.deepEqual(res,[ { a: 1, b: 10 }, { a: 2, b: 20 }, { a: 3, b: 30 } ]); done(); }); it("2. CROSS APPLY", function(done) { var one = [{a:1},{a:2},{a:3}]; var two = [{a:1,b:10},{a:2,b:20},{a:2,b:30},{a:4,b:40}]; var res = alasql('SELECT one.a,three.b FROM ? one \ CROSS APPLY \ (SELECT b FROM ? two WHERE one.a = two.a) three',[one,two]); // console.log(res); assert.deepEqual(res,[ { a: 1, b: 10 }, { a: 2, b: 20 }, { a: 2, b: 30 } ]); done(); }); it("3. CROSS APPLY", function(done) { var one = [{a:1},{a:2},{a:3},{a:4}]; var two = [{a:1,b:10},{a:2,b:20},{a:2,b:30},{a:4,b:40}]; var res = alasql('SELECT one.a,three.b FROM ? one \ CROSS APPLY \ (SELECT b FROM ? two WHERE one.a = two.a) three',[one,two]); // console.log(res); assert.deepEqual(res,[ { a: 1, b: 10 }, { a: 2, b: 20 }, { a: 2, b: 30 }, { a: 4, b: 40 } ]); done(); }); it("4. OUTER APPLY", function(done) { var one = [{a:1},{a:2},{a:3},{a:4}]; var two = [{a:1,b:10},{a:2,b:20},{a:2,b:30},{a:4,b:40}]; var res = alasql('SELECT one.a,three.b FROM ? one \ OUTER APPLY \ (SELECT b FROM ? two WHERE one.a = two.a) three',[one,two]); // console.log(res); assert.deepEqual(res,[ { a: 1, b: 10 }, { a: 2, b: 20 }, { a: 2, b: 30 }, { a: 3, b:undefined }, { a: 4, b: 40 } ]); done(); }); it("5. CROSS APPLY", function(done) { var res = alasql('SELECT one._ AS a,two._ AS b FROM RANGE(1,5) AS one \ OUTER APPLY (SELECT COLUMN ARRAY(_) FROM RANGE(1,one._) half GROUP BY half._ % 2) two'); // console.log(res); assert.deepEqual(res,[ { a: 1, b: [ 1 ] }, { a: 2, b: [ 1 ] }, { a: 2, b: [ 2 ] }, { a: 3, b: [ 1, 3 ] }, { a: 3, b: [ 2 ] }, { a: 4, b: [ 1, 3 ] }, { a: 4, b: [ 2, 4 ] }, { a: 5, b: [ 1, 3, 5 ] }, { a: 5, b: [ 2, 4 ] } ]); done(); }); });