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

:racehorse: Change table in /spatial/educationl to go FASTER

Gotta go fast
parent 69befd76
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!44Feature multiple where
Pipeline #
......@@ -20,87 +20,6 @@ const spatialApp = express();
let rqf = new ReqQueryFields();
function schoolYearIdToStr(schoolYearId) {
let schoolYearStr;
switch(schoolYearId) {
case 11:
schoolYearStr = 'Creche - Menor de 1 ano';
break;
case 12:
schoolYearStr = 'Creche - 1 ano';
break;
case 13:
schoolYearStr = 'Creche - 2 anos';
break;
case 14:
schoolYearStr = 'Creche - 3 anos';
break;
case 21:
schoolYearStr = 'Pré-escola - 4 anos';
break;
case 22:
schoolYearStr = 'Pré-escola - 5 anos';
break;
case 31:
schoolYearStr = 'Ens. Fundamental - 1º Ano';
break;
case 32:
schoolYearStr = 'Ens. Fundamental - 1ª série/2º ano';
break;
case 33:
schoolYearStr = 'Ens. Fundamental - 2ª série/3º ano';
break;
case 34:
schoolYearStr = 'Ens. Fundamental - 3ª série/4º ano';
break;
case 35:
schoolYearStr = 'Ens. Fundamental - 4ª série/5º Ano';
break;
case 41:
schoolYearStr = 'Ens. Fundamental - 5ª série/6º ano';
break;
case 42:
schoolYearStr = 'Ens. Fundamental - 6ª série/7º ano';
break;
case 43:
schoolYearStr = 'Ens. Fundamental - 7ª série/8º ano';
break;
case 44:
schoolYearStr = 'Ens. Fundamental - 8ª serie/9º ano';
break;
case 51:
schoolYearStr = 'Ens. Médio - 1ª série'; // equivalent to 'EM 1 Série'
break;
case 52:
schoolYearStr = 'Ens. Médio - 2ª série'; // equivalent to 'EM 2 Série'
break;
case 53:
schoolYearStr = 'Ens. Médio - 3ª série'; // equivalent to 'EM 3 Série'
break;
case 54:
schoolYearStr = 'Ens. Médio - 4ª série'; // equivalent to 'EM 4 Série'
break;
case 61:
schoolYearStr = 'EJA - anos iniciais do Ens. Fundamental';
break;
case 62:
schoolYearStr = 'EJA - anos finais do Ens. Fundamental';
break;
case 63:
schoolYearStr = 'EJA - Ensino Médio';
break;
case 64:
schoolYearStr = 'EJA semi-presencial';
break;
case 71:
schoolYearStr = 'Educação Profissional';
break;
default:
schoolYearStr = 'Não classificado';
}
return schoolYearStr;
}
function processResultSet(querySet, querySetLabels = ["result"], singleResult = false) {
const resultMap = new Map();
let resultIdx = 0;
......@@ -309,88 +228,54 @@ spatialApp.get('/educational', rqf.parse(), rqf.build(), (req, res, next) => {
.order('escola.ano_censo')
.order('dependencia_adm.nome');
const schoolClassYearQry = squel.select()
.field('MAX(matricula.ano_censo)')
.from('matricula')
.toString();
const enrollmentsQry = req.sql.clone()
.field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.from('matricula')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.where('matricula.tipo<=3')
.group('matricula.ano_censo');
.field('COALESCE(SUM(uc201.matriculas), 0)', 'total')
.field('uc201.ano_censo', 'census_year')
.from('uc201')
.group('uc201.ano_censo');
const enrollmentsPerAdmDepQry = req.sql.clone()
.field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.field('COALESCE(SUM(uc201.matriculas), 0)', 'total')
.field('uc201.ano_censo', 'census_year')
.field('dependencia_adm.nome', 'adm_dependency_name')
.from('dependencia_adm')
.from('matricula')
.where('matricula.dependencia_adm_id=dependencia_adm.id')
.where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo')
.from('uc201')
.where('uc201.dependencia_adm_id=dependencia_adm.id')
.group('dependencia_adm.nome')
.order('dependencia_adm.nome');
.group('uc201.ano_censo');
const enrollmentsPerSchoolLevelQry = req.sql.clone()
.field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.field('COALESCE(SUM(uc201.matriculas), 0)', 'total')
.field('uc201.ano_censo', 'census_year')
.field('etapa_ensino.desc_etapa', 'school_level_name')
.field('dependencia_adm.nome', 'adm_dependency_name')
.from('etapa_ensino')
.from('matricula')
.where('matricula.etapa_ensino_id=etapa_ensino.id')
.where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo')
.from('dependencia_adm')
.from('uc201')
.where('uc201.etapas_mod_ensino_segmento_id=etapa_ensino.id')
.where('uc201.dependencia_adm_id=dependencia_adm.id')
.group('etapa_ensino.desc_etapa')
.group('etapa_ensino.id')
.order('etapa_ensino.id');
.group('dependencia_adm.nome')
.group('uc201.ano_censo');
const enrollmentsPerLocationQry = req.sql.clone()
.field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.field('COALESCE(SUM(uc201.matriculas), 0)', 'total')
.field('uc201.ano_censo', 'census_year')
.field('localizacao.descricao', 'location_name')
.from('localizacao')
.from('matricula')
.where('matricula.localizacao_id=localizacao.id')
.where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo')
.from('uc201')
.where('uc201.localizacao=localizacao.id')
.group('localizacao.descricao')
.order('ano_censo')
.order('localizacao.descricao');
const enrollmentsPerSchoolLevelAndAdmDependencyQry = req.sql.clone()
.field('\'Brasil\'', 'name')
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.field('etapa_ensino.desc_etapa', 'school_level_name')
.field('dependencia_adm.nome', 'adm_dependency_name')
.from('etapa_ensino')
.from('dependencia_adm')
.from('matricula')
.where('matricula.etapa_ensino_id=etapa_ensino.id')
.where('matricula.dependencia_adm_id=dependencia_adm.id')
.where('matricula.tipo <= 3')
.where(`matricula.ano_censo IN (${schoolClassYearQry})`)
.group('matricula.ano_censo')
.group('etapa_ensino.desc_etapa')
.group('dependencia_adm.nome')
.order('matricula.ano_censo')
.order('etapa_ensino.desc_etapa')
.order('dependencia_adm.nome');
.group('uc201.ano_censo');
const queryLabels = [ "school", "school_per_location", "school_per_adm_dependency", "enrollment", "enrollment_per_adm_dep",
"enrollment_per_school_level", "enrollment_per_location", "enrollment_per_school_level_adm_dependency" ];
"enrollment_per_school_level", "enrollment_per_location" ];
const querySet = [ totalSchoolsQry, schoolsPerLocationQry, schoolsPerAdmDependencyQry, enrollmentsQry,
enrollmentsPerAdmDepQry, enrollmentsPerSchoolLevelQry, enrollmentsPerLocationQry, enrollmentsPerSchoolLevelAndAdmDependencyQry];
enrollmentsPerAdmDepQry, enrollmentsPerSchoolLevelQry, enrollmentsPerLocationQry];
// wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet)).then((queryResults) => {
req.result = processResultSet(queryResults, queryLabels);
......@@ -407,7 +292,7 @@ spatialApp.get('/educational/school_level', rqf.parse(), rqf.build(), (req, res,
.from('matricula');
const enrollmentsPerSchoolLevelQry = req.sql.clone()
.field('COALESCE(COUNT(matricula.id), 0)', 'total')
.field('COALESCE(SUM(matricula.id), 0)', 'total')
.field('matricula.ano_censo', 'census_year')
.field('matricula.serie_ano_id', 'school_year')
.field('etapa_ensino.desc_etapa', 'school_level')
......
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