sedk-mysql
Version:
Simple SQL builder and validator for MySQL
101 lines • 3.8 kB
JavaScript
;
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