diff --git a/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.d.ts b/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.d.ts index 91bf69b..9941c45 100644 --- a/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.d.ts +++ b/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.d.ts @@ -2,11 +2,15 @@ import { ServerQueryEqualities } from "../../../types"; type Params = { fieldName: string; value?: string; - equality: (typeof ServerQueryEqualities)[number]; + equality?: (typeof ServerQueryEqualities)[number]; +}; +type Return = { + str?: string; + param?: string; }; /** * # SQL Gen Operator Gen * @description Generates an SQL operator for node module `mysql` or `serverless-mysql` */ -export default function sqlGenOperatorGen({ fieldName, value, equality, }: Params): string; +export default function sqlGenOperatorGen({ fieldName, value, equality, }: Params): Return; export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.js b/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.js index 3e201c6..de4c3fa 100644 --- a/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.js +++ b/dist/package-shared/functions/dsql/sql/sql-gen-operator-gen.js @@ -12,45 +12,76 @@ const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equali function sqlGenOperatorGen({ fieldName, value, equality, }) { if (value) { if (equality == "LIKE") { - return `LOWER(${fieldName}) LIKE LOWER('%${value}%')`; + return { + str: `LOWER(${fieldName}) LIKE LOWER('%${value}%')`, + }; } else if (equality == "LIKE_RAW") { - return `LOWER(${fieldName}) LIKE LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) LIKE LOWER(?)`, + param: value, + }; } else if (equality == "NOT LIKE") { - return `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`; + return { + str: `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`, + }; } else if (equality == "NOT LIKE_RAW") { - return `LOWER(${fieldName}) NOT LIKE LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, + param: value, + }; } else if (equality == "REGEXP") { - return `LOWER(${fieldName}) REGEXP LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) REGEXP LOWER(?')`, + param: value, + }; } else if (equality == "FULLTEXT") { - return `MATCH(${fieldName}) AGAINST('${value}' IN BOOLEAN MODE)`; + return { + str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, + param: value, + }; } else if (equality == "NOT EQUAL") { - return `${fieldName} != ${value}`; + return { + str: `${fieldName} != ?`, + param: value, + }; } else if (equality) { - return `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ${value}`; + return { + str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`, + param: value, + }; } else { - return `${fieldName} = ${value}`; + return { + str: `${fieldName} = ?`, + param: value, + }; } } else { if (equality == "IS NULL") { - return `${fieldName} IS NULL`; + return { str: `${fieldName} IS NULL` }; } else if (equality == "IS NOT NULL") { - return `${fieldName} IS NOT NULL`; + return { str: `${fieldName} IS NOT NULL` }; } else if (equality) { - return `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`; + return { + str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`, + param: value, + }; } else { - return `${fieldName} = ?`; + return { + str: `${fieldName} = ?`, + param: value, + }; } } } diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.js b/dist/package-shared/functions/dsql/sql/sql-generator.js index e4f4eaf..83237fe 100644 --- a/dist/package-shared/functions/dsql/sql/sql-generator.js +++ b/dist/package-shared/functions/dsql/sql/sql-generator.js @@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = sqlGenerator; -const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equality-parser")); +const sql_gen_operator_gen_1 = __importDefault(require("./sql-gen-operator-gen")); /** * # SQL Query Generator * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` @@ -29,68 +29,72 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) { return field; })(); let str = `${finalFieldName}=?`; - if (queryObj.nullValue) { - str = `${finalFieldName} IS NULL`; - } - else if (queryObj.notNullValue) { - str = `${finalFieldName} IS NOT NULL`; - } - else if (typeof queryObj.value == "string" || - typeof queryObj.value == "number") { - const valueParsed = String(queryObj.value); - const operator = (0, sql_equality_parser_1.default)(queryObj.equality || "EQUAL"); - if (queryObj.equality == "LIKE") { - str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; - } - else if (queryObj.equality == "LIKE_RAW") { - str = `LOWER(${finalFieldName}) LIKE LOWER(?)`; - sqlSearhValues.push(valueParsed); - } - else if (queryObj.equality == "NOT LIKE") { - str = `LOWER(${finalFieldName}) NOT LIKE LOWER('%${valueParsed}%')`; - } - else if (queryObj.equality == "NOT LIKE_RAW") { - str = `LOWER(${finalFieldName}) NOT LIKE LOWER(?)`; - sqlSearhValues.push(valueParsed); - } - else if (queryObj.equality == "REGEXP") { - str = `LOWER(${finalFieldName}) REGEXP LOWER(?)`; - sqlSearhValues.push(valueParsed); - } - else if (queryObj.equality == "FULLTEXT") { - str = `MATCH(${finalFieldName}) AGAINST(? IN BOOLEAN MODE)`; - sqlSearhValues.push(valueParsed); - } - else if (queryObj.equality == "NOT EQUAL") { - str = `${finalFieldName} != ?`; - sqlSearhValues.push(valueParsed); - } - else if (queryObj.equality) { - str = `${finalFieldName} ${operator} ?`; - sqlSearhValues.push(valueParsed); - } - else { - sqlSearhValues.push(valueParsed); - } - } - else if (Array.isArray(queryObj.value)) { + if (Array.isArray(queryObj.value)) { const strArray = []; queryObj.value.forEach((val) => { + var _a; const valueParsed = val; - if (queryObj.equality == "LIKE") { - strArray.push(`LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`); + const valueString = typeof valueParsed == "string" + ? valueParsed + : (_a = valueParsed.value) === null || _a === void 0 ? void 0 : _a.toString(); + const valueEquality = typeof valueParsed == "object" + ? valueParsed.equality || queryObj.equality + : queryObj.equality; + const operatorStrParam = (0, sql_gen_operator_gen_1.default)({ + equality: valueEquality, + fieldName: finalFieldName || "", + value: (valueString === null || valueString === void 0 ? void 0 : valueString.toString()) || "", + }); + if (operatorStrParam.str && operatorStrParam.param) { + strArray.push(operatorStrParam.str); + sqlSearhValues.push(operatorStrParam.param); } - else if (queryObj.equality == "NOT EQUAL") { - strArray.push(`${finalFieldName} != ?`); - sqlSearhValues.push(valueParsed); - } - else { - strArray.push(`${finalFieldName} = ?`); - sqlSearhValues.push(valueParsed); + else if (operatorStrParam.str) { + strArray.push(operatorStrParam.str); } }); str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; } + else { + const valueParsed = String(queryObj.value); + const operatorStrParam = (0, sql_gen_operator_gen_1.default)({ + equality: queryObj.equality, + fieldName: finalFieldName || "", + value: valueParsed, + }); + if (operatorStrParam.str && operatorStrParam.param) { + str = operatorStrParam.str; + sqlSearhValues.push(operatorStrParam.param); + } + else if (operatorStrParam.str) { + str = operatorStrParam.str; + } + // if (queryObj.equality == "LIKE") { + // str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; + // } else if (queryObj.equality == "LIKE_RAW") { + // str = `LOWER(${finalFieldName}) LIKE LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "NOT LIKE") { + // str = `LOWER(${finalFieldName}) NOT LIKE LOWER('%${valueParsed}%')`; + // } else if (queryObj.equality == "NOT LIKE_RAW") { + // str = `LOWER(${finalFieldName}) NOT LIKE LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "REGEXP") { + // str = `LOWER(${finalFieldName}) REGEXP LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "FULLTEXT") { + // str = `MATCH(${finalFieldName}) AGAINST(? IN BOOLEAN MODE)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "NOT EQUAL") { + // str = `${finalFieldName} != ?`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality) { + // str = `${finalFieldName} ${operator} ?`; + // sqlSearhValues.push(valueParsed); + // } else { + // sqlSearhValues.push(valueParsed); + // } + } return str; } const sqlSearhString = queryKeys === null || queryKeys === void 0 ? void 0 : queryKeys.map((field) => { @@ -114,9 +118,7 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) { } return genSqlSrchStr({ queryObj, field, join: genObject === null || genObject === void 0 ? void 0 : genObject.join }); }); - function generateJoinStr( - /** @type {import("../../../types").ServerQueryParamsJoinMatchObject} */ mtch, - /** @type {import("../../../types").ServerQueryParamsJoin} */ join) { + function generateJoinStr(mtch, join) { return `${finalDbName}${typeof mtch.source == "object" ? mtch.source.tableName : tableName}.${typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source}=${(() => { if (mtch.targetLiteral) { return `'${mtch.targetLiteral}'`; diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 4daba9e..4e93d7f 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -829,10 +829,14 @@ export type ServerQueryParam = { - value?: string | string[]; + value?: string | (string | ServerQueryValuesObject)[]; nullValue?: boolean; notNullValue?: boolean; operator?: (typeof ServerQueryOperators)[number]; diff --git a/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts b/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts index 075a96c..89d0d9f 100644 --- a/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts +++ b/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts @@ -4,7 +4,12 @@ import { ServerQueryEqualities } from "../../../types"; type Params = { fieldName: string; value?: string; - equality: (typeof ServerQueryEqualities)[number]; + equality?: (typeof ServerQueryEqualities)[number]; +}; + +type Return = { + str?: string; + param?: string; }; /** @@ -15,36 +20,67 @@ export default function sqlGenOperatorGen({ fieldName, value, equality, -}: Params): string { +}: Params): Return { if (value) { if (equality == "LIKE") { - return `LOWER(${fieldName}) LIKE LOWER('%${value}%')`; + return { + str: `LOWER(${fieldName}) LIKE LOWER('%${value}%')`, + }; } else if (equality == "LIKE_RAW") { - return `LOWER(${fieldName}) LIKE LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) LIKE LOWER(?)`, + param: value, + }; } else if (equality == "NOT LIKE") { - return `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`; + return { + str: `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`, + }; } else if (equality == "NOT LIKE_RAW") { - return `LOWER(${fieldName}) NOT LIKE LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, + param: value, + }; } else if (equality == "REGEXP") { - return `LOWER(${fieldName}) REGEXP LOWER('${value}')`; + return { + str: `LOWER(${fieldName}) REGEXP LOWER(?')`, + param: value, + }; } else if (equality == "FULLTEXT") { - return `MATCH(${fieldName}) AGAINST('${value}' IN BOOLEAN MODE)`; + return { + str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, + param: value, + }; } else if (equality == "NOT EQUAL") { - return `${fieldName} != ${value}`; + return { + str: `${fieldName} != ?`, + param: value, + }; } else if (equality) { - return `${fieldName} ${sqlEqualityParser(equality)} ${value}`; + return { + str: `${fieldName} ${sqlEqualityParser(equality)} ?`, + param: value, + }; } else { - return `${fieldName} = ${value}`; + return { + str: `${fieldName} = ?`, + param: value, + }; } } else { if (equality == "IS NULL") { - return `${fieldName} IS NULL`; + return { str: `${fieldName} IS NULL` }; } else if (equality == "IS NOT NULL") { - return `${fieldName} IS NOT NULL`; + return { str: `${fieldName} IS NOT NULL` }; } else if (equality) { - return `${fieldName} ${sqlEqualityParser(equality)} ?`; + return { + str: `${fieldName} ${sqlEqualityParser(equality)} ?`, + param: value, + }; } else { - return `${fieldName} = ?`; + return { + str: `${fieldName} = ?`, + param: value, + }; } } } diff --git a/package-shared/functions/dsql/sql/sql-generator.ts b/package-shared/functions/dsql/sql/sql-generator.ts index f9f8c26..dd9e5d3 100644 --- a/package-shared/functions/dsql/sql/sql-generator.ts +++ b/package-shared/functions/dsql/sql/sql-generator.ts @@ -1,9 +1,10 @@ -import sqlEqualityParser from "../../../utils/sql-equality-parser"; import { ServerQueryParam, ServerQueryParamsJoin, + ServerQueryParamsJoinMatchObject, ServerQueryQueryObject, } from "../../../types"; +import sqlGenOperatorGen from "./sql-gen-operator-gen"; type Param = { genObject?: ServerQueryParam; @@ -56,60 +57,76 @@ export default function sqlGenerator< let str = `${finalFieldName}=?`; - if (queryObj.nullValue) { - str = `${finalFieldName} IS NULL`; - } else if (queryObj.notNullValue) { - str = `${finalFieldName} IS NOT NULL`; - } else if ( - typeof queryObj.value == "string" || - typeof queryObj.value == "number" - ) { - const valueParsed = String(queryObj.value); - const operator = sqlEqualityParser(queryObj.equality || "EQUAL"); - - if (queryObj.equality == "LIKE") { - str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; - } else if (queryObj.equality == "LIKE_RAW") { - str = `LOWER(${finalFieldName}) LIKE LOWER(?)`; - sqlSearhValues.push(valueParsed); - } else if (queryObj.equality == "NOT LIKE") { - str = `LOWER(${finalFieldName}) NOT LIKE LOWER('%${valueParsed}%')`; - } else if (queryObj.equality == "NOT LIKE_RAW") { - str = `LOWER(${finalFieldName}) NOT LIKE LOWER(?)`; - sqlSearhValues.push(valueParsed); - } else if (queryObj.equality == "REGEXP") { - str = `LOWER(${finalFieldName}) REGEXP LOWER(?)`; - sqlSearhValues.push(valueParsed); - } else if (queryObj.equality == "FULLTEXT") { - str = `MATCH(${finalFieldName}) AGAINST(? IN BOOLEAN MODE)`; - sqlSearhValues.push(valueParsed); - } else if (queryObj.equality == "NOT EQUAL") { - str = `${finalFieldName} != ?`; - sqlSearhValues.push(valueParsed); - } else if (queryObj.equality) { - str = `${finalFieldName} ${operator} ?`; - sqlSearhValues.push(valueParsed); - } else { - sqlSearhValues.push(valueParsed); - } - } else if (Array.isArray(queryObj.value)) { + if (Array.isArray(queryObj.value)) { const strArray: string[] = []; queryObj.value.forEach((val) => { const valueParsed = val; - if (queryObj.equality == "LIKE") { - strArray.push( - `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')` - ); - } else if (queryObj.equality == "NOT EQUAL") { - strArray.push(`${finalFieldName} != ?`); - sqlSearhValues.push(valueParsed); - } else { - strArray.push(`${finalFieldName} = ?`); - sqlSearhValues.push(valueParsed); + const valueString = + typeof valueParsed == "string" + ? valueParsed + : valueParsed.value?.toString(); + + const valueEquality = + typeof valueParsed == "object" + ? valueParsed.equality || queryObj.equality + : queryObj.equality; + + const operatorStrParam = sqlGenOperatorGen({ + equality: valueEquality, + fieldName: finalFieldName || "", + value: valueString?.toString() || "", + }); + + if (operatorStrParam.str && operatorStrParam.param) { + strArray.push(operatorStrParam.str); + sqlSearhValues.push(operatorStrParam.param); + } else if (operatorStrParam.str) { + strArray.push(operatorStrParam.str); } }); str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; + } else { + const valueParsed = String(queryObj.value); + + const operatorStrParam = sqlGenOperatorGen({ + equality: queryObj.equality, + fieldName: finalFieldName || "", + value: valueParsed, + }); + + if (operatorStrParam.str && operatorStrParam.param) { + str = operatorStrParam.str; + sqlSearhValues.push(operatorStrParam.param); + } else if (operatorStrParam.str) { + str = operatorStrParam.str; + } + + // if (queryObj.equality == "LIKE") { + // str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; + // } else if (queryObj.equality == "LIKE_RAW") { + // str = `LOWER(${finalFieldName}) LIKE LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "NOT LIKE") { + // str = `LOWER(${finalFieldName}) NOT LIKE LOWER('%${valueParsed}%')`; + // } else if (queryObj.equality == "NOT LIKE_RAW") { + // str = `LOWER(${finalFieldName}) NOT LIKE LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "REGEXP") { + // str = `LOWER(${finalFieldName}) REGEXP LOWER(?)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "FULLTEXT") { + // str = `MATCH(${finalFieldName}) AGAINST(? IN BOOLEAN MODE)`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality == "NOT EQUAL") { + // str = `${finalFieldName} != ?`; + // sqlSearhValues.push(valueParsed); + // } else if (queryObj.equality) { + // str = `${finalFieldName} ${operator} ?`; + // sqlSearhValues.push(valueParsed); + // } else { + // sqlSearhValues.push(valueParsed); + // } } return str; @@ -144,8 +161,8 @@ export default function sqlGenerator< }); function generateJoinStr( - /** @type {import("../../../types").ServerQueryParamsJoinMatchObject} */ mtch: import("../../../types").ServerQueryParamsJoinMatchObject, - /** @type {import("../../../types").ServerQueryParamsJoin} */ join: import("../../../types").ServerQueryParamsJoin + mtch: ServerQueryParamsJoinMatchObject, + join: ServerQueryParamsJoin ) { return `${finalDbName}${ typeof mtch.source == "object" ? mtch.source.tableName : tableName diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index 80be36a..e3db764 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -1009,11 +1009,16 @@ export type ServerQueryParam< [key: string]: any; }; +export type ServerQueryValuesObject = { + value?: string | number; + equality?: (typeof ServerQueryEqualities)[number]; +}; + export type ServerQueryObject< T extends object = { [key: string]: any }, K extends string = string > = { - value?: string | string[]; + value?: string | (string | ServerQueryValuesObject)[]; nullValue?: boolean; notNullValue?: boolean; operator?: (typeof ServerQueryOperators)[number]; diff --git a/package.json b/package.json index f9efc8c..4f66374 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "5.2.1", + "version": "5.2.2", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {