diff --git a/index.js b/index.js index af2d8b0..628dde2 100644 --- a/index.js +++ b/index.js @@ -34,45 +34,31 @@ class PagiHelp { }); tupleCreator = (tuple, replacements, asItIs = false) => { - if(!asItIs&&!allowedOperators.includes(tuple[1].toUpperCase())) - throw "Invalid Operator" - - // Skip escaping if tuple[0] starts with "(" (indicating it's a statement) - if (!asItIs && tuple[0].trim().startsWith("(")) { - let query = `${tuple[0]}`; - if (tuple[1] && tuple[2] !== undefined) { - query += ` ${tuple[1]} ?`; - replacements.push(tuple[2]); - } - return query; + const operator = tuple[1]?.toUpperCase?.(); + if (!allowedOperators.includes(operator)) { + throw "Invalid Operator"; } - - // Escape column names only - if (!asItIs && !tuple[0].includes(" ") && !tuple[0].includes("(")) { - tuple[0] = SqlString.escapeId(tuple[0]); - } - - if(tuple[1].toUpperCase()=='JSON_CONTAINS') { - let query = '' - query = `${tuple[1]}(${this.columnNameConverter(tuple[0])},?)`; - if(tuple[2] && typeof tuple[2] === 'object') - replacements.push(JSON.stringify(tuple[2])); - else - replacements.push(tuple[2]); - return query; - } else { - let query = `${this.columnNameConverter(tuple[0])} ${tuple[1]}`; - if (asItIs) query = `${tuple[0]} ${tuple[1]}`; - if (tuple[2] instanceof Array) { - query += " (" + "?,".repeat(tuple[2].length).slice(0, -1) + ")"; - replacements.push(...tuple[2]); + const isExpression = tuple[0].trim().startsWith("("); + let field = isExpression ? tuple[0] : SqlString.escapeId(tuple[0]); + if (tuple[1].toUpperCase() === "JSON_CONTAINS") { + let query = `${tuple[1]}(${field}, ?)`; + if (tuple[2] && typeof tuple[2] === "object") { + replacements.push(JSON.stringify(tuple[2])); } else { - query += ` ?`; replacements.push(tuple[2]); } return query; } - + let query = `${field} ${tuple[1]}`; + if (asItIs) query = `${tuple[0]} ${tuple[1]}`; + if (Array.isArray(tuple[2])) { + query += " (" + "?,".repeat(tuple[2].length).slice(0, -1) + ")"; + replacements.push(...tuple[2]); + } else { + query += " ?"; + replacements.push(tuple[2]); + } + return query; }; genSchema = (schemaArray, replacements, asItIs = false) => { @@ -105,6 +91,10 @@ class PagiHelp { ) => { let filters = paginationObject.filters; + if (filters && filters.length > 0 && !Array.isArray(filters[0])) { + filters = [filters]; + } + if (filters && filters.length > 0) { // Function to convert snake_case to camelCase const toCamelCase = (str) => {