sql-json-generator
Version:
Module to create SQL queries from JSON objects
1,249 lines (929 loc) • 42.3 kB
JavaScript
var should = require('chai').should();
var expect = require('chai').expect;
var SQLGenerator = require('../index');
describe('#select - json errors', function () {
var sqlGenerator = new SQLGenerator();
var sqlParams;
it('call without params', function () {
expect(sqlGenerator.select()).to.be.null;
});
it('call with missing $select', function () {
sqlParams = {
$from: 'table1',
$where: [{
id_mi_item_inventario: 3
}]
};
expect(sqlGenerator.select(sqlParams)).to.be.null;
});
it('call with missing $fields', function () {
sqlParams = {
$from: 'table1',
$where: [{
id_mi_item_inventario: 3
}]
};
expect(sqlGenerator.select(sqlParams)).to.be.null;
})
it('call with empty $fields', function () {
sqlParams = {
$from: 'table1',
$where: [{
id_mi_item_inventario: 3
}],
$fields: []
};
expect(sqlGenerator.select(sqlParams)).to.be.null;
});
});
describe('#select - queries', function () {
var sqlGenerator = new SQLGenerator();
var sqlParams;
it('simple field', function () {
sqlParams = {
$from: 'table1',
$fields: ['field_a'],
$where: [{
field_d: 1
}]
};
var expectedResult = 'SELECT `table1`.`field_a` FROM `table1` WHERE `table1`.`field_d` = \'1\'';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('multiple fields', function () {
sqlParams = {
$from: 'table1',
$fields: ['field_a', 'field_b', 'field_c'],
$where: [{
field_d: 1
}]
};
var expectedResult = 'SELECT `table1`.`field_a`, `table1`.`field_b`, `table1`.`field_c` FROM `table1` WHERE `table1`.`field_d` = \'1\'';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('multiple wrapped fields', function () {
sqlParams = {
$from: 'table1',
$fields: [{
$field: 'column_a'
}, {
$field: 'column_b'
}]
};
var expectedResult = 'SELECT `table1`.`column_a`, `table1`.`column_b` FROM `table1`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('multiple $as fields', function () {
sqlParams = {
$from: 'table1',
$fields: [{
$field: 'column_a',
$as: "new_column_a"
}, {
$field: 'column_b',
$as: "new_column_b"
}]
};
var expectedResult = 'SELECT `table1`.`column_a` AS new_column_a, `table1`.`column_b` AS new_column_b FROM `table1`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('call with missing $where', function () {
sqlParams = {
$from: 'table1',
$fields: ['field_a'],
$where: []
};
var expectedResult = 'SELECT `table1`.`field_a` FROM `table1`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $using', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` USING(`id_unidade`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $using $as', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', {
$field: 'nome',
$as: 'setor'
}, {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', {
$field: 'nome',
$as: 'unidade'
}]
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome` AS setor, `unidades`.`id_unidade`, `unidades`.`nome` AS unidade FROM `setores` INNER JOIN `unidades` USING(`id_unidade`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('nested $inner $using $as', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', {
$field: 'nome',
$as: 'setor'
}, {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', {
$field: 'nome',
$as: 'unidade'
}, {
$inner: 'entidades',
$using: 'id_entidade',
$fields: ['id_entidade', {
$field: 'sigla',
$as: 'entidade'
}]
}]
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome` AS setor, `unidades`.`id_unidade`, `unidades`.`nome` AS unidade, `entidades`.`id_entidade`, `entidades`.`sigla` AS entidade FROM `setores` INNER JOIN `unidades` USING(`id_unidade`) INNER JOIN `entidades` USING(`id_entidade`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $using $where', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
}],
$where: [{
ativo: 1
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` USING(`id_unidade`) WHERE `setores`.`ativo` = \'1\'';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('nested $inner $using multiple $where', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome'],
$where: [{
ativo: 1
}]
}],
$where: [{
ativo: 1
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` USING(`id_unidade`) WHERE `setores`.`ativo` = \'1\' AND `unidades`.`ativo` = \'1\'';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $dateFormat', function () {
sqlParams = {
$from: 'mi_itens',
$fields: ['id_mi_item', {
$field: 'data',
$dateFormat: '%Y-%m-%d',
$as: 'data'
}]
};
var expectedResult = 'SELECT `mi_itens`.`id_mi_item`, DATE_FORMAT(`mi_itens`.`data`,\'%Y-%m-%d\') AS data FROM `mi_itens`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $count', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: [{
$field: 'id_chamado_log',
$count: 1,
$as: 'total'
}]
};
var expectedResult = 'SELECT COUNT(`chamados_logs`.`id_chamado_log`) AS total FROM `chamados_logs`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $avg', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: [{
$field: 'id_chamado_log',
$avg: 1,
$as: 'total'
}]
};
var expectedResult = 'SELECT AVG(`chamados_logs`.`id_chamado_log`) AS total FROM `chamados_logs`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $min', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: [{
$field: 'id_chamado_log',
$min: 1,
$as: 'total'
}]
};
var expectedResult = 'SELECT MIN(`chamados_logs`.`id_chamado_log`) AS total FROM `chamados_logs`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $max', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: [{
$field: 'id_chamado_log',
$max: 1,
$as: 'total'
}]
};
var expectedResult = 'SELECT MAX(`chamados_logs`.`id_chamado_log`) AS total FROM `chamados_logs`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $sum', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: [{
$field: 'id_chamado_log',
$sum: 1,
$as: 'total'
}]
};
var expectedResult = 'SELECT SUM(`chamados_logs`.`id_chamado_log`) AS total FROM `chamados_logs`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $upper', function () {
sqlParams = {
$from: 'categorias_unidades_medidas',
$fields: [{
$field: 'sigla',
$upper: 1,
$as: 'unidade'
}]
};
var expectedResult = 'SELECT UPPER(`categorias_unidades_medidas`.`sigla`) AS unidade FROM `categorias_unidades_medidas`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $lower', function () {
sqlParams = {
$from: 'categorias_unidades_medidas',
$fields: [{
$field: 'sigla',
$lower: 1,
$as: 'unidade'
}]
};
var expectedResult = 'SELECT LOWER(`categorias_unidades_medidas`.`sigla`) AS unidade FROM `categorias_unidades_medidas`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $groupConcat', function () {
sqlParams = {
$from: 'estoques',
$fields: [
'id_estoque',
{
$inner: 'estoques_departamentos',
$using: 'id_estoque',
$fields: [
{
$field: 'id_categoria_insumo_departamento',
$groupConcat: 1,
$as: 'departamentos'
}
]
}
]
};
var expectedResult = 'SELECT `estoques`.`id_estoque`, GROUP_CONCAT(`estoques_departamentos`.`id_categoria_insumo_departamento`) AS departamentos FROM `estoques` INNER JOIN `estoques_departamentos` USING(`id_estoque`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $function', function () {
sqlParams = {
$from: 'categorias_unidades_medidas',
$fields: [{
$field: 'sigla',
$function: 'ACOS'
}]
};
var expectedResult = 'SELECT ACOS(`categorias_unidades_medidas`.`sigla`) FROM `categorias_unidades_medidas`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$field $function not a string', function () {
sqlParams = {
$from: 'categorias_unidades_medidas',
$fields: [{
$field: 'sigla',
$function: 1
}]
};
var expectedResult = 'SELECT `categorias_unidades_medidas`.`sigla` FROM `categorias_unidades_medidas`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $using $count', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome', {
$field: 'id_unidade',
$avg: 1,
$as: 'average'
}]
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome`, AVG(`unidades`.`id_unidade`) AS average FROM `setores` INNER JOIN `unidades` USING(`id_unidade`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $using $count $table', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
},
{
$table: 'unidades',
$field: 'id_unidade',
$avg: 1,
$as: 'average'
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome`, AVG(`unidades`.`id_unidade`) AS average FROM `setores` INNER JOIN `unidades` USING(`id_unidade`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$left $right $full $using', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$left: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
}, {
$right: 'usuarios',
$using: 'id_usuario',
$fields: ['id_usuario', 'nome']
}, {
$full: 'avioes',
$using: 'id_aviao',
$fields: ['id_aviao', 'nome']
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome`, `usuarios`.`id_usuario`, `usuarios`.`nome`, `avioes`.`id_aviao`, `avioes`.`nome` FROM `setores` LEFT JOIN `unidades` USING(`id_unidade`) RIGHT JOIN `usuarios` USING(`id_usuario`) FULL JOIN `avioes` USING(`id_aviao`)';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $on', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$on: {
$parent: 'id_unidade_customer',
$child: 'id_unidade'
},
$fields: ['id_unidade', 'nome']
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` ON `setores`.`id_unidade_customer` = `unidades`.`id_unidade`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('nested $inner $on', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', {
$field: 'nome',
$as: 'setor'
}, {
$inner: 'unidades',
$on: {
$parent: 'id_unidade',
$child: 'id_unidade'
},
$fields: ['id_unidade', {
$field: 'nome',
$as: 'unidade'
}, {
$inner: 'entidades',
$on: {
$parent: 'id_entidade',
$child: 'id_entidade'
},
$fields: ['id_entidade', {
$field: 'sigla',
$as: 'entidade'
}]
}]
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome` AS setor, `unidades`.`id_unidade`, `unidades`.`nome` AS unidade, `entidades`.`id_entidade`, `entidades`.`sigla` AS entidade FROM `setores` INNER JOIN `unidades` ON `setores`.`id_unidade` = `unidades`.`id_unidade` INNER JOIN `entidades` ON `unidades`.`id_entidade` = `entidades`.`id_entidade`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$left $right $full $on', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$left: 'unidades',
$on: {
$parent: 'id_unidade_customer',
$child: 'id_unidade'
},
$fields: ['id_unidade', 'nome']
}, {
$right: 'usuarios',
$on: {
$parent: 'id_usuario_customer',
$child: 'id_usuario'
},
$fields: ['id_usuario', 'nome']
}, {
$full: 'avioes',
$on: {
$parent: 'id_aviao_customer',
$child: 'id_aviao'
},
$fields: ['id_aviao', 'nome']
}]
};
var expectedResult = 'SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome`, `usuarios`.`id_usuario`, `usuarios`.`nome`, `avioes`.`id_aviao`, `avioes`.`nome` FROM `setores` LEFT JOIN `unidades` ON `setores`.`id_unidade_customer` = `unidades`.`id_unidade` RIGHT JOIN `usuarios` ON `setores`.`id_usuario_customer` = `usuarios`.`id_usuario` FULL JOIN `avioes` ON `setores`.`id_aviao_customer` = `avioes`.`id_aviao`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$inner $on (array)', function () {
sqlParams = {
$from: 'chamados_logs',
$fields: ['id_chamado_log', 'id_chamado', 'id_categoria_responsavel_chamado', 'id_setor_responsavel', 'timestamp', 'log', {
$inner: 'categorias_responsaveis_chamados',
$on: [{
$parent: 'id_categoria_responsavel_chamado',
$child: 'id_categoria_responsavel_chamado'
}, {
$parent: 'id_setor_responsavel',
$child: 'id_setor_responsavel'
}],
$fields: [{
$field: 'nome',
$as: 'crc'
}]
}],
$where: [{
$field: "id_chamado",
$eq: 28200
}]
};
var expectedResult = 'SELECT `chamados_logs`.`id_chamado_log`, `chamados_logs`.`id_chamado`, `chamados_logs`.`id_categoria_responsavel_chamado`, `chamados_logs`.`id_setor_responsavel`, `chamados_logs`.`timestamp`, `chamados_logs`.`log`, `categorias_responsaveis_chamados`.`nome` AS crc FROM `chamados_logs` INNER JOIN `categorias_responsaveis_chamados` ON (`chamados_logs`.`id_categoria_responsavel_chamado` = `categorias_responsaveis_chamados`.`id_categoria_responsavel_chamado` AND `chamados_logs`.`id_setor_responsavel` = `categorias_responsaveis_chamados`.`id_setor_responsavel` ) WHERE `chamados_logs`.`id_chamado` = \'28200\'';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$limit', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$limit: {
$offset: 0,
$rows: 10
}
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` LIMIT 0,10';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$limit $where', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$where: [{
'deleted': 0
}, {
'arquivado': 0
}],
$limit: {
$offset: 10,
$rows: 10
}
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` WHERE `mi_itens_inventarios`.`deleted` = \'0\' AND `mi_itens_inventarios`.`arquivado` = \'0\' LIMIT 10,10';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$order', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$where: [{
'deleted': 0
}, {
'arquivado': 0
}],
$order: ['id_mi_item_inventario']
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` WHERE `mi_itens_inventarios`.`deleted` = \'0\' AND `mi_itens_inventarios`.`arquivado` = \'0\' ORDER BY `mi_itens_inventarios`.`id_mi_item_inventario`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$order DESC', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$order: [{
$field: 'id_mi_item_inventario',
$desc: 1
}]
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` ORDER BY `mi_itens_inventarios`.`id_mi_item_inventario` DESC';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$order $as', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', {
$field: 'id_modelo_insumo',
$as: 'id'
}],
$order: ['id']
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` AS id FROM `mi_itens_inventarios` ORDER BY `mi_itens_inventarios`.`id_modelo_insumo`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$order $as $desc', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', {
$field: 'id_modelo_insumo',
$as: 'id'
}],
$order: [{
$as: 'id',
$desc: 1
}]
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` AS id FROM `mi_itens_inventarios` ORDER BY `mi_itens_inventarios`.`id_modelo_insumo` DESC';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$order $as $desc complex', function () {
sqlParams = {
$from: 'modelos_insumos',
$fields: ['codigo', {
$field: 'nome',
$as: 'modelo'
}, 'lote', 'fracionamento', {
$inner: 'categorias_insumos',
$using: 'id_categoria_insumo',
$fields: [{
$field: 'nome',
$as: 'categoria'
}, {
$inner: 'categorias_insumos_departamentos',
$using: 'id_categoria_insumo_departamento',
$fields: [{
$field: 'nome',
$as: 'departamento'
},]
}]
}, {
$inner: 'categorias_unidades_medidas',
$using: 'id_categoria_unidade_medida',
$fields: [{
$field: 'sigla',
$as: 'unidade'
},]
}],
$order: [{
$table: 'categorias_insumos_departamentos',
$field: 'nome',
$desc: 1
}, 'categoria', {
$as: 'modelo',
$desc: 1
}]
};
var expectedResult = 'SELECT `modelos_insumos`.`codigo`, `modelos_insumos`.`nome` AS modelo, `modelos_insumos`.`lote`, `modelos_insumos`.`fracionamento`, `categorias_insumos`.`nome` AS categoria, `categorias_insumos_departamentos`.`nome` AS departamento, `categorias_unidades_medidas`.`sigla` AS unidade FROM `modelos_insumos` INNER JOIN `categorias_insumos` USING(`id_categoria_insumo`) INNER JOIN `categorias_insumos_departamentos` USING(`id_categoria_insumo_departamento`) INNER JOIN `categorias_unidades_medidas` USING(`id_categoria_unidade_medida`) ORDER BY `categorias_insumos_departamentos`.`nome` DESC ,`categorias_insumos`.`nome` ,`modelos_insumos`.`nome` DESC';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$in numbers', function () {
sqlParams = {
$from: 'gesup_usuarios_perfis_privilegios',
$fields: ['id_categoria_gesup', 'id_categoria_gesup_acao'],
$where: [{
$field: 'id_perfil',
$in: [2, 4, 7]
}]
};
var expectedResult = "SELECT `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup`, `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup_acao` FROM `gesup_usuarios_perfis_privilegios` WHERE `gesup_usuarios_perfis_privilegios`.`id_perfil` IN ('2','4','7')";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$in strings', function () {
sqlParams = {
$from: 'gesup_usuarios_perfis_privilegios',
$fields: ['id_categoria_gesup', 'id_categoria_gesup_acao'],
$where: [{
$field: 'id_perfil',
$in: ['AA', 'BB', 'CC']
}]
};
var expectedResult = "SELECT `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup`, `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup_acao` FROM `gesup_usuarios_perfis_privilegios` WHERE `gesup_usuarios_perfis_privilegios`.`id_perfil` IN ('AA','BB','CC')";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$in empty', function () {
sqlParams = {
$from: 'gesup_usuarios_perfis_privilegios',
$fields: ['id_categoria_gesup', 'id_categoria_gesup_acao'],
$where: [{
$field: 'id_perfil',
$in: []
}]
};
var expectedResult = "SELECT `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup`, `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup_acao` FROM `gesup_usuarios_perfis_privilegios`";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$in not an array', function () {
sqlParams = {
$from: 'gesup_usuarios_perfis_privilegios',
$fields: ['id_categoria_gesup', 'id_categoria_gesup_acao'],
$where: [{
$field: 'id_perfil',
$in: 12
}]
};
var expectedResult = "SELECT `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup`, `gesup_usuarios_perfis_privilegios`.`id_categoria_gesup_acao` FROM `gesup_usuarios_perfis_privilegios`";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$where using full field notation', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
}],
$where: [{
$table: 'setores',
$field: 'ativo',
$eq: 1
}, {
$table: 'unidades',
$field: 'ativo',
$eq: 1
}]
};
var expectedResult = "SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` USING(`id_unidade`) WHERE `setores`.`ativo` = '1' AND `unidades`.`ativo` = '1'";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$where using full field notation with optional $table', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome', {
$inner: 'unidades',
$using: 'id_unidade',
$fields: ['id_unidade', 'nome']
}],
$where: [{
$field: 'ativo',
$eq: 1
}, {
$table: 'unidades',
$field: 'ativo',
$eq: 1
}]
};
var expectedResult = "SELECT `setores`.`id_setor`, `setores`.`nome`, `unidades`.`id_unidade`, `unidades`.`nome` FROM `setores` INNER JOIN `unidades` USING(`id_unidade`) WHERE `setores`.`ativo` = '1' AND `unidades`.`ativo` = '1'";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$where $like', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome'],
$where: [{
$field: 'nome',
$like: '%prin%'
}]
};
var expectedResult = "SELECT `setores`.`id_setor`, `setores`.`nome` FROM `setores` WHERE `setores`.`nome` LIKE '%prin%'";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$sqlCalcFoundRows', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome'],
$where: [],
$sqlCalcFoundRows: true,
$limit: {
$rows: 20,
$offset: 0
}
};
var expectedResult = "SELECT SQL_CALC_FOUND_ROWS `setores`.`id_setor`, `setores`.`nome` FROM `setores` LIMIT 0,20";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$sqlCalcFoundRows without $limit', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome'],
$where: [],
$sqlCalcFoundRows: true
};
var expectedResult = "SELECT `setores`.`id_setor`, `setores`.`nome` FROM `setores`";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$sqlCalcFoundRows', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome'],
$where: [],
$sqlCalcFoundRows: true,
$limit: {
$rows: 20,
$offset: 0
}
};
var expectedResult = "SELECT SQL_CALC_FOUND_ROWS `setores`.`id_setor`, `setores`.`nome` FROM `setores` LIMIT 0,20";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$sqlCalcFoundRows false', function () {
sqlParams = {
$from: 'setores',
$fields: ['id_setor', 'nome'],
$where: [],
$sqlCalcFoundRows: false,
$limit: {
$rows: 20,
$offset: 0
}
};
var expectedResult = "SELECT `setores`.`id_setor`, `setores`.`nome` FROM `setores` LIMIT 0,20";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$group', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$where: [{
'deleted': 0
}],
$group: ['arquivado']
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` WHERE `mi_itens_inventarios`.`deleted` = \'0\' GROUP BY `mi_itens_inventarios`.`arquivado`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$group $as', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', {
$field: 'id_modelo_insumo',
$as: 'id'
}],
$group: [{
$as: 'id'
}]
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` AS id FROM `mi_itens_inventarios` GROUP BY `mi_itens_inventarios`.`id_modelo_insumo`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$group multiple', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$group: ['arquivado', 'deleted']
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` GROUP BY `mi_itens_inventarios`.`arquivado` ,`mi_itens_inventarios`.`deleted`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$group complex', function () {
sqlParams = {
$from: 'modelos_insumos',
$fields: ['codigo', {
$field: 'nome',
$as: 'modelo'
}, 'lote', 'fracionamento', {
$inner: 'categorias_insumos',
$using: 'id_categoria_insumo',
$fields: [{
$field: 'nome',
$as: 'categoria'
}, {
$inner: 'categorias_insumos_departamentos',
$using: 'id_categoria_insumo_departamento',
$fields: [{
$field: 'nome',
$as: 'departamento'
},]
}]
}, {
$inner: 'categorias_unidades_medidas',
$using: 'id_categoria_unidade_medida',
$fields: [{
$field: 'sigla',
$as: 'unidade'
},]
}],
$group: [{
$table: 'categorias_insumos_departamentos',
$field: 'nome'
}, 'categoria', {
$as: 'modelo'
}]
};
var expectedResult = 'SELECT `modelos_insumos`.`codigo`, `modelos_insumos`.`nome` AS modelo, `modelos_insumos`.`lote`, `modelos_insumos`.`fracionamento`, `categorias_insumos`.`nome` AS categoria, `categorias_insumos_departamentos`.`nome` AS departamento, `categorias_unidades_medidas`.`sigla` AS unidade FROM `modelos_insumos` INNER JOIN `categorias_insumos` USING(`id_categoria_insumo`) INNER JOIN `categorias_insumos_departamentos` USING(`id_categoria_insumo_departamento`) INNER JOIN `categorias_unidades_medidas` USING(`id_categoria_unidade_medida`) GROUP BY `categorias_insumos_departamentos`.`nome` ,`categorias_insumos`.`nome` ,`modelos_insumos`.`nome`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
describe('#select - Having', function () {
var sqlGenerator = new SQLGenerator();
var sqlParams;
});
describe('#select - $raw attribute', function () {
var sqlGenerator = new SQLGenerator();
var sqlParams;
it('$raw in SELECT', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', {
$raw: "MAX(`fieldA`) as max"
}]
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, MAX(`fieldA`) as max FROM `mi_itens_inventarios`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$raw in SELECT (double)', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', {
$raw: "MAX(`fieldA`) as max"
}, {
$raw: "MIN(`fieldA`) as min"
}]
};
var expectedResult = 'SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, MAX(`fieldA`) as max, MIN(`fieldA`) as min FROM `mi_itens_inventarios`';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$raw in WHERE', function () {
sqlParams = {
$from: 'table1',
$fields: ['field_a'],
$where: [{
$raw: "field_a = 12"
}]
};
var expectedResult = 'SELECT `table1`.`field_a` FROM `table1` WHERE field_a = 12';
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$raw in ORDER', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$where: [{
'deleted': 0
}, {
'arquivado': 0
}],
$order: [{ $raw: '`mi_itens_inventarios` DESC, `id_modelo_insumo`' }]
};
var expectedResult = "SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` WHERE `mi_itens_inventarios`.`deleted` = '0' AND `mi_itens_inventarios`.`arquivado` = '0' ORDER BY `mi_itens_inventarios` DESC, `id_modelo_insumo`";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$raw in GROUP BY', function () {
sqlParams = {
$from: 'mi_itens_inventarios',
$fields: ['id_mi_item_inventario', 'id_modelo_insumo'],
$where: [{
'deleted': 0
}, {
'arquivado': 0
}],
$group: [{ $raw: '`mi_itens_inventarios`, `id_modelo_insumo`' }]
};
var expectedResult = "SELECT `mi_itens_inventarios`.`id_mi_item_inventario`, `mi_itens_inventarios`.`id_modelo_insumo` FROM `mi_itens_inventarios` WHERE `mi_itens_inventarios`.`deleted` = '0' AND `mi_itens_inventarios`.`arquivado` = '0' GROUP BY `mi_itens_inventarios`, `id_modelo_insumo`";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
it('$raw in HAVING', function () {
sqlParams = {
$from: 'pessoas_fisicas',
$fields: [
'data_nascimento',
{
$field: 'data_nascimento',
$count: 1,
$as: 'count'
}
],
$where: [{
$table: "pessoas_fisicas",
$field: "nome",
$like: "%joao%"
},
{
$as: 'count',
$gt: 1
}],
$group: [
{ $as: 'count' }
],
$having: [
{
$raw: "`count` > 1"
}
]
};
var expectedResult = "SELECT `pessoas_fisicas`.`data_nascimento`, COUNT(`pessoas_fisicas`.`data_nascimento`) AS count FROM `pessoas_fisicas` WHERE `pessoas_fisicas`.`nome` LIKE '%joao%' GROUP BY `pessoas_fisicas`.`data_nascimento` HAVING `count` > 1";
sqlGenerator.select(sqlParams).should.equal(expectedResult);
});
});
});