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

Modify RQF to use placeholders

parent 456ee9ae
No related branches found
No related tags found
1 merge request!116Release v1.0.0
Pipeline #
......@@ -32,6 +32,13 @@ app.use(methodOverride());
// Middleware tha adds the squel object to req
app.use((req, res, next) => {
req.sql = squel.select();
// HACK to know wich table we are using
req.sql.oldFrom = req.sql.from;
req.sql.from = (name, alias = null) => {
req.sql.oldFrom(name, alias || null);
req.sql.tableFrom = name;
return req.sql;
};
next();
});
app.use((req, res, next) => {
......@@ -52,6 +59,7 @@ app.use((req, res, next) => {
app.use((err, req, res, next) => {
res.status(err.status || 500);
log.error('%s %d %s', req.method, res.statusCode, err.message);
log.error(err);
res.json({ error: err.message }).end();
});
......
......@@ -200,6 +200,11 @@ class ReqQueryFields {
return (req, res, next) => {
// Foreach no campos
let hasJoined = {};
let thisTable = req.sql.tableFrom;
console.log('PEPOPEPO');
console.log(req.sql);
console.log(req.sql.tableFrom);
console.log(thisTable);
Object.keys(this.fields).forEach((key) => {
// Campo
let field = this.fields[key];
......@@ -217,6 +222,7 @@ class ReqQueryFields {
if(!hasJoined[value.table] && typeof value.join !== 'undefined') {
let foreignTable = '';
if(value.join.foreignTable) foreignTable = value.join.foreignTable+'.';
if(value.join.foreignTable === '@') foreignTable = thisTable+'.';
// Fazemos o join
let onClause = '';
if(Array.isArray(value.join.primary)) {
......@@ -237,15 +243,18 @@ class ReqQueryFields {
// Se o valor é um campo a ser incluído no SELECT
if(typeof field.field !== 'undefined' && field.field) {
log.debug('SELECT');
let table = value.table;
if(table === '@') table = thisTable;
if (Array.isArray(value.resultField)) {
value.tableField.forEach((f, i) => {
req.sql.field(value.table+'.'+f, value.resultField[i] || f)
.group(value.table+'.'+f);
req.sql.field(table+'.'+f, value.resultField[i] || f)
.group(table+'.'+f)
.order(table+'.'+f);
})
}else{
req.sql.field(value.table+'.'+value.tableField, value.resultField || value.tableField)
.order(value.table+'.'+value.tableField)
.group(value.table+'.'+value.tableField);
req.sql.field(table+'.'+value.tableField, value.resultField || value.tableField)
.order(table+'.'+value.tableField)
.group(table+'.'+value.tableField);
}
}
// Se o valor é um campo para ser usado no WHERE
......@@ -259,6 +268,7 @@ class ReqQueryFields {
log.debug(`Where value é array? ${Array.isArray(whereValue)}`);
let tbl = value.where.table || value.table;
if (tbl === '@') tbl = thisTable;
// multiple where, only tested for boolean filds
if (Array.isArray(value.tableField)) {
let lower = (value.where.type === 'string') ? ' LOWER(?) ' : ' ? ';
......
......@@ -20,13 +20,13 @@ rqf.addField({
where: true
}).addValue({
name: 'id',
table: 'regiao',
table: '@',
tableField: 'id',
where: {
relation: '=',
type: 'integer',
field: 'id',
table: 'regiao'
table: '@'
}
}).addField({
name: 'search',
......@@ -34,21 +34,22 @@ rqf.addField({
where: true
}).addValueToField({
name: 'name',
table: 'regiao',
table: '@',
tableField: 'nome',
where: {
relation: 'LIKE',
type: 'string',
field: 'nome',
table: 'regiao'
table: '@'
}
}, 'search');
regionApp.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
regionApp.get('/', rqf.parse(), (req, res, next) => {
req.sql.from('regiao')
.field('id')
.field('nome', 'name');
console.log(req.sql.toString());
next();
}, query, response('region'));
}, rqf.build(), query, response('region'));
module.exports = regionApp;
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