UNPKG

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
"use strict"; 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;