Skip to content
Snippets Groups Projects
Commit 48c999e1 authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Fix SQL in /spatial

parent b602c01d
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!34Db simcaq dev2
Pipeline #
...@@ -12,34 +12,13 @@ const sqlQuery = require(`${libs}/db/query_exec`); ...@@ -12,34 +12,13 @@ const sqlQuery = require(`${libs}/db/query_exec`);
const response = require(`${libs}/middlewares/response`); const response = require(`${libs}/middlewares/response`);
const spatialApp = express();
const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`); const ReqQueryFields = require(`${libs}/middlewares/reqQueryFields`);
let rqf = new ReqQueryFields(); const spatialApp = express();
function locationIdToStr(locationId) {
let locationStr = 'Total';
switch(locationId) {
case 1:
locationStr = 'Urbana'; break;
case 2:
locationStr = 'Rural'; break;
case 3:
locationStr = 'Área de assentamento'; break;
case 4:
locationStr = 'Terra indígena'; break;
case 5:
locationStr = 'Área remanescente de quilombos'; break;
case 6:
locationStr = 'Unidade de uso sustentável'; break;
} let rqf = new ReqQueryFields();
return locationStr;
}
function schoolYearIdToStr(schoolYearId) function schoolYearIdToStr(schoolYearId) {
{
let schoolYearStr; let schoolYearStr;
switch(schoolYearId) { switch(schoolYearId) {
case 11: case 11:
...@@ -160,7 +139,7 @@ rqf.addField({ ...@@ -160,7 +139,7 @@ rqf.addField({
name: 'state', name: 'state',
table: 'estado', table: 'estado',
tableField: 'nome', tableField: 'nome',
resultField: 'estado_name', resultField: 'state_name',
where: { where: {
relation: '=', relation: '=',
type: 'integer', type: 'integer',
...@@ -184,6 +163,16 @@ rqf.addField({ ...@@ -184,6 +163,16 @@ rqf.addField({
primary: 'id', primary: 'id',
foreign: 'municipio_id' foreign: 'municipio_id'
} }
}).addValue({
name: 'school',
table: 'escola',
tableField: 'nome_escola',
resultField: 'school_name',
where: {
relation: '=',
type: 'integer',
field: 'id'
}
}); });
spatialApp.get('/sociodemographic', rqf.parse(), rqf.build(), (req, res, next) => { spatialApp.get('/sociodemographic', rqf.parse(), rqf.build(), (req, res, next) => {
...@@ -268,31 +257,36 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { ...@@ -268,31 +257,36 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
const totalSchoolsQry = req.sql.clone() const totalSchoolsQry = req.sql.clone()
.field('\'Brasil\'', 'name') .field('\'Brasil\'', 'name')
.field('0', 'location') .field('\'Total\'', 'location_name')
.field('COUNT(DISTINCT(escola.id))', 'total') .field('COUNT(DISTINCT(escola.id))', 'total')
.field('escola.ano_censo', 'census_year') .field('escola.ano_censo', 'census_year')
.from('escola') .from('escola')
.join('turma', null, 'turma.ano_censo=escola.ano_censo AND turma.escola_id = escola.id') .from('turma')
.where('escola.ano_censo=turma.ano_censo AND escola.id=turma.escola_id')
.where(`escola.ano_censo IN (${censusYearQry})`) .where(`escola.ano_censo IN (${censusYearQry})`)
.where('turma.tipo_turma_id = 0') .where('turma.tipo_turma_id = 0')
.group('escola.ano_censo'); .group('escola.ano_censo');
const schoolsPerLocationQry = req.sql.clone() const schoolsPerLocationQry = req.sql.clone()
.field('\'Brasil\'', 'name') .field('\'Brasil\'', 'name')
.field('escola.cod_localizacao', 'location')
.field('COUNT(DISTINCT(escola.id))', 'total') .field('COUNT(DISTINCT(escola.id))', 'total')
.field('escola.ano_censo', 'census_year') .field('escola.ano_censo', 'census_year')
.field('localizacao.descricao', 'location_name')
.from('escola') .from('escola')
.join('turma', null, 'turma.ano_censo=escola.ano_censo AND turma.escola_id=escola.id') .from('localizacao')
.where('escola.cod_localizacao=localizacao.id')
.from('turma')
.where('escola.ano_censo=turma.ano_censo AND escola.id=turma.escola_id')
.where(`escola.ano_censo IN (${censusYearQry})`) .where(`escola.ano_censo IN (${censusYearQry})`)
.where('turma.tipo_turma_id = 0') .where('turma.tipo_turma_id = 0')
.group('escola.cod_localizacao') .group('escola.cod_localizacao')
.group('escola.ano_censo') .group('escola.ano_censo')
.order('escola.cod_localizacao'); .group('localizacao.descricao')
.order('localizacao.descricao');
const schoolClassYearQry = squel.select() const schoolClassYearQry = squel.select()
.field('MAX(matricula.ano_censo)') .field('MAX(turma.ano_censo)')
.from('matricula') .from('turma')
.toString(); .toString();
const enrollmentsQry = req.sql.clone() const enrollmentsQry = req.sql.clone()
...@@ -301,34 +295,37 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { ...@@ -301,34 +295,37 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
.field('matricula.ano_censo', 'census_year') .field('matricula.ano_censo', 'census_year')
.from('matricula') .from('matricula')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`) .where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.where('matricula.tipo <= 3') .where('matricula.tipo<=3')
.group('matricula.ano_censo'); .group('matricula.ano_censo');
const enrollmentsPerAdmDepQry = squel.select() const enrollmentsPerAdmDepQry = req.sql.clone()
.field('\'Brasil\'', 'name') .field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total') .field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year') .field('matricula.ano_censo', 'census_year')
.field('dependencia_adm.nome', 'adm_dependency_name') .field('dependencia_adm.nome', 'adm_dependency_name')
.from('matricula') .from('matricula')
.join('dependencia_adm', null, 'matricula.dependencia_adm_id=dependencia_adm.id') .from('dependencia_adm')
.where('matricula.dependencia_adm_id=dependencia_adm.id')
.where('matricula.tipo <= 3') .where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`) .where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo') .group('matricula.ano_censo')
.group('dependencia_adm.nome') .group('dependencia_adm.nome')
.order('dependencia_adm.nome'); .order('dependencia_adm.nome');
const enrollmentsPerSchoolLevelQry = squel.select() const enrollmentsPerSchoolLevelQry = req.sql.clone()
.field('\'Brasil\'', 'name') .field('\'Brasil\'', 'name')
.field('COALESCE(SUM(matricula.id), 0)', 'total') .field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year') .field('matricula.ano_censo', 'census_year')
.field('etapa_ensino.desc_etapa', 'school_level_name') .field('etapa_ensino.desc_etapa', 'school_level_name')
.from('matricula') .from('matricula')
.join('etapa_ensino', null, 'matricula.etapa_ensino_id=etapa_ensino.id') .from('etapa_ensino')
.where('matricula.etapa_ensino_id=etapa_ensino.id')
.where('matricula.tipo <= 3') .where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`) .where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo') .group('matricula.ano_censo')
.group('etapa_ensino.desc_etapa') .group('etapa_ensino.desc_etapa')
.order('etapa_ensino.desc_etapa'); .group('etapa_ensino.id')
.order('etapa_ensino.id');
const queryLabels = [ "school", "school_per_location", "enrollment", "enrollment_per_adm_dep", const queryLabels = [ "school", "school_per_location", "enrollment", "enrollment_per_adm_dep",
"enrollment_per_school_level" ]; "enrollment_per_school_level" ];
...@@ -337,13 +334,6 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { ...@@ -337,13 +334,6 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
// wait until all queries finish or one of them fail // wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet)).then((queryResults) => { Promise.all(dbExecAll(querySet)).then((queryResults) => {
req.result = processResultSet(queryResults, queryLabels); req.result = processResultSet(queryResults, queryLabels);
for(let label in req.result) {
for(let row of req.result[label]) {
if (row.hasOwnProperty('location')) {
row.location = locationIdToStr(row.location);
}
}
}
next(); next();
}).catch((error) => { }).catch((error) => {
log.error(`[SQL query error] ${error}`); log.error(`[SQL query error] ${error}`);
...@@ -351,23 +341,26 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => { ...@@ -351,23 +341,26 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
}); });
}, response('spatial')); }, response('spatial'));
spatialApp.get('/educational/school_level', rqf.parse(), rqf.build(), (req, res, next) => { spatialApp.get('/educational/school_level', (req, res, next) => {
const enrollmentsPerSchoolLevelYearQry = squel.select() const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(matricula.ano_censo)', 'census_year') .field('MAX(matricula.ano_censo)', 'census_year')
.from('matricula'); .from('matricula');
const enrollmentsPerSchoolLevelQry = req.sql.clone() const enrollmentsPerSchoolLevelQry = squel.select()
.field('COALESCE(COUNT(matricula.id), 0)', 'total') .field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year') .field('matricula.ano_censo', 'census_year')
.field('matricula.serie_ano_id', 'school_year') .field('matricula.serie_ano_id', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level_name') .field('etapa_ensino.desc_etapa', 'school_level')
.from('matricula') .from('matricula')
.join('etapa_ensino', null, 'matricula.etapa_ensino_id=etapa_ensino.id') .from('etapa_ensino')
.where(`matricula.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`) .where(`matricula.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('matricula.etapa_ensino_id = etapa_ensino.id')
.where('matricula.tipo <= 3') .where('matricula.tipo <= 3')
.group('etapa_ensino.desc_etapa') .group('etapa_ensino.desc_etapa')
.group('etapa_ensino.id')
.group('matricula.serie_ano_id') .group('matricula.serie_ano_id')
.group('matricula.ano_censo') .group('matricula.ano_censo')
.order('etapa_ensino.id')
.order('matricula.serie_ano_id') .order('matricula.serie_ano_id')
.order('matricula.ano_censo'); .order('matricula.ano_censo');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment