UNPKG

mongo-sql

Version:

A mongo-like interface for sql generation, postgres-style

122 lines (109 loc) 2.43 kB
var assert = require('assert'); var builder = require('../'); describe('Functions', function(){ it('should be able to use a function as a column', function(){ var query = { type: 'select' , table: 'users' , columns: { books: { type: 'array_agg' , expression: { type: 'select' , table: 'books' , columns: ['id'] } } , name: 'userName' } }; var result = builder.sql(query); assert.equal( result.toString() , [ 'select ' , 'array_agg( select "books"."id" from "books" ) as "books", ' , '"users"."name" as "userName" ' , 'from "users"' ].join('') ); assert.deepEqual( result.values , [] ); }); it('should be able to use a function as a column using the array syntax', function(){ var query = { type: 'select' , table: 'users' , columns: [ { type: 'array_agg' , expression: { type: 'select' , table: 'books' , columns: ['id'] } } , 'name' ] }; var result = builder.sql(query); assert.equal( result.toString() , [ 'select ' , 'array_agg( select "books"."id" from "books" ), ' , '"users"."name" ' , 'from "users"' ].join('') ); assert.deepEqual( result.values , [] ); }); it('should be able to embed functions', function(){ var query = { type: 'select' , table: 'users' , columns: { books: { type: 'array_to_json' , expression: { type: 'array_agg' , expression: 'bks.book' } } , name: 'userName' } , with: { bks: { type: 'select' , table: 'books' , alias: 'b' , columns: { book: { type: 'row_to_json' , expression: 'b' } } } } }; var result = builder.sql(query); assert.equal( result.toString() , [ 'with ' , '"bks" as (' , 'select row_to_json( b ) as "book" from "books" "b"' , ') select ' , 'array_to_json( array_agg( bks.book ) ) as "books", ' , '"users"."name" as "userName" ' , 'from "users"' ].join('') ); assert.deepEqual( result.values , [] ); }); });