From ea40a1a8c2c622e6d91c406991034fe1206b0cb0 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Mon, 5 Jan 2026 14:36:29 +0100 Subject: [PATCH] Updates --- .../dsql/sql/sql-gen-operator-gen.d.ts | 3 +- .../dsql/sql/sql-gen-operator-gen.js | 64 +++++++++--------- .../functions/dsql/sql/sql-generator.js | 54 ++++++++++----- dist/package-shared/types/index.d.ts | 5 +- .../dsql/sql/sql-gen-operator-gen.ts | 67 ++++++++++--------- .../functions/dsql/sql/sql-generator.ts | 67 +++++++++++++------ package-shared/types/index.ts | 9 ++- package.json | 2 +- 8 files changed, 168 insertions(+), 103 deletions(-) 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 7d34af1..0dbae87 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 @@ -6,6 +6,7 @@ type Params = { queryObj: ServerQueryObject<{ [key: string]: any; }, string>; + isValueFieldValue?: boolean; }; type Return = { str?: string; @@ -15,5 +16,5 @@ type Return = { * # SQL Gen Operator Gen * @description Generates an SQL operator for node module `mysql` or `serverless-mysql` */ -export default function sqlGenOperatorGen({ fieldName, value, equality, queryObj, }: Params): Return; +export default function sqlGenOperatorGen({ fieldName, value, equality, queryObj, isValueFieldValue, }: 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 19d7e40..89dceec 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 @@ -9,7 +9,7 @@ const sql_equality_parser_1 = __importDefault(require("../../../utils/sql-equali * # SQL Gen Operator Gen * @description Generates an SQL operator for node module `mysql` or `serverless-mysql` */ -function sqlGenOperatorGen({ fieldName, value, equality, queryObj, }) { +function sqlGenOperatorGen({ fieldName, value, equality, queryObj, isValueFieldValue, }) { if (queryObj.nullValue) { return { str: `${fieldName} IS NULL` }; } @@ -17,94 +17,96 @@ function sqlGenOperatorGen({ fieldName, value, equality, queryObj, }) { return { str: `${fieldName} IS NOT NULL` }; } if (value) { + const finalValue = isValueFieldValue ? value : "?"; + const finalParams = isValueFieldValue ? undefined : value; if (equality == "MATCH") { return { - str: `MATCH(${fieldName}) AGAINST(? IN NATURAL LANGUAGE MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN NATURAL LANGUAGE MODE)`, + param: finalParams, }; } else if (equality == "MATCH_BOOLEAN") { return { - str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN BOOLEAN MODE)`, + param: finalParams, }; } else if (equality == "LIKE_LOWER") { return { - str: `LOWER(${fieldName}) LIKE LOWER(?)`, - param: `%${value}%`, + str: `LOWER(${fieldName}) LIKE LOWER(${finalValue})`, + param: `%${finalParams}%`, }; } else if (equality == "LIKE_LOWER_RAW") { return { - str: `LOWER(${fieldName}) LIKE LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) LIKE LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "LIKE") { return { - str: `${fieldName} LIKE ?`, - param: `%${value}%`, + str: `${fieldName} LIKE ${finalValue}`, + param: `%${finalParams}%`, }; } else if (equality == "LIKE_RAW") { return { - str: `${fieldName} LIKE ?`, - param: value, + str: `${fieldName} LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "NOT_LIKE_LOWER") { return { - str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, - param: `%${value}%`, + str: `LOWER(${fieldName}) NOT LIKE LOWER(${finalValue})`, + param: `%${finalParams}%`, }; } else if (equality == "NOT_LIKE_LOWER_RAW") { return { - str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) NOT LIKE LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "NOT LIKE") { return { - str: `${fieldName} NOT LIKE ?`, - param: value, + str: `${fieldName} NOT LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "NOT LIKE_RAW") { return { - str: `${fieldName} NOT LIKE ?`, - param: value, + str: `${fieldName} NOT LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "REGEXP") { return { - str: `LOWER(${fieldName}) REGEXP LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) REGEXP LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "FULLTEXT") { return { - str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN BOOLEAN MODE)`, + param: finalParams, }; } else if (equality == "NOT EQUAL") { return { - str: `${fieldName} != ?`, - param: value, + str: `${fieldName} != ${finalValue}`, + param: finalParams, }; } else if (equality) { return { - str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`, - param: value, + str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ${finalValue}`, + param: finalParams, }; } else { return { - str: `${fieldName} = ?`, - param: value, + str: `${fieldName} = ${finalValue}`, + param: finalParams, }; } } diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.js b/dist/package-shared/functions/dsql/sql/sql-generator.js index 717bf10..c5f46ca 100644 --- a/dist/package-shared/functions/dsql/sql/sql-generator.js +++ b/dist/package-shared/functions/dsql/sql/sql-generator.js @@ -30,27 +30,38 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) { return field; })(); let str = `${finalFieldName}=?`; + function grabValue(val) { + var _a; + const valueParsed = val; + if (!valueParsed) + return; + const valueString = typeof valueParsed == "string" + ? valueParsed + : valueParsed + ? valueParsed.fieldName && valueParsed.tableName + ? `${valueParsed.tableName}.${valueParsed.fieldName}` + : (_a = valueParsed.value) === null || _a === void 0 ? void 0 : _a.toString() + : undefined; + const valueEquality = typeof valueParsed == "object" + ? valueParsed.equality || queryObj.equality + : queryObj.equality; + const operatorStrParam = (0, sql_gen_operator_gen_1.default)({ + queryObj, + equality: valueEquality, + fieldName: finalFieldName || "", + value: (valueString === null || valueString === void 0 ? void 0 : valueString.toString()) || "", + isValueFieldValue: Boolean(typeof valueParsed == "object" && + valueParsed.fieldName && + valueParsed.tableName), + }); + return operatorStrParam; + } if (Array.isArray(queryObj.value)) { const strArray = []; queryObj.value.forEach((val) => { - var _a; - const valueParsed = val; - if (!valueParsed) + const operatorStrParam = grabValue(val); + if (!operatorStrParam) return; - const valueString = typeof valueParsed == "string" - ? valueParsed - : valueParsed - ? (_a = valueParsed.value) === null || _a === void 0 ? void 0 : _a.toString() - : undefined; - const valueEquality = typeof valueParsed == "object" - ? valueParsed.equality || queryObj.equality - : queryObj.equality; - const operatorStrParam = (0, sql_gen_operator_gen_1.default)({ - queryObj, - 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); @@ -61,6 +72,15 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) { }); str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; } + else if (typeof queryObj.value == "object") { + const operatorStrParam = grabValue(queryObj.value); + if (operatorStrParam === null || operatorStrParam === void 0 ? void 0 : operatorStrParam.str) { + str = operatorStrParam.str; + if (operatorStrParam.param) { + sqlSearhValues.push(operatorStrParam.param); + } + } + } else { const valueParsed = queryObj.value ? String(queryObj.value) diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index c63d6ef..1aca7fd 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -900,11 +900,14 @@ export type TableSelectFieldsObject = { - value?: string | (string | ServerQueryValuesObject | undefined | null)[]; + value?: ServerQueryObjectValue; 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 3df4c4f..278d925 100644 --- a/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts +++ b/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts @@ -11,6 +11,7 @@ type Params = { }, string >; + isValueFieldValue?: boolean; }; type Return = { @@ -27,6 +28,7 @@ export default function sqlGenOperatorGen({ value, equality, queryObj, + isValueFieldValue, }: Params): Return { if (queryObj.nullValue) { return { str: `${fieldName} IS NULL` }; @@ -37,80 +39,85 @@ export default function sqlGenOperatorGen({ } if (value) { + const finalValue = isValueFieldValue ? value : "?"; + const finalParams = isValueFieldValue ? undefined : value; + if (equality == "MATCH") { return { - str: `MATCH(${fieldName}) AGAINST(? IN NATURAL LANGUAGE MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN NATURAL LANGUAGE MODE)`, + param: finalParams, }; } else if (equality == "MATCH_BOOLEAN") { return { - str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN BOOLEAN MODE)`, + param: finalParams, }; } else if (equality == "LIKE_LOWER") { return { - str: `LOWER(${fieldName}) LIKE LOWER(?)`, - param: `%${value}%`, + str: `LOWER(${fieldName}) LIKE LOWER(${finalValue})`, + param: `%${finalParams}%`, }; } else if (equality == "LIKE_LOWER_RAW") { return { - str: `LOWER(${fieldName}) LIKE LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) LIKE LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "LIKE") { return { - str: `${fieldName} LIKE ?`, - param: `%${value}%`, + str: `${fieldName} LIKE ${finalValue}`, + param: `%${finalParams}%`, }; } else if (equality == "LIKE_RAW") { return { - str: `${fieldName} LIKE ?`, - param: value, + str: `${fieldName} LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "NOT_LIKE_LOWER") { return { - str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, - param: `%${value}%`, + str: `LOWER(${fieldName}) NOT LIKE LOWER(${finalValue})`, + param: `%${finalParams}%`, }; } else if (equality == "NOT_LIKE_LOWER_RAW") { return { - str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) NOT LIKE LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "NOT LIKE") { return { - str: `${fieldName} NOT LIKE ?`, - param: value, + str: `${fieldName} NOT LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "NOT LIKE_RAW") { return { - str: `${fieldName} NOT LIKE ?`, - param: value, + str: `${fieldName} NOT LIKE ${finalValue}`, + param: finalParams, }; } else if (equality == "REGEXP") { return { - str: `LOWER(${fieldName}) REGEXP LOWER(?)`, - param: value, + str: `LOWER(${fieldName}) REGEXP LOWER(${finalValue})`, + param: finalParams, }; } else if (equality == "FULLTEXT") { return { - str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`, - param: value, + str: `MATCH(${fieldName}) AGAINST(${finalValue} IN BOOLEAN MODE)`, + param: finalParams, }; } else if (equality == "NOT EQUAL") { return { - str: `${fieldName} != ?`, - param: value, + str: `${fieldName} != ${finalValue}`, + param: finalParams, }; } else if (equality) { return { - str: `${fieldName} ${sqlEqualityParser(equality)} ?`, - param: value, + str: `${fieldName} ${sqlEqualityParser( + equality + )} ${finalValue}`, + param: finalParams, }; } else { return { - str: `${fieldName} = ?`, - param: value, + str: `${fieldName} = ${finalValue}`, + param: finalParams, }; } } else { diff --git a/package-shared/functions/dsql/sql/sql-generator.ts b/package-shared/functions/dsql/sql/sql-generator.ts index 11c9b3a..0c4a3b8 100644 --- a/package-shared/functions/dsql/sql/sql-generator.ts +++ b/package-shared/functions/dsql/sql/sql-generator.ts @@ -5,6 +5,7 @@ import { ServerQueryParamsJoin, ServerQueryParamsJoinMatchObject, ServerQueryQueryObject, + ServerQueryValuesObject, } from "../../../types"; import sqlGenOperatorGen from "./sql-gen-operator-gen"; @@ -59,31 +60,47 @@ export default function sqlGenerator< let str = `${finalFieldName}=?`; + function grabValue(val?: string | ServerQueryValuesObject | null) { + const valueParsed = val; + + if (!valueParsed) return; + + const valueString = + typeof valueParsed == "string" + ? valueParsed + : valueParsed + ? valueParsed.fieldName && valueParsed.tableName + ? `${valueParsed.tableName}.${valueParsed.fieldName}` + : valueParsed.value?.toString() + : undefined; + + const valueEquality = + typeof valueParsed == "object" + ? valueParsed.equality || queryObj.equality + : queryObj.equality; + + const operatorStrParam = sqlGenOperatorGen({ + queryObj, + equality: valueEquality, + fieldName: finalFieldName || "", + value: valueString?.toString() || "", + isValueFieldValue: Boolean( + typeof valueParsed == "object" && + valueParsed.fieldName && + valueParsed.tableName + ), + }); + + return operatorStrParam; + } + if (Array.isArray(queryObj.value)) { const strArray: string[] = []; + queryObj.value.forEach((val) => { - const valueParsed = val; + const operatorStrParam = grabValue(val); - if (!valueParsed) return; - - const valueString = - typeof valueParsed == "string" - ? valueParsed - : valueParsed - ? valueParsed.value?.toString() - : undefined; - - const valueEquality = - typeof valueParsed == "object" - ? valueParsed.equality || queryObj.equality - : queryObj.equality; - - const operatorStrParam = sqlGenOperatorGen({ - queryObj, - equality: valueEquality, - fieldName: finalFieldName || "", - value: valueString?.toString() || "", - }); + if (!operatorStrParam) return; if (operatorStrParam.str && operatorStrParam.param) { strArray.push(operatorStrParam.str); @@ -94,6 +111,14 @@ export default function sqlGenerator< }); str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; + } else if (typeof queryObj.value == "object") { + const operatorStrParam = grabValue(queryObj.value); + if (operatorStrParam?.str) { + str = operatorStrParam.str; + if (operatorStrParam.param) { + sqlSearhValues.push(operatorStrParam.param); + } + } } else { const valueParsed = queryObj.value ? String(queryObj.value) diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index 0f333c5..57d0407 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -1096,13 +1096,20 @@ export type TableSelectFieldsObject< export type ServerQueryValuesObject = { value?: string | number; equality?: (typeof ServerQueryEqualities)[number]; + tableName?: string; + fieldName?: string; }; +export type ServerQueryObjectValue = + | string + | (string | ServerQueryValuesObject | undefined | null) + | (string | ServerQueryValuesObject | undefined | null)[]; + export type ServerQueryObject< T extends object = { [key: string]: any }, K extends string = string > = { - value?: string | (string | ServerQueryValuesObject | undefined | null)[]; + value?: ServerQueryObjectValue; nullValue?: boolean; notNullValue?: boolean; operator?: (typeof ServerQueryOperators)[number]; diff --git a/package.json b/package.json index 0673bbe..63e556e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "5.7.21", + "version": "5.7.22", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {