Add more features to the query generator
This commit is contained in:
+5
-2
@@ -1,8 +1,11 @@
|
||||
import type { ServerQueryParamsJoin, ServerQueryParamsJoinMatchObject } from "../types";
|
||||
import type { ServerQueryParamsJoin, ServerQueryParamsJoinMatchObject, SQLInsertGenValueType } from "../types";
|
||||
type Param = {
|
||||
mtch: ServerQueryParamsJoinMatchObject;
|
||||
join: ServerQueryParamsJoin;
|
||||
table_name: string;
|
||||
};
|
||||
export default function sqlGenGenJoinStr({ join, mtch, table_name }: Param): string;
|
||||
export default function sqlGenGenJoinStr({ join, mtch, table_name }: Param): {
|
||||
str: string;
|
||||
values: SQLInsertGenValueType[];
|
||||
};
|
||||
export {};
|
||||
|
||||
+39
-7
@@ -1,23 +1,37 @@
|
||||
export default function sqlGenGenJoinStr({ join, mtch, table_name }) {
|
||||
let values = [];
|
||||
if (mtch.__batch) {
|
||||
let btch_mtch = ``;
|
||||
btch_mtch += `(`;
|
||||
for (let i = 0; i < mtch.__batch.matches.length; i++) {
|
||||
const __mtch = mtch.__batch.matches[i];
|
||||
btch_mtch += `${sqlGenGenJoinStr({ join, mtch: __mtch, table_name })}`;
|
||||
const { str, values: batch_values } = sqlGenGenJoinStr({
|
||||
join,
|
||||
mtch: __mtch,
|
||||
table_name,
|
||||
});
|
||||
btch_mtch += str;
|
||||
values.push(...batch_values);
|
||||
if (i < mtch.__batch.matches.length - 1) {
|
||||
btch_mtch += ` ${mtch.__batch.operator || "OR"} `;
|
||||
}
|
||||
}
|
||||
btch_mtch += `)`;
|
||||
return btch_mtch;
|
||||
return {
|
||||
str: btch_mtch,
|
||||
values,
|
||||
};
|
||||
}
|
||||
return `${typeof mtch.source == "object" ? mtch.source.tableName : table_name}.${typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source}=${(() => {
|
||||
const equality = mtch.raw_equality || "=";
|
||||
const lhs = `${typeof mtch.source == "object" ? mtch.source.tableName : table_name}.${typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source}`;
|
||||
const rhs = `${(() => {
|
||||
if (mtch.targetLiteral) {
|
||||
if (typeof mtch.targetLiteral == "number") {
|
||||
return `${mtch.targetLiteral}`;
|
||||
}
|
||||
return `'${mtch.targetLiteral}'`;
|
||||
values.push(mtch.targetLiteral);
|
||||
// if (typeof mtch.targetLiteral == "number") {
|
||||
// return `${mtch.targetLiteral}`;
|
||||
// }
|
||||
// return `'${mtch.targetLiteral}'`;
|
||||
return `?`;
|
||||
}
|
||||
if (join.alias) {
|
||||
return `${typeof mtch.target == "object"
|
||||
@@ -30,4 +44,22 @@ export default function sqlGenGenJoinStr({ join, mtch, table_name }) {
|
||||
? mtch.target.tableName
|
||||
: join.tableName}.${typeof mtch.target == "object" ? mtch.target.fieldName : mtch.target}`;
|
||||
})()}`;
|
||||
if (mtch.between) {
|
||||
values.push(mtch.between.min, mtch.between.max);
|
||||
return {
|
||||
str: `${lhs} BETWEEN ? AND ?`,
|
||||
values,
|
||||
};
|
||||
}
|
||||
if (mtch.not_between) {
|
||||
values.push(mtch.not_between.min, mtch.not_between.max);
|
||||
return {
|
||||
str: `${lhs} NOT BETWEEN ? AND ?`,
|
||||
values,
|
||||
};
|
||||
}
|
||||
return {
|
||||
str: `${lhs} ${equality} ${rhs}`,
|
||||
values,
|
||||
};
|
||||
}
|
||||
|
||||
+42
-9
@@ -94,9 +94,36 @@ export default function sqlGenGenQueryStr(params) {
|
||||
return `${joinTableName}.${selectField}`;
|
||||
}
|
||||
else if (typeof selectField == "object") {
|
||||
let aliasSelectField = selectField.count
|
||||
? `COUNT(${joinTableName}.${selectField.field})`
|
||||
: `${joinTableName}.${selectField.field}`;
|
||||
let aliasSelectField = `${joinTableName}.${selectField.field}`;
|
||||
if (selectField.count) {
|
||||
aliasSelectField = `COUNT(${joinTableName}.${selectField.field})`;
|
||||
}
|
||||
if (selectField.sum) {
|
||||
aliasSelectField = `SUM(${joinTableName}.${selectField.field})`;
|
||||
}
|
||||
if (selectField.average) {
|
||||
aliasSelectField = `AVERAGE(${joinTableName}.${selectField.field})`;
|
||||
}
|
||||
if (selectField.max) {
|
||||
aliasSelectField = `MAX(${joinTableName}.${selectField.field})`;
|
||||
}
|
||||
if (selectField.min) {
|
||||
aliasSelectField = `MIN(${joinTableName}.${selectField.field})`;
|
||||
}
|
||||
if (selectField.distinct) {
|
||||
aliasSelectField = `DISTINCT ${joinTableName}.${selectField.field}`;
|
||||
}
|
||||
if (selectField.group_concat &&
|
||||
selectField.alias) {
|
||||
return sqlGenGrabConcatStr({
|
||||
field: `${joinTableName}.${selectField.field}`,
|
||||
alias: selectField.alias,
|
||||
separator: selectField.group_concat
|
||||
.separator,
|
||||
distinct: selectField.group_concat
|
||||
.distinct,
|
||||
});
|
||||
}
|
||||
if (selectField.alias)
|
||||
aliasSelectField += ` AS ${selectField.alias}`;
|
||||
return aliasSelectField;
|
||||
@@ -135,22 +162,28 @@ export default function sqlGenGenQueryStr(params) {
|
||||
if (Array.isArray(join.match)) {
|
||||
return ("(" +
|
||||
join.match
|
||||
.map((mtch) => sqlGenGenJoinStr({
|
||||
mtch,
|
||||
join,
|
||||
table_name,
|
||||
}))
|
||||
.map((mtch) => {
|
||||
const { str, values } = sqlGenGenJoinStr({
|
||||
mtch,
|
||||
join,
|
||||
table_name,
|
||||
});
|
||||
sqlSearhValues.push(...values);
|
||||
return str;
|
||||
})
|
||||
.join(join.operator
|
||||
? ` ${join.operator} `
|
||||
: " AND ") +
|
||||
")");
|
||||
}
|
||||
else if (typeof join.match == "object") {
|
||||
return sqlGenGenJoinStr({
|
||||
const { str, values } = sqlGenGenJoinStr({
|
||||
mtch: join.match,
|
||||
join,
|
||||
table_name,
|
||||
});
|
||||
sqlSearhValues.push(...values);
|
||||
return str;
|
||||
}
|
||||
})());
|
||||
})
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
import type { ServerQueryParamsJoin, ServerQueryQueryObject } from "../types";
|
||||
import type { ServerQueryParamsJoin, ServerQueryQueryObject, SQLInsertGenValueType } from "../types";
|
||||
type Param = {
|
||||
queryObj: ServerQueryQueryObject[string];
|
||||
join?: (ServerQueryParamsJoin | ServerQueryParamsJoin[] | undefined)[];
|
||||
@@ -7,6 +7,6 @@ type Param = {
|
||||
};
|
||||
export default function sqlGenGenSearchStr({ queryObj, join, field, table_name, }: Param): {
|
||||
str: string;
|
||||
values: (string | number | Float32Array<ArrayBuffer> | Buffer<ArrayBuffer>)[];
|
||||
values: SQLInsertGenValueType[];
|
||||
};
|
||||
export {};
|
||||
|
||||
+8
@@ -61,6 +61,14 @@ export default function sqlGenGenSearchStr({ queryObj, join, field, table_name,
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (queryObj.raw_equality && queryObj.value) {
|
||||
str = `${finalFieldName} ${queryObj.raw_equality} ?`;
|
||||
sqlSearhValues.push(queryObj.value);
|
||||
}
|
||||
else if (queryObj.between) {
|
||||
str = `${finalFieldName} BETWEEN ? AND ?`;
|
||||
sqlSearhValues.push(queryObj.between.min, queryObj.between.max);
|
||||
}
|
||||
else {
|
||||
const valueParsed = queryObj.value ? queryObj.value : undefined;
|
||||
const operatorStrParam = sqlGenOperatorGen({
|
||||
|
||||
+2
-1
@@ -2,6 +2,7 @@ type Param = {
|
||||
field: string;
|
||||
alias: string;
|
||||
separator?: string;
|
||||
distinct?: boolean;
|
||||
};
|
||||
export default function sqlGenGrabConcatStr({ alias, field, separator, }: Param): string;
|
||||
export default function sqlGenGrabConcatStr({ alias, field, separator, distinct, }: Param): string;
|
||||
export {};
|
||||
|
||||
+8
-2
@@ -1,4 +1,10 @@
|
||||
export default function sqlGenGrabConcatStr({ alias, field, separator = ",", }) {
|
||||
let gc = `GROUP_CONCAT(${field}, '${separator}') AS ${alias}`;
|
||||
export default function sqlGenGrabConcatStr({ alias, field, separator = ",", distinct, }) {
|
||||
let gc = `GROUP_CONCAT(`;
|
||||
if (distinct) {
|
||||
gc += `DISTINCT `;
|
||||
}
|
||||
gc += `${field}, '${separator}'`;
|
||||
gc += `)`;
|
||||
gc += ` AS ${alias}`;
|
||||
return gc;
|
||||
}
|
||||
|
||||
+17
-4
@@ -13,24 +13,37 @@ export default function sqlGenGrabSelectFieldSQL({ selectFields, append_table_na
|
||||
const fld_name = `${String(fld.fieldName)}`;
|
||||
if (fld.count) {
|
||||
fld_str += `COUNT(${fld_name})`;
|
||||
if (fld.count.alias) {
|
||||
fld_str += ` AS ${fld.count.alias}`;
|
||||
}
|
||||
}
|
||||
else if (fld.sum) {
|
||||
fld_str += `SUM(${fld_name}) AS ${fld.sum.alias}`;
|
||||
fld_str += `SUM(${fld_name})`;
|
||||
}
|
||||
else if (fld.average) {
|
||||
fld_str += `AVERAGE(${fld_name})`;
|
||||
}
|
||||
else if (fld.max) {
|
||||
fld_str += `MAX(${fld_name})`;
|
||||
}
|
||||
else if (fld.min) {
|
||||
fld_str += `MIN(${fld_name})`;
|
||||
}
|
||||
else if (fld.distinct) {
|
||||
fld_str += `DISTINCT ${fld_name}`;
|
||||
}
|
||||
else if (fld.group_concat) {
|
||||
fld_str += sqlGenGrabConcatStr({
|
||||
field: fld_name,
|
||||
alias: fld.group_concat.alias,
|
||||
separator: fld.group_concat.separator,
|
||||
distinct: fld.group_concat.distinct,
|
||||
});
|
||||
}
|
||||
else {
|
||||
fld_str +=
|
||||
final_fld_name + (fld.alias ? ` as ${fld.alias}` : ``);
|
||||
}
|
||||
if (fld.alias) {
|
||||
fld_str += ` AS ${fld.alias}`;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fld_str += final_fld_name;
|
||||
|
||||
Reference in New Issue
Block a user