UNPKG

lupdo

Version:

Database Abstraction Layer for Node js

78 lines (77 loc) 2.93 kB
import PdoError from '../errors/pdo-error'; import { paramsToString } from '../utils'; import PdoStatement from './pdo-statement'; export class PdoTransactionPreparedStatement extends PdoStatement { constructor(connection, rawSql, statement) { super(connection, rawSql, {}, [], []); this.statement = statement; this.bindedParams = null; this.bindedRawParams = null; } generateBinding(key, value, params, rawParams) { const bindedValue = this.connection.bindValue(value); if (typeof key === 'number') { if (key - 1 < 0) { throw new PdoError('Bind position must be greater than 0.'); } const index = key - 1; if (params === null) { params = []; rawParams = []; } if (!Array.isArray(params)) { throw new PdoError('Mixed Params Numeric and Keyed are forbidden.'); } params[index] = bindedValue; rawParams[index] = value; } else { if (params === null) { params = {}; rawParams = {}; } if (Array.isArray(params)) { throw new PdoError('Mixed Params Numeric and Keyed are forbidden.'); } params[key] = bindedValue; rawParams[key] = value; } return [params, rawParams]; } bindValue(key, value) { [this.bindedParams, this.bindedRawParams] = this.generateBinding(key, value, this.bindedParams, this.bindedRawParams); } async execute(params) { this.params = null; this.rawParams = null; if (params != null) { if (Array.isArray(params)) { for (let x = 0; x < params.length; x++) { [this.params, this.rawParams] = this.generateBinding(x + 1, params[x], this.params, this.rawParams); } } else { for (const key in params) { [this.params, this.rawParams] = this.generateBinding(key, params[key], this.params, this.rawParams); } } } else { this.params = this.bindedParams; this.rawParams = this.bindedRawParams; } [this.sql, this.affectingResults, this.selectResults, this.columns] = await this.connection.execute(this.rawSql, this.params); this.resetCursor(); this.resetRowset(); this.setCurrentColumns(); this.setCurrentSelectResults(); } debug() { return `SQL: ${this.rawSql}\nPARAMS:${paramsToString(this.rawParams ?? this.bindedRawParams ?? [], 2)}`; } debugSent() { return `PROCESSED SQL: ${this.sql}\nPARAMS:${paramsToString(this.params ?? this.bindedParams ?? [], 2)}`; } } export default PdoTransactionPreparedStatement;