This commit is contained in:
Benjamin Toby 2026-02-21 02:34:48 +01:00
parent 0da68e30b8
commit ac489ce443
5 changed files with 100 additions and 30 deletions

View File

@ -11,7 +11,6 @@ const sql_gen_operator_gen_1 = __importDefault(require("./sql-gen-operator-gen")
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql` * @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
*/ */
function sqlGenerator({ tableName, genObject, dbFullName, count }) { function sqlGenerator({ tableName, genObject, dbFullName, count }) {
var _a;
const finalQuery = (genObject === null || genObject === void 0 ? void 0 : genObject.query) ? genObject.query : undefined; const finalQuery = (genObject === null || genObject === void 0 ? void 0 : genObject.query) ? genObject.query : undefined;
const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined; const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined;
const sqlSearhValues = []; const sqlSearhValues = [];
@ -300,10 +299,37 @@ function sqlGenerator({ tableName, genObject, dbFullName, count }) {
queryString += `${isSearchStr ? " AND" : " WHERE"} ${fullTextMatchStr}`; queryString += `${isSearchStr ? " AND" : " WHERE"} ${fullTextMatchStr}`;
sqlSearhValues.push(fullTextSearchStr); sqlSearhValues.push(fullTextSearchStr);
} }
if ((_a = genObject === null || genObject === void 0 ? void 0 : genObject.group) === null || _a === void 0 ? void 0 : _a[0]) { if (genObject === null || genObject === void 0 ? void 0 : genObject.group) {
queryString += ` GROUP BY ${genObject.group let group_by_txt = ``;
.map((g) => `\`${g.toString()}\``) if (typeof genObject.group == "string") {
.join(",")}`; group_by_txt = genObject.group;
}
else if (Array.isArray(genObject.group)) {
for (let i = 0; i < genObject.group.length; i++) {
const group = genObject.group[i];
if (typeof group == "string") {
group_by_txt += `\`${group.toString()}\``;
}
else if (typeof group == "object" && group.table) {
group_by_txt += `${group.table}.${String(group.field)}`;
}
else if (typeof group == "object") {
group_by_txt += `${String(group.field)}`;
}
if (i < genObject.group.length - 1) {
group_by_txt += ",";
}
}
}
else if (typeof genObject.group == "object") {
if (genObject.group.table) {
group_by_txt = `${genObject.group.table}.${String(genObject.group.field)}`;
}
else {
group_by_txt = `${String(genObject.group.field)}`;
}
}
queryString += ` GROUP BY ${group_by_txt}`;
} }
function grabOrderString(order) { function grabOrderString(order) {
let orderFields = []; let orderFields = [];

View File

@ -909,18 +909,26 @@ export type ServerQueryParam<T extends {
limit?: number; limit?: number;
page?: number; page?: number;
offset?: number; offset?: number;
order?: ServerQueryParamOrder | ServerQueryParamOrder[]; order?: ServerQueryParamOrder<T> | ServerQueryParamOrder<T>[];
searchOperator?: (typeof ServerQueryOperators)[number]; searchOperator?: (typeof ServerQueryOperators)[number];
searchEquality?: (typeof ServerQueryEqualities)[number]; searchEquality?: (typeof ServerQueryEqualities)[number];
addUserId?: { addUserId?: {
fieldName: keyof T; fieldName: keyof T;
}; };
join?: (ServerQueryParamsJoin<K> | ServerQueryParamsJoin<K>[] | undefined)[]; join?: (ServerQueryParamsJoin<K> | ServerQueryParamsJoin<K>[] | undefined)[];
group?: (keyof T)[]; group?: keyof T | ServerQueryParamGroupBy<T> | (keyof T | ServerQueryParamGroupBy<T>)[];
countSubQueries?: ServerQueryParamsCount[]; countSubQueries?: ServerQueryParamsCount[];
fullTextSearch?: ServerQueryParamFullTextSearch<T>; fullTextSearch?: ServerQueryParamFullTextSearch<T>;
[key: string]: any; [key: string]: any;
}; };
export type ServerQueryParamGroupBy<T extends {
[k: string]: any;
} = {
[k: string]: any;
}> = {
field: keyof T;
table?: string;
};
export type ServerQueryParamOrder<T extends { export type ServerQueryParamOrder<T extends {
[k: string]: any; [k: string]: any;
} = { } = {

View File

@ -26,7 +26,7 @@ type Return = {
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql` * @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
*/ */
export default function sqlGenerator< export default function sqlGenerator<
T extends { [key: string]: any } = { [key: string]: any } T extends { [key: string]: any } = { [key: string]: any },
>({ tableName, genObject, dbFullName, count }: Param<T>): Return { >({ tableName, genObject, dbFullName, count }: Param<T>): Return {
const finalQuery = genObject?.query ? genObject.query : undefined; const finalQuery = genObject?.query ? genObject.query : undefined;
@ -69,10 +69,10 @@ export default function sqlGenerator<
typeof valueParsed == "string" typeof valueParsed == "string"
? valueParsed ? valueParsed
: valueParsed : valueParsed
? valueParsed.fieldName && valueParsed.tableName ? valueParsed.fieldName && valueParsed.tableName
? `${valueParsed.tableName}.${valueParsed.fieldName}` ? `${valueParsed.tableName}.${valueParsed.fieldName}`
: valueParsed.value?.toString() : valueParsed.value?.toString()
: undefined; : undefined;
const valueEquality = const valueEquality =
typeof valueParsed == "object" typeof valueParsed == "object"
@ -86,8 +86,8 @@ export default function sqlGenerator<
value: valueString?.toString() || "", value: valueString?.toString() || "",
isValueFieldValue: Boolean( isValueFieldValue: Boolean(
typeof valueParsed == "object" && typeof valueParsed == "object" &&
valueParsed.fieldName && valueParsed.fieldName &&
valueParsed.tableName valueParsed.tableName,
), ),
}); });
@ -144,7 +144,7 @@ export default function sqlGenerator<
function generateJoinStr( function generateJoinStr(
mtch: ServerQueryParamsJoinMatchObject, mtch: ServerQueryParamsJoinMatchObject,
join: ServerQueryParamsJoin join: ServerQueryParamsJoin,
) { ) {
return `${finalDbName}${ return `${finalDbName}${
typeof mtch.source == "object" ? mtch.source.tableName : tableName typeof mtch.source == "object" ? mtch.source.tableName : tableName
@ -182,7 +182,7 @@ export default function sqlGenerator<
let fullTextMatchStr = genObject?.fullTextSearch let fullTextMatchStr = genObject?.fullTextSearch
? ` MATCH(${genObject.fullTextSearch.fields ? ` MATCH(${genObject.fullTextSearch.fields
.map((f) => .map((f) =>
genObject.join ? `${tableName}.${String(f)}` : `${String(f)}` genObject.join ? `${tableName}.${String(f)}` : `${String(f)}`,
) )
.join(",")}) AGAINST (? IN BOOLEAN MODE)` .join(",")}) AGAINST (? IN BOOLEAN MODE)`
: undefined; : undefined;
@ -206,7 +206,7 @@ export default function sqlGenerator<
typeof fld == "object" typeof fld == "object"
? `${finalDbName}${tableName}.${fld.fieldName.toString()}` + ? `${finalDbName}${tableName}.${fld.fieldName.toString()}` +
(fld.alias ? ` as ${fld.alias}` : ``) (fld.alias ? ` as ${fld.alias}` : ``)
: `${finalDbName}${tableName}.${String(fld)}` : `${finalDbName}${tableName}.${String(fld)}`,
) )
.join(",")}`; .join(",")}`;
} else { } else {
@ -215,7 +215,7 @@ export default function sqlGenerator<
typeof fld == "object" typeof fld == "object"
? `${fld.fieldName.toString()}` + ? `${fld.fieldName.toString()}` +
(fld.alias ? ` as ${fld.alias}` : ``) (fld.alias ? ` as ${fld.alias}` : ``)
: fld : fld,
) )
.join(",")}`; .join(",")}`;
} }
@ -340,12 +340,12 @@ export default function sqlGenerator<
"(" + "(" +
join.match join.match
.map((mtch) => .map((mtch) =>
generateJoinStr(mtch, join) generateJoinStr(mtch, join),
) )
.join( .join(
join.operator join.operator
? ` ${join.operator} ` ? ` ${join.operator} `
: " AND " : " AND ",
) + ) +
")" ")"
); );
@ -394,7 +394,7 @@ export default function sqlGenerator<
}); });
const cleanedUpSearchStr = sqlSearhString?.filter( const cleanedUpSearchStr = sqlSearhString?.filter(
(str) => typeof str == "string" (str) => typeof str == "string",
); );
const isSearchStr = const isSearchStr =
@ -403,7 +403,7 @@ export default function sqlGenerator<
if (isSearchStr) { if (isSearchStr) {
const stringOperator = genObject?.searchOperator || "AND"; const stringOperator = genObject?.searchOperator || "AND";
queryString += ` WHERE ${cleanedUpSearchStr.join( queryString += ` WHERE ${cleanedUpSearchStr.join(
` ${stringOperator} ` ` ${stringOperator} `,
)}`; )}`;
} }
@ -412,10 +412,36 @@ export default function sqlGenerator<
sqlSearhValues.push(fullTextSearchStr); sqlSearhValues.push(fullTextSearchStr);
} }
if (genObject?.group?.[0]) { if (genObject?.group) {
queryString += ` GROUP BY ${genObject.group let group_by_txt = ``;
.map((g) => `\`${g.toString()}\``)
.join(",")}`; if (typeof genObject.group == "string") {
group_by_txt = genObject.group;
} else if (Array.isArray(genObject.group)) {
for (let i = 0; i < genObject.group.length; i++) {
const group = genObject.group[i];
if (typeof group == "string") {
group_by_txt += `\`${group.toString()}\``;
} else if (typeof group == "object" && group.table) {
group_by_txt += `${group.table}.${String(group.field)}`;
} else if (typeof group == "object") {
group_by_txt += `${String(group.field)}`;
}
if (i < genObject.group.length - 1) {
group_by_txt += ",";
}
}
} else if (typeof genObject.group == "object") {
if (genObject.group.table) {
group_by_txt = `${genObject.group.table}.${String(genObject.group.field)}`;
} else {
group_by_txt = `${String(genObject.group.field)}`;
}
}
queryString += ` GROUP BY ${group_by_txt}`;
} }
function grabOrderString(order: ServerQueryParamOrder<T>) { function grabOrderString(order: ServerQueryParamOrder<T>) {
@ -426,7 +452,7 @@ export default function sqlGenerator<
orderFields.push(genObject.fullTextSearch.scoreAlias); orderFields.push(genObject.fullTextSearch.scoreAlias);
} else if (genObject?.join) { } else if (genObject?.join) {
orderFields.push( orderFields.push(
`${finalDbName}${tableName}.${String(order.field)}` `${finalDbName}${tableName}.${String(order.field)}`,
); );
} else { } else {
orderFields.push(order.field); orderFields.push(order.field);

View File

@ -1101,7 +1101,7 @@ export type ServerQueryParam<
limit?: number; limit?: number;
page?: number; page?: number;
offset?: number; offset?: number;
order?: ServerQueryParamOrder | ServerQueryParamOrder[]; order?: ServerQueryParamOrder<T> | ServerQueryParamOrder<T>[];
searchOperator?: (typeof ServerQueryOperators)[number]; searchOperator?: (typeof ServerQueryOperators)[number];
searchEquality?: (typeof ServerQueryEqualities)[number]; searchEquality?: (typeof ServerQueryEqualities)[number];
addUserId?: { addUserId?: {
@ -1112,12 +1112,22 @@ export type ServerQueryParam<
| ServerQueryParamsJoin<K>[] | ServerQueryParamsJoin<K>[]
| undefined | undefined
)[]; )[];
group?: (keyof T)[]; group?:
| keyof T
| ServerQueryParamGroupBy<T>
| (keyof T | ServerQueryParamGroupBy<T>)[];
countSubQueries?: ServerQueryParamsCount[]; countSubQueries?: ServerQueryParamsCount[];
fullTextSearch?: ServerQueryParamFullTextSearch<T>; fullTextSearch?: ServerQueryParamFullTextSearch<T>;
[key: string]: any; [key: string]: any;
}; };
export type ServerQueryParamGroupBy<
T extends { [k: string]: any } = { [k: string]: any },
> = {
field: keyof T;
table?: string;
};
export type ServerQueryParamOrder< export type ServerQueryParamOrder<
T extends { [k: string]: any } = { [k: string]: any }, T extends { [k: string]: any } = { [k: string]: any },
> = { > = {

View File

@ -1,6 +1,6 @@
{ {
"name": "@moduletrace/datasquirel", "name": "@moduletrace/datasquirel",
"version": "5.7.52", "version": "5.7.53",
"description": "Cloud-based SQL data management tool", "description": "Cloud-based SQL data management tool",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {