56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
import sqlGenGrabConcatStr from "./sql-generator-grab-concat-str";
|
|
import { sqlField, sqlIdent } from "./sql-safe";
|
|
export default function sqlGenGrabSelectFieldSQL({ selectFields, append_table_names, table_name }) {
|
|
let str = "";
|
|
str += ` ${selectFields
|
|
?.map((fld) => {
|
|
if (typeof fld != "object") {
|
|
return sqlField(fld);
|
|
}
|
|
const fld_name = sqlField(fld.fieldName);
|
|
const final_fld_name = append_table_names && !fld_name.includes(".")
|
|
? `${table_name}.${fld_name}`
|
|
: fld_name;
|
|
if (fld.group_concat) {
|
|
return sqlGenGrabConcatStr({
|
|
field: final_fld_name,
|
|
alias: fld.group_concat.alias || fld.alias || fld_name,
|
|
separator: fld.group_concat.separator,
|
|
distinct: fld.group_concat.distinct,
|
|
});
|
|
}
|
|
let fld_str = ``;
|
|
let alias = fld.alias;
|
|
if (fld.count) {
|
|
fld_str += `COUNT(${final_fld_name})`;
|
|
if (!alias && typeof fld.count == "object") {
|
|
alias = fld.count.alias;
|
|
}
|
|
}
|
|
else if (fld.sum) {
|
|
fld_str += `SUM(${final_fld_name})`;
|
|
}
|
|
else if (fld.average) {
|
|
fld_str += `AVG(${final_fld_name})`;
|
|
}
|
|
else if (fld.max) {
|
|
fld_str += `MAX(${final_fld_name})`;
|
|
}
|
|
else if (fld.min) {
|
|
fld_str += `MIN(${final_fld_name})`;
|
|
}
|
|
else if (fld.distinct) {
|
|
fld_str += `DISTINCT ${final_fld_name}`;
|
|
}
|
|
else {
|
|
fld_str += final_fld_name;
|
|
}
|
|
if (alias) {
|
|
fld_str += ` AS ${sqlIdent(alias, "alias")}`;
|
|
}
|
|
return fld_str;
|
|
})
|
|
.join(",")}`;
|
|
return str;
|
|
}
|