From 282249c9948a3db30c5260242cdc18c71fc2cafb Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Fri, 17 Mar 2017 10:12:44 -0300
Subject: [PATCH] Add composite foreign key habilities to RQF

Now you can join tables with composite foreign/primary keys using RQF. In the
join attribute just use an array of columns that need to be used in the join
---
 src/libs/middlewares/reqQueryFields.js | 14 +++++++++++++-
 src/libs/routes/enrollment.js          |  4 ++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js
index 1fe597d3..a383ade2 100644
--- a/src/libs/middlewares/reqQueryFields.js
+++ b/src/libs/middlewares/reqQueryFields.js
@@ -201,7 +201,19 @@ class ReqQueryFields {
                             let foreignTable = '';
                             if(value.join.foreignTable) foreignTable = value.join.foreignTable+'.';
                             // Fazemos o join
-                            req.sql.join(value.table, null, foreignTable+value.join.foreign+'='+value.table+'.'+value.join.primary);
+                            let onClause = '';
+                            if(Array.isArray(value.join.primary)) {
+                                // Se é um array, montamos a cláusula ON com mais de uma coluna
+                                value.join.primary.forEach((column, index, arr) => {
+                                    onClause += foreignTable+value.join.foreign[index]+'='+value.table+'.'+column;
+                                    if(index < arr.length-1) {
+                                        onClause+=' AND ';
+                                    }
+                                });
+                            } else {
+                                onClause = foreignTable+value.join.foreign+'='+value.table+'.'+value.join.primary;
+                            }
+                            req.sql.join(value.table, null, onClause);
                             // Marcamos o join como feito para não ter problemas
                             hasJoined[value.name] = true;
                             // values[k].hasJoined = true;
diff --git a/src/libs/routes/enrollment.js b/src/libs/routes/enrollment.js
index 6f5a623c..af0904ab 100644
--- a/src/libs/routes/enrollment.js
+++ b/src/libs/routes/enrollment.js
@@ -188,8 +188,8 @@ rqf.addField({
         field: 'id'
     },
     join: {
-        primary: 'id',
-        foreign: 'escola_id',
+        primary: ['id', 'ano_censo'],
+        foreign: ['escola_id', 'ano_censo'],
         foreignTable: 'matricula'
     }
 }).addValue({
-- 
GitLab