lupdo
Version:
Database Abstraction Layer for Node js
78 lines (77 loc) • 2.93 kB
JavaScript
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;