Updates
This commit is contained in:
@@ -4,7 +4,12 @@ import { ServerQueryEqualities } from "../../../types";
|
||||
type Params = {
|
||||
fieldName: string;
|
||||
value?: string;
|
||||
equality: (typeof ServerQueryEqualities)[number];
|
||||
equality?: (typeof ServerQueryEqualities)[number];
|
||||
};
|
||||
|
||||
type Return = {
|
||||
str?: string;
|
||||
param?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -15,36 +20,67 @@ export default function sqlGenOperatorGen({
|
||||
fieldName,
|
||||
value,
|
||||
equality,
|
||||
}: Params): string {
|
||||
}: Params): Return {
|
||||
if (value) {
|
||||
if (equality == "LIKE") {
|
||||
return `LOWER(${fieldName}) LIKE LOWER('%${value}%')`;
|
||||
return {
|
||||
str: `LOWER(${fieldName}) LIKE LOWER('%${value}%')`,
|
||||
};
|
||||
} else if (equality == "LIKE_RAW") {
|
||||
return `LOWER(${fieldName}) LIKE LOWER('${value}')`;
|
||||
return {
|
||||
str: `LOWER(${fieldName}) LIKE LOWER(?)`,
|
||||
param: value,
|
||||
};
|
||||
} else if (equality == "NOT LIKE") {
|
||||
return `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`;
|
||||
return {
|
||||
str: `LOWER(${fieldName}) NOT LIKE LOWER('%${value}%')`,
|
||||
};
|
||||
} else if (equality == "NOT LIKE_RAW") {
|
||||
return `LOWER(${fieldName}) NOT LIKE LOWER('${value}')`;
|
||||
return {
|
||||
str: `LOWER(${fieldName}) NOT LIKE LOWER(?)`,
|
||||
param: value,
|
||||
};
|
||||
} else if (equality == "REGEXP") {
|
||||
return `LOWER(${fieldName}) REGEXP LOWER('${value}')`;
|
||||
return {
|
||||
str: `LOWER(${fieldName}) REGEXP LOWER(?')`,
|
||||
param: value,
|
||||
};
|
||||
} else if (equality == "FULLTEXT") {
|
||||
return `MATCH(${fieldName}) AGAINST('${value}' IN BOOLEAN MODE)`;
|
||||
return {
|
||||
str: `MATCH(${fieldName}) AGAINST(? IN BOOLEAN MODE)`,
|
||||
param: value,
|
||||
};
|
||||
} else if (equality == "NOT EQUAL") {
|
||||
return `${fieldName} != ${value}`;
|
||||
return {
|
||||
str: `${fieldName} != ?`,
|
||||
param: value,
|
||||
};
|
||||
} else if (equality) {
|
||||
return `${fieldName} ${sqlEqualityParser(equality)} ${value}`;
|
||||
return {
|
||||
str: `${fieldName} ${sqlEqualityParser(equality)} ?`,
|
||||
param: value,
|
||||
};
|
||||
} else {
|
||||
return `${fieldName} = ${value}`;
|
||||
return {
|
||||
str: `${fieldName} = ?`,
|
||||
param: value,
|
||||
};
|
||||
}
|
||||
} else {
|
||||
if (equality == "IS NULL") {
|
||||
return `${fieldName} IS NULL`;
|
||||
return { str: `${fieldName} IS NULL` };
|
||||
} else if (equality == "IS NOT NULL") {
|
||||
return `${fieldName} IS NOT NULL`;
|
||||
return { str: `${fieldName} IS NOT NULL` };
|
||||
} else if (equality) {
|
||||
return `${fieldName} ${sqlEqualityParser(equality)} ?`;
|
||||
return {
|
||||
str: `${fieldName} ${sqlEqualityParser(equality)} ?`,
|
||||
param: value,
|
||||
};
|
||||
} else {
|
||||
return `${fieldName} = ?`;
|
||||
return {
|
||||
str: `${fieldName} = ?`,
|
||||
param: value,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import sqlEqualityParser from "../../../utils/sql-equality-parser";
|
||||
import {
|
||||
ServerQueryParam,
|
||||
ServerQueryParamsJoin,
|
||||
ServerQueryParamsJoinMatchObject,
|
||||
ServerQueryQueryObject,
|
||||
} from "../../../types";
|
||||
import sqlGenOperatorGen from "./sql-gen-operator-gen";
|
||||
|
||||
type Param<T extends { [key: string]: any } = { [key: string]: any }> = {
|
||||
genObject?: ServerQueryParam<T>;
|
||||
@@ -56,60 +57,76 @@ export default function sqlGenerator<
|
||||
|
||||
let str = `${finalFieldName}=?`;
|
||||
|
||||
if (queryObj.nullValue) {
|
||||
str = `${finalFieldName} IS NULL`;
|
||||
} else if (queryObj.notNullValue) {
|
||||
str = `${finalFieldName} IS NOT NULL`;
|
||||
} 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 = `LOWER(${finalFieldName}) REGEXP LOWER(?)`;
|
||||
sqlSearhValues.push(valueParsed);
|
||||
} else if (queryObj.equality == "FULLTEXT") {
|
||||
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);
|
||||
}
|
||||
} else if (Array.isArray(queryObj.value)) {
|
||||
if (Array.isArray(queryObj.value)) {
|
||||
const strArray: string[] = [];
|
||||
queryObj.value.forEach((val) => {
|
||||
const valueParsed = val;
|
||||
if (queryObj.equality == "LIKE") {
|
||||
strArray.push(
|
||||
`LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`
|
||||
);
|
||||
} else if (queryObj.equality == "NOT EQUAL") {
|
||||
strArray.push(`${finalFieldName} != ?`);
|
||||
sqlSearhValues.push(valueParsed);
|
||||
} else {
|
||||
strArray.push(`${finalFieldName} = ?`);
|
||||
sqlSearhValues.push(valueParsed);
|
||||
const valueString =
|
||||
typeof valueParsed == "string"
|
||||
? valueParsed
|
||||
: valueParsed.value?.toString();
|
||||
|
||||
const valueEquality =
|
||||
typeof valueParsed == "object"
|
||||
? valueParsed.equality || queryObj.equality
|
||||
: queryObj.equality;
|
||||
|
||||
const operatorStrParam = sqlGenOperatorGen({
|
||||
equality: valueEquality,
|
||||
fieldName: finalFieldName || "",
|
||||
value: valueString?.toString() || "",
|
||||
});
|
||||
|
||||
if (operatorStrParam.str && operatorStrParam.param) {
|
||||
strArray.push(operatorStrParam.str);
|
||||
sqlSearhValues.push(operatorStrParam.param);
|
||||
} else if (operatorStrParam.str) {
|
||||
strArray.push(operatorStrParam.str);
|
||||
}
|
||||
});
|
||||
|
||||
str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")";
|
||||
} else {
|
||||
const valueParsed = String(queryObj.value);
|
||||
|
||||
const operatorStrParam = sqlGenOperatorGen({
|
||||
equality: queryObj.equality,
|
||||
fieldName: finalFieldName || "",
|
||||
value: valueParsed,
|
||||
});
|
||||
|
||||
if (operatorStrParam.str && operatorStrParam.param) {
|
||||
str = operatorStrParam.str;
|
||||
sqlSearhValues.push(operatorStrParam.param);
|
||||
} else if (operatorStrParam.str) {
|
||||
str = operatorStrParam.str;
|
||||
}
|
||||
|
||||
// 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 = `LOWER(${finalFieldName}) REGEXP LOWER(?)`;
|
||||
// sqlSearhValues.push(valueParsed);
|
||||
// } else if (queryObj.equality == "FULLTEXT") {
|
||||
// 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);
|
||||
// }
|
||||
}
|
||||
|
||||
return str;
|
||||
@@ -144,8 +161,8 @@ export default function sqlGenerator<
|
||||
});
|
||||
|
||||
function generateJoinStr(
|
||||
/** @type {import("../../../types").ServerQueryParamsJoinMatchObject} */ mtch: import("../../../types").ServerQueryParamsJoinMatchObject,
|
||||
/** @type {import("../../../types").ServerQueryParamsJoin} */ join: import("../../../types").ServerQueryParamsJoin
|
||||
mtch: ServerQueryParamsJoinMatchObject,
|
||||
join: ServerQueryParamsJoin
|
||||
) {
|
||||
return `${finalDbName}${
|
||||
typeof mtch.source == "object" ? mtch.source.tableName : tableName
|
||||
|
||||
Reference in New Issue
Block a user