UNPKG

sedk-mysql

Version:
101 lines 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MoreValuesStep = exports.ValuesStep = void 0; const steps_1 = require("../../steps"); const errors_1 = require("../../errors"); const binder_1 = require("../../binder"); const singletoneConstants_1 = require("../../singletoneConstants"); const util_1 = require("../../util"); const models_1 = require("../../models"); const BaseStep_1 = require("../BaseStep"); class ValuesStep extends BaseStep_1.BaseStep { constructor(prevStep, values) { super(prevStep); this.values = values; if (values.length === 0) { throw new Error('ValuesStep step must have at least one value'); } ValuesStep.throwForInvalidValuesNumber(values, prevStep); return new Proxy(this, { apply: (target, thisArg, args) => target.selfCall(...args) }); } static throwForInvalidValuesNumber(values, prevStep) { if (prevStep instanceof steps_1.IntoTableStep) { const tableColumnCount = prevStep.table.getColumns().length; if (values.length !== tableColumnCount) { throw new errors_1.InsertColumnsAndValuesNotEqualError(tableColumnCount, values.length); } } else if (prevStep instanceof steps_1.IntoColumnsStep) { const columnsCount = prevStep.columns.length; if (columnsCount === 0) { throw new Error('IntoColumnsStep must have at least one column'); } else if (values.length !== columnsCount) { throw new errors_1.InsertColumnsAndValuesNotEqualError(columnsCount, values.length); } } else if (prevStep instanceof ValuesStep) { const valueCount = prevStep.values.length; if (values.length !== valueCount) { throw new errors_1.InsertColumnsAndValuesNotEqualError(valueCount, values.length); } } else { throw new Error('Invalid previous step'); } } selfCall(...values) { return new MoreValuesStep(this, values); } getStepStatement() { const valueStringArray = getValueStringArray(this.values, this.binderStore); return `VALUES(${valueStringArray.join(', ')})`; } getStepArtifacts() { return { tables: new Set(), columns: new Set() }; } } exports.ValuesStep = ValuesStep; class MoreValuesStep extends ValuesStep { constructor(prevStep, values) { super(prevStep, values); this.prefixSeparator = ''; } getStepStatement() { const valueStringArray = getValueStringArray(this.values, this.binderStore); return `,(${valueStringArray.join(', ')})`; } } exports.MoreValuesStep = MoreValuesStep; function getValueStringArray(values, binderStore) { return values.map(it => { if (it === null) { return (0, util_1.getStmtNull)(); } else if (typeof it === 'boolean') { return (0, util_1.getStmtBoolean)(it); } else if ((0, models_1.isNumber)(it)) { return it.toString(); } else if (typeof it === 'string') { return (0, util_1.getStmtString)(it); } else if (it instanceof Date) { return (0, util_1.getStmtDate)(it); } else if (it instanceof binder_1.Binder) { if (it.no === undefined) { binderStore.add(it); } return it.getStmt(); } else if (it instanceof singletoneConstants_1.Default) { return it.getStmt(); } else { throw new Error(`Value step has Unsupported value: ${it}, type: ${typeof it}`); } }); } //# sourceMappingURL=ValuesStep.js.map