datasquirel/package-shared/functions/dsql/sql/sql-gen-operator-gen.ts
2025-10-21 12:08:50 +01:00

134 lines
3.8 KiB
TypeScript

import sqlEqualityParser from "../../../utils/sql-equality-parser";
import { ServerQueryEqualities, ServerQueryObject } from "../../../types";
type Params = {
fieldName: string;
value?: string;
equality?: (typeof ServerQueryEqualities)[number];
queryObj: ServerQueryObject<
{
[key: string]: any;
},
string
>;
};
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,
queryObj,
}: Params): Return {
if (queryObj.nullValue) {
return { str: `${fieldName} IS NULL` };
}
if (queryObj.notNullValue) {
return { str: `${fieldName} IS NOT NULL` };
}
if (value) {
if (equality == "MATCH") {
return {
str: `MATCH(${fieldName}) AGAINST(? IN NATURAL LANGUAGE MODE)`,
param: value,
};
} else if (equality == "MATCH_BOOLEAN") {
return {
str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`,
param: value,
};
} else if (equality == "LIKE_LOWER") {
return {
str: `LOWER(${fieldName}) LIKE LOWER(?)`,
param: `%${value}%`,
};
} else if (equality == "LIKE_LOWER_RAW") {
return {
str: `LOWER(${fieldName}) LIKE LOWER(?)`,
param: value,
};
} else if (equality == "LIKE") {
return {
str: `${fieldName} LIKE ?`,
param: `%${value}%`,
};
} else if (equality == "LIKE_RAW") {
return {
str: `${fieldName} LIKE ?`,
param: value,
};
} else if (equality == "NOT_LIKE_LOWER") {
return {
str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`,
param: `%${value}%`,
};
} else if (equality == "NOT_LIKE_LOWER_RAW") {
return {
str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`,
param: value,
};
} else if (equality == "NOT LIKE") {
return {
str: `${fieldName} NOT LIKE ?`,
param: value,
};
} else if (equality == "NOT LIKE_RAW") {
return {
str: `${fieldName} NOT LIKE ?`,
param: value,
};
} else if (equality == "REGEXP") {
return {
str: `LOWER(${fieldName}) REGEXP LOWER(?)`,
param: value,
};
} else if (equality == "FULLTEXT") {
return {
str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`,
param: value,
};
} else if (equality == "NOT EQUAL") {
return {
str: `${fieldName} != ?`,
param: value,
};
} else if (equality) {
return {
str: `${fieldName} ${sqlEqualityParser(equality)} ?`,
param: value,
};
} else {
return {
str: `${fieldName} = ?`,
param: value,
};
}
} else {
if (equality == "IS NULL") {
return { str: `${fieldName} IS NULL` };
} else if (equality == "IS NOT NULL") {
return { str: `${fieldName} IS NOT NULL` };
} else if (equality) {
return {
str: `${fieldName} ${sqlEqualityParser(equality)} ?`,
param: value,
};
} else {
return {
str: `${fieldName} = ?`,
param: value,
};
}
}
}