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