mysql-all-in-one
Version:
A package that allows you to have a complete interaction with a MYSQL database, allowing to connect to the database, retrieve data and create queries.
106 lines (105 loc) • 4.53 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.tableObject = void 0;
const utils_1 = require("../utils");
const join_1 = __importDefault(require("./join"));
const columns_1 = __importDefault(require("./columns"));
const where_1 = __importDefault(require("./conditionals/where"));
const having_1 = __importDefault(require("./conditionals/having"));
const types_1 = require("./types");
const group_1 = require("./group");
const order_1 = require("./order");
const generate_query_from_prepared_statement_1 = require("../generate_query_from_prepared_statement");
const tableObject = (table) => {
if (typeof table === 'string') {
const [extractedTable, alias] = (0, utils_1.extractTableAlias)((0, utils_1.escapeNames)(table));
return {
table: extractedTable,
alias,
values: [],
};
}
if (typeof table === 'object') {
const entries = Object.entries(table);
if (entries.length !== 0) {
const [key, val] = entries[0];
if (typeof val === 'string')
return {
table: (0, utils_1.putBrackets)(val),
alias: (0, utils_1.escapeNames)(key),
values: [],
};
if (typeof val === 'object') {
const { statement, values } = select(val);
return {
table: (0, utils_1.putBrackets)(statement),
alias: (0, utils_1.escapeNames)(key),
values,
};
}
}
}
return { table: '', alias: '', values: [] };
};
exports.tableObject = tableObject;
/**
*
* @param opts Select Object structure
* @returns SELECT SQL Query
* @example select({})
*/
const select = (opts) => {
const { from, columns: columnsOpts, join: joinOpts, where: whereOpts, group: groupOpts, having: havingOpts, order: orderOpts, limit, offset, prependAlias, union, } = Object.assign(Object.assign({}, types_1.defaultSelectOptions), opts);
const prepStatementValues = [];
const { table, alias, values } = (0, exports.tableObject)(from);
prepStatementValues.push(...values);
const aliasToPrepend = prependAlias === true ? alias : undefined;
//Columns
const { statement: sColumns, values: sColumnValues } = (0, columns_1.default)(columnsOpts, aliasToPrepend);
prepStatementValues.push(...sColumnValues);
//From
const sFrom = table
? ` FROM ${table}${alias && alias !== table ? ` ${alias}` : ''}`
: '';
//Join
const { joinPreparedStatement: { statement: sJoin, values: sJoinValues }, columnsPreparedStatement: { statement: jColumns, values: jColumnsValues, }, } = (0, join_1.default)(joinOpts, aliasToPrepend);
prepStatementValues.push(...jColumnsValues);
prepStatementValues.push(...sJoinValues);
//Where
const { statement: sWhere, values: sWhereValues } = (0, where_1.default)(whereOpts, aliasToPrepend);
prepStatementValues.push(...sWhereValues);
//Group
const sGroup = (0, group_1.group)(groupOpts, aliasToPrepend);
//Having
const { statement: sHaving, values: sHavingValues } = (0, having_1.default)(havingOpts);
prepStatementValues.push(...sHavingValues);
//Order
const sOrder = (0, order_1.order)(orderOpts, aliasToPrepend);
//Limit
const sLimit = limit ? ` LIMIT ${limit}` : '';
//Offset
const sOffset = offset ? ` OFFSET ${offset}` : '';
let sUnion = '';
if ((0, types_1.isSelectOptions)(union)) {
const { statement: unionStatement, values: unionValues } = select(union);
prepStatementValues.push(...unionValues);
sUnion = ` UNION ${unionStatement}`;
}
const prepStatement = {
statement: `SELECT ${sColumns}${jColumns ? `,${jColumns}` : ""}${sFrom}${sJoin}${sWhere}${sGroup}${sHaving}${sOrder}${sLimit}${sOffset}${sUnion}`,
values: prepStatementValues,
__is_prep_statement: true,
};
return prepStatement;
};
const selectStatement = (opts) => {
const prepStatement = select(opts);
prepStatement.statement = `${prepStatement.statement};`;
return opts.returnPreparedStatement === true
? prepStatement
: (0, generate_query_from_prepared_statement_1.generateQueryFromPreparedStatement)(prepStatement);
};
exports.default = selectStatement;
;