This commit is contained in:
Benjamin Toby
2025-07-05 14:59:30 +01:00
parent 6e334c2525
commit 7e8bb37c09
526 changed files with 17560 additions and 11386 deletions
@@ -1,3 +1,4 @@
import { SQLDeleteGeneratorParams } from "../../../types";
interface SQLDeleteGenReturn {
query: string;
values: string[];
@@ -5,9 +6,5 @@ interface SQLDeleteGenReturn {
/**
* # SQL Delete Generator
*/
export default function sqlDeleteGenerator({ tableName, data, dbFullName, }: {
data: any;
tableName: string;
dbFullName?: string;
}): SQLDeleteGenReturn | undefined;
export default function sqlDeleteGenerator({ tableName, deleteKeyValues, dbFullName, data, }: SQLDeleteGeneratorParams): SQLDeleteGenReturn | undefined;
export {};
@@ -1,26 +1,47 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlDeleteGenerator;
import sqlEqualityParser from "../../../utils/sql-equality-parser";
/**
* # SQL Delete Generator
*/
function sqlDeleteGenerator({ tableName, data, dbFullName, }) {
export default function sqlDeleteGenerator({ tableName, deleteKeyValues, dbFullName, data, }) {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
let queryStr = `DELETE FROM ${finalDbName}${tableName}`;
let deleteBatch = [];
let queryArr = [];
Object.keys(data).forEach((ky) => {
deleteBatch.push(`${ky}=?`);
queryArr.push(data[ky]);
});
if (data) {
Object.keys(data).forEach((ky) => {
let value = data[ky];
const parsedValue = typeof value == "number" ? String(value) : value;
if (!parsedValue)
return;
if (parsedValue.match(/%/)) {
deleteBatch.push(`${ky} LIKE ?`);
queryArr.push(parsedValue);
}
else {
deleteBatch.push(`${ky}=?`);
queryArr.push(parsedValue);
}
});
}
else if (deleteKeyValues) {
deleteKeyValues.forEach((ky) => {
let value = ky.value;
const parsedValue = typeof value == "number" ? String(value) : value;
if (!parsedValue)
return;
const operator = sqlEqualityParser(ky.operator || "EQUAL");
deleteBatch.push(`${ky.key} ${operator} ?`);
queryArr.push(parsedValue);
});
}
queryStr += ` WHERE ${deleteBatch.join(" AND ")}`;
return {
query: queryStr,
values: queryArr,
};
}
catch ( /** @type {any} */error) {
catch (error) {
console.log(`SQL delete gen ERROR: ${error.message}`);
return undefined;
}
@@ -0,0 +1,12 @@
import { ServerQueryEqualities } from "../../../types";
type Params = {
fieldName: string;
value?: string;
equality: (typeof ServerQueryEqualities)[number];
};
/**
* # 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 {};
@@ -0,0 +1,50 @@
import sqlEqualityParser from "../../../utils/sql-equality-parser";
/**
* # SQL Gen Operator Gen
* @description Generates an SQL operator for node module `mysql` or `serverless-mysql`
*/
export default function sqlGenOperatorGen({ fieldName, value, equality, }) {
if (value) {
if (equality == "LIKE") {
return `LOWER(${fieldName}) LIKE LOWER('%${value}%')`;
}
else if (equality == "LIKE_RAW") {
return `LOWER(${fieldName}) LIKE LOWER('${value}')`;
}
else if (equality == "NOT LIKE") {
return `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`;
}
else if (equality == "NOT LIKE_RAW") {
return `LOWER(${fieldName}) NOT LIKE LOWER('${value}')`;
}
else if (equality == "REGEXP") {
return `LOWER(${fieldName}) REGEXP LOWER('${value}')`;
}
else if (equality == "FULLTEXT") {
return `MATCH(${fieldName}) AGAINST('${value}' IN BOOLEAN MODE)`;
}
else if (equality == "NOT EQUAL") {
return `${fieldName} != ${value}`;
}
else if (equality) {
return `${fieldName} ${sqlEqualityParser(equality)} ${value}`;
}
else {
return `${fieldName} = ${value}`;
}
}
else {
if (equality == "IS NULL") {
return `${fieldName} IS NULL`;
}
else if (equality == "IS NOT NULL") {
return `${fieldName} IS NOT NULL`;
}
else if (equality) {
return `${fieldName} ${sqlEqualityParser(equality)} ?`;
}
else {
return `${fieldName} = ?`;
}
}
}
+31 -8
View File
@@ -1,11 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlGenerator;
import sqlEqualityParser from "../../../utils/sql-equality-parser";
/**
* # SQL Query Generator
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
*/
function sqlGenerator({ tableName, genObject, dbFullName, count }) {
export default function sqlGenerator({ tableName, genObject, dbFullName, count }) {
var _a;
const finalQuery = (genObject === null || genObject === void 0 ? void 0 : genObject.query) ? genObject.query : undefined;
const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined;
const sqlSearhValues = [];
@@ -33,19 +32,37 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) {
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 = `${finalFieldName} REGEXP '${valueParsed}'`;
str = `LOWER(${finalFieldName}) REGEXP LOWER(?)`;
sqlSearhValues.push(valueParsed);
}
else if (queryObj.equality == "FULLTEXT") {
str = `MATCH(${finalFieldName}) AGAINST('${valueParsed}' IN BOOLEAN MODE)`;
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);
}
@@ -120,7 +137,7 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) {
}
else if ((_a = genObject === null || genObject === void 0 ? void 0 : genObject.selectFields) === null || _a === void 0 ? void 0 : _a[0]) {
if (genObject.join) {
str += ` ${(_b = genObject.selectFields) === null || _b === void 0 ? void 0 : _b.map((fld) => `${finalDbName}${tableName}.${fld}`).join(",")}`;
str += ` ${(_b = genObject.selectFields) === null || _b === void 0 ? void 0 : _b.map((fld) => `${finalDbName}${tableName}.${String(fld)}`).join(",")}`;
}
else {
str += ` ${(_c = genObject.selectFields) === null || _c === void 0 ? void 0 : _c.join(",")}`;
@@ -207,10 +224,16 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) {
const stringOperator = (genObject === null || genObject === void 0 ? void 0 : genObject.searchOperator) || "AND";
queryString += ` WHERE ${sqlSearhString.join(` ${stringOperator} `)}`;
}
if ((genObject === null || genObject === void 0 ? void 0 : genObject.order) && !count)
if ((_a = genObject === null || genObject === void 0 ? void 0 : genObject.group) === null || _a === void 0 ? void 0 : _a[0]) {
queryString += ` GROUP BY ${genObject.group
.map((g) => `\`${g.toString()}\``)
.join(",")}`;
}
if ((genObject === null || genObject === void 0 ? void 0 : genObject.order) && !count) {
queryString += ` ORDER BY ${genObject.join
? `${finalDbName}${tableName}.${String(genObject.order.field)}`
: String(genObject.order.field)} ${genObject.order.strategy}`;
}
if ((genObject === null || genObject === void 0 ? void 0 : genObject.limit) && !count)
queryString += ` LIMIT ${genObject.limit}`;
if ((genObject === null || genObject === void 0 ? void 0 : genObject.offset) && !count)
@@ -1,11 +1,8 @@
"use strict";
// @ts-check
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlInsertGenerator;
/**
* # SQL Insert Generator
*/
function sqlInsertGenerator({ tableName, data, dbFullName, }) {
export default function sqlInsertGenerator({ tableName, data, dbFullName, }) {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
if (Array.isArray(data) && (data === null || data === void 0 ? void 0 : data[0])) {