VisionFTF / express-admin / node_modules / xsql / test / examples / examples.js
examples.js
Raw
var xsql = require('../../lib/instance');


describe('readme', function () {
	it('example 1', function () {
		var x = new xsql({dialect:'mysql'});
		var query = [
			x.select(x.names(['col1','col2'],'tbl')),
			x.from(x.name('tbl')),
			x.where(x.eq(x.name('id','tbl'),2)), ';'
		].join(' ');
		console.log(query);
	});
	it('join tables', function () {
		var x = new xsql({dialect:'mysql'});
		var query = [
			x.select([x.name('col','tbl1'),x.name('col','tbl2')]),
			x.from(x.name('tbl1')),
			x.join(x.name('tbl2'),x.eq(x.name('id','tbl1'),x.name('id','tbl2')),'left'),
			';'
		].join(' ');
		console.log(query);
	});
	describe('pg schema', function () {
		it('public', function () {
			var x = new xsql({dialect:'pg'});
			var query = [
				x.select(x.name('col','tbl',x.schema())),
				x.from(x.name('tbl',x.schema())),
				';'
			].join(' ');
			console.log(query);
		});
	});
	it('functions', function () {
		var x = new xsql({dialect:'mysql'});

		var concat = x.func('concat_ws',[
			x.wrap(' '),
			x.name('col1','tbl'),
			x.name('col2','tbl')
		]);

		var group = x.func('group_concat',['distinct', concat],' ');

		console.log(x.as(group,x.name('alias')));

		// group_concat(distinct concat_ws(' ',`tbl`.`col1`,`tbl`.`col2`)) as `alias`
	});
	describe('wrapping', function () {
		it('concat', function () {
			function concat(columns, separator) {
				return (/mysql|pg/.test(x.dialect))
					? x.func('concat_ws',[x.wrap(separator),columns])
					// sqlite
					: columns.join("||'"+separator+"'||");
			}
			var x = new xsql({dialect:'mysql'});
			var partial = concat([x.name('col1','tbl'), x.name('col2','tbl')],',');
			console.log(partial);
			var x = new xsql({dialect:'sqlite'});
			var partial = concat([x.name('col1','tbl'), x.name('col2','tbl')],',');
			console.log(partial);
		});
		it('group', function () {
			function group (columns) {
				return (/mysql|sqlite/.test(x.dialect))
					? x.func('group_concat',['distinct',columns],' ')
					// pg
					: x.func('string_agg',['distinct',[columns,x.wrap(',')].join()],' ')
			}
			var x = new xsql({dialect:'mysql'});
			var partial = group([x.name('col1','tbl'), x.name('col2','tbl')],',');
			console.log(partial);
			var x = new xsql({dialect:'pg'});
			var partial = group([x.name('col1','tbl'), x.name('col2','tbl')],',');
			console.log(partial);
		});
	});
});

describe.skip('examples', function () {
	describe('concat_ws', function () {
		it('concat_ws', function () {
			var x = new xsql({dialect:'mysql'});
			x.func('concat_ws', [x.wrap(','),'col1','col2'])
				.should.equal("concat_ws(',',col1,col2)");
		});
		it('concat_ws', function () {
			var x = new xsql({dialect:'mysql'});
			x.func('concat_ws', [x.wrap(','),x.name('col1'),x.name('col2')])
				.should.equal("concat_ws(',',`col1`,`col2`)");
		});
		it('concat_ws', function () {
			var x = new xsql({dialect:'mysql'});
			x.func('concat_ws', [x.wrap(','),x.name('col1','tbl'),x.name('col2','tbl')])
				.should.equal("concat_ws(',',`tbl`.`col1`,`tbl`.`col2`)");
		});
		it('concat_ws', function () {
			var x = new xsql({dialect:'mysql'});
			x.func('concat_ws', [x.wrap(','),x.names(['col1','col2'],'tbl')])
				.should.equal("concat_ws(',',`tbl`.`col1`,`tbl`.`col2`)");
		});
		it('concat_ws', function () {
			var x = new xsql({dialect:'mysql'});
			x.as(x.func('concat_ws', [x.wrap(','),x.names(['col1','col2'],'tbl')]),x.name('name'))
				.should.equal("concat_ws(',',`tbl`.`col1`,`tbl`.`col2`) as `name`");
		});
	});
	
	describe('group_concat', function () {
		it('group_concat', function () {
			var x = new xsql({dialect:'mysql'});
			var str =
			x.as(
				x.func('group_concat',[
					'distinct',
					x.func('concat_ws', [
						x.wrap(' '),
						x.func('cast', [x.as(x.name('tbl1','col1'),'char')],' '),
						x.func('cast', [x.as(x.name('tbl1','col2'),'char')],' ')
					])
				],' '),
				x.name('name')
			);

			str.should.equal(
				"group_concat(distinct concat_ws(' ',cast(`col1`.`tbl1` as char),cast(`col2`.`tbl1` as char))) as `name`"
			);
		});
		it('group_concat', function () {
			var x = new xsql({dialect:'mysql'});

			var concat = [
				x.wrap(' '),
				x.func('cast', [x.as(x.name('tbl1','col1'),'char')],' '),
				x.func('cast', [x.as(x.name('tbl1','col2'),'char')],' ')
			];

			var group = ['distinct',x.func('concat_ws',concat)];

			var str = x.as(x.func('group_concat', group,' '),x.name('name'));

			str.should.equal(
				"group_concat(distinct concat_ws(' ',cast(`col1`.`tbl1` as char),cast(`col2`.`tbl1` as char))) as `name`"
			);
		});
	});

	describe('select from', function () {
		it('select from', function () {
			var x = new xsql({dialect:'mysql'});

			var concat = [
				x.wrap(' '),
				x.func('cast', [x.as(x.name('tbl1','col1'),'char')],' '),
				x.func('cast', [x.as(x.name('tbl1','col2'),'char')],' ')
			];

			var group = ['distinct',x.func('concat_ws',concat)];

			var column = x.as(x.func('group_concat', group,' '),x.name('name'));

			[x.select(column), x.from(x.name('tbl'))].join(' ').should.equal(
				"select group_concat(distinct concat_ws(' ',cast(`col1`.`tbl1` as char),cast(`col2`.`tbl1` as char))) as `name` from `tbl`"
			);
		});
	});

	describe('join', function () {
		it('join', function () {
			var x = new xsql({dialect:'mysql'});

			var query = [
				x.select(
					(function columns () {
						var concat = [
							x.wrap(' '),
							x.func('cast', x.as(x.name('col1','tbl1'),'char')),
							x.func('cast', x.as(x.name('col2','tbl1'),'char'))
						];

						var group = ['distinct',x.func('concat_ws',concat)];

						return x.as(x.func('group_concat', group,' '),x.name('name'));
					}())
				),

				x.from(x.name('tbl')),

				x.join(
					x.alias(x.name('tbl'),x.name('tbl22')),
					[
						x.eq(x.name('col','tbl'), x.name('col','tbl')),
						x.eq(x.name('col','tbl'), x.name('col','tbl'))
					],
					'left'
				)
			];

			query.join(' ').should.equal(
				"select group_concat(distinct concat_ws(' ',cast(`tbl1`.`col1` as char),cast(`tbl1`.`col2` as char))) as `name` from `tbl` "+
				"left join `tbl` `tbl22` on `tbl`.`col` = `tbl`.`col` and `tbl`.`col` = `tbl`.`col`"
			);
		});
	});
});