87 lines
2.4 KiB
TypeScript
87 lines
2.4 KiB
TypeScript
import sqlEqualityParser from "../../../utils/sql-equality-parser";
|
|
import { ServerQueryEqualities } from "../../../types";
|
|
|
|
type Params = {
|
|
fieldName: string;
|
|
value?: string;
|
|
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): Return {
|
|
if (value) {
|
|
if (equality == "LIKE") {
|
|
return {
|
|
str: `LOWER(${fieldName}) LIKE LOWER('%${value}%')`,
|
|
};
|
|
} else if (equality == "LIKE_RAW") {
|
|
return {
|
|
str: `LOWER(${fieldName}) LIKE LOWER(?)`,
|
|
param: value,
|
|
};
|
|
} else if (equality == "NOT LIKE") {
|
|
return {
|
|
str: `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`,
|
|
};
|
|
} else if (equality == "NOT LIKE_RAW") {
|
|
return {
|
|
str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`,
|
|
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,
|
|
};
|
|
}
|
|
}
|
|
}
|