@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
JavaScript
;
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;