UNPKG

informix

Version:

A node.js native client for IBM Informix

165 lines (124 loc) 3.26 kB
'use strict'; var uuid = require( 'uuid' ); /** * Class representing a connection to a database * * @constructor * @param {Ifx} ifx - Native object instance * @param {Pool} [pool] - Connection pool associated with this connection * @param {object} [opts] - Constructor options */ var Connection = function ( ifx, pool, opts ) { var Pool = require( './pool' ); if (! (pool instanceof Pool) ) { opts = pool; pool = false; } // Privileged data this.$ = { id : uuid.v4(), index : -1, ifx : ifx, pool : pool }; this.options( opts ); }; /** * Acquire this connection from the pool * * @param {string} context - Context ID to be used when acquiring the connection * @return {Promise.<Connection, Error>} - A promise to a connection object or * an Error if rejected. */ Connection.prototype.acquire = function ( context ) { if (! this.$.pool ) { return Promise.resolve( this ); } return this.$.pool.acquire( context || this ); }; /** * Open a connection to a database * * @param {object} params - Connection parameters * @return {Promise.<Connection, Error>} - A promise to a connection object or an * Error if rejected. */ Connection.prototype.connect = function ( params ) { var self = this; // set INFORMIXSERVER environment variable if needed if ( params.database ) { var server = params.database.split( '@' )[ 1 ]; if ( server && ( process.env.INFORMIXSERVER !== server ) ) { process.env.INFORMIXSERVER = server; } } return new Promise( function ( resolve, reject ) { params.id = self.$.id; self.$.ifx.connect( params, function ( err, connid ) { if ( err ) { return reject( err ); } resolve( self ); } ); } ); }; /** * Return the connection ID * * @return {string} - ID generated for this connection. */ Connection.prototype.id = function () { return this.$.id; }; /** * Return the instance of the native binding used with this connection * * @return {Ifx} - Native object instance. */ Connection.prototype.ifx = function () { return this.$.ifx; }; /** * Return the connection pool index * * @return {integer} - Connection pool index associated with this connection. */ Connection.prototype.index = function () { return this.$.index; }; /** * Set options * * @param {object} opts - Options */ Connection.prototype.options = function ( opts ) { this.$.opts = opts || {}; if ( this.$.opts.index !== undefined ) { this.$.index = this.$.opts.index; } }; /** * Prepare a statement * * @param {string} sql - SQL statement to prepare * @param {object} [opts] - Options to be passed to the {@link Statement} constructor * * @return {Promise.<Statement, Error>} - A promise to a statement object or an * Error if rejected. */ Connection.prototype.prepare = function ( sql, opts ) { var Statement = require( './statement' ); var stmt = new Statement( this, opts ); return stmt.prepare( sql ); }; /** * Release this connection back to the pool * * @param {string} context - Context ID to be used when releasing the connection */ Connection.prototype.release = function ( context ) { if ( this.$.pool ) { this.$.pool.release( context || this ); } }; module.exports = Connection;