UNPKG

@icon-solutions/balthazar-query-builder

Version:

This package is a query-builder used to convert data from the segment-builder into SQL-queries.

95 lines (94 loc) 4.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.titleLevelQueryBuilder = void 0; const separateAndOr_1 = require("../separateAndOr/separateAndOr"); const addToQueryArray_1 = require("../addToQueryArray/addToQueryArray"); /** * Håndterer bygging av spørring for TitleLevels. * @param {Array<Array<Parameter> | Parameter>} data Strukturerte data som gjenspeiler dataenes * AND- / OR-struktur. * @param {Array<string>} queryArray Tabell hvor spørringen for TitleLevels legges inn. */ const titleLevelQueryBuilder = (data, queryArray) => { console.log("[queryDataBuilder.ts] data: ", data, ", queryArray: ", queryArray); const queryString = []; /** * Sørger for å holde styr på om AND-tilfeller er gjennomført eller ikke. * Må gjøre dette for å vite om vi skal legge til OR (i begynnelsen) ved * OR-tilfellene eller ikke. */ var andHandeled = false; const seperatedAndOr = (0, separateAndOr_1.seperateAndOr)(data); const and = seperatedAndOr.and; const or = seperatedAndOr.or; queryString.push('('); if (and.length > 0) { for (var i = 0; i < and.length; i++) { if (and[i].length > 1) { queryString.push('('); for (var j = 0; j < and[i].length; j++) { const dataToHandle = and[i][j]; // Sjekker om det er siste AND if (j === ((and[i].length) - 1)) { queryString.push('EXISTS'); queryString.push('('); queryString.push('SELECT * FROM RawTitleMatch INNER JOIN Title ON RawTitleMatch.TitleID = Title.TitleID WHERE Title.' + dataToHandle.name + ' = ' + dataToHandle.value + ' AND RawTitleMatch.RawTitleID = A.RawTitleID'); queryString.push(')'); } else { queryString.push('EXISTS'); queryString.push('('); queryString.push('SELECT * FROM RawTitleMatch INNER JOIN Title ON RawTitleMatch.TitleID = Title.TitleID WHERE Title.' + dataToHandle.name + ' = ' + dataToHandle.value + ' AND RawTitleMatch.RawTitleID = A.RawTitleID'); queryString.push(')'); queryString.push(' AND '); } ; } ; queryString.push(')'); } ; // Legger til OR dersom det finnes flere AND kombinasjoner som enda ikke er gjennomført if (i !== (and.length - 1)) { queryString.push(' OR '); } ; } ; andHandeled = true; } ; if (or.length > 0) { // Sjekker om AND er håndert. Dersom det er det må vi legge til OR if (andHandeled) { queryString.push(' OR '); queryString.push('('); queryString.push('EXISTS(SELECT * FROM RawTitleMatch INNER JOIN Title ON RawTitleMatch.TitleID = Title.TitleID WHERE Title.TitleLevelID IN'); queryString.push('('); } else { queryString.push('('); queryString.push('EXISTS(SELECT * FROM RawTitleMatch INNER JOIN Title ON RawTitleMatch.TitleID = Title.TitleID WHERE Title.TitleLevelID IN'); queryString.push('('); } ; for (var i = 0; i < or.length; i++) { // Sjekker om det er siste OR if (i === (or.length - 1)) { queryString.push(or[i].value + ')'); queryString.push(' AND RawTitleMatch.RawTitleID = A.RawTitleID'); } else { queryString.push(or[i].value + ', '); } ; } ; queryString.push(')'); queryString.push(')'); } ; queryString.push(')'); (0, addToQueryArray_1.addToQueryArray)(queryString, queryArray); }; exports.titleLevelQueryBuilder = titleLevelQueryBuilder;