diff --git a/src/lib/build.ts b/src/lib/build.ts index 62f5359..f785070 100644 --- a/src/lib/build.ts +++ b/src/lib/build.ts @@ -48,17 +48,18 @@ export function buildSelectQuery( // Handle include if (query.include) { - for (const [relation, relationQuery] of Object.entries(query.include)) { - if (!relations[relation]) { - throw new Error(`Relation ${relation} is not defined`); + for (const [relationName, relationQuery] of Object.entries(query.include)) { + const relation = relations[relationName]; + if (!relation) { + throw new Error(`Relation ${relationName} is not defined`); } const innerQuery = buildSelectQuery( - relation, + relationName, relationQuery, relations, true, ); - args.join += join("LEFT LATERAL", relations[relation], innerQuery); + args.join += join("LEFT LATERAL", relation, innerQuery); } } @@ -214,12 +215,12 @@ export function sql( }, ): string { let sql = `${params?.select || params?.delete || params?.update || ""}`; - if (params.join) { - sql += `${params.join}`; - } if (append?.join) { sql += `${append?.join}`; } + if (params.join) { + sql += `${params.join}`; + } if (params.where && Object.keys(params.where).length > 0) { sql += ` WHERE ${where(params.where, "AND", params.relations || {})}`; } diff --git a/src/test/build.test.ts b/src/test/build.test.ts index 976d133..7124001 100644 --- a/src/test/build.test.ts +++ b/src/test/build.test.ts @@ -37,7 +37,7 @@ describe("sql", () => { }; const result = sql(params, append); expect(result).toBe( - "SELECT * FROM table JOIN other_table ON table.id = other_table.table_id JOIN another_table ON table.id = another_table.table_id", + "SELECT * FROM table JOIN another_table ON table.id = another_table.table_id JOIN other_table ON table.id = other_table.table_id", ); }); @@ -101,7 +101,7 @@ describe("sql", () => { }; const result = sql(params, append); expect(result).toBe( - `SELECT * FROM table JOIN other_table ON table.id = other_table.table_id JOIN another_table ON table.id = another_table.table_id WHERE "id" = 1 AND other_table.name = "test" GROUP BY "name" HAVING COUNT("name") = 1 ORDER BY "name" ASC LIMIT 10 OFFSET 5 RETURNING "id", "name"`, + `SELECT * FROM table JOIN another_table ON table.id = another_table.table_id JOIN other_table ON table.id = other_table.table_id WHERE "id" = 1 AND other_table.name = "test" GROUP BY "name" HAVING COUNT("name") = 1 ORDER BY "name" ASC LIMIT 10 OFFSET 5 RETURNING "id", "name"`, ); }); });