From 60ddd9e1bf0701d825203448e0dbe38fe50f16f8 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 12:29:40 +0900 Subject: [PATCH 01/10] Ref #14: Indent using spaces instead of tabs. --- CHANGELOG.md | 4 + src/CUBRIDConnection.js | 2140 +++++++++++++++++++-------------------- 2 files changed, 1074 insertions(+), 1070 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce2b9fe..9bc8d94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # node-cubrid change log +## Version Next (Unreleased) + +- Ref #14: Indent using spaces instead of tabs. + ## Version 2.2.5 (June 5, 2015) - Fix #45: Imply the connection before beginning the transaction. diff --git a/src/CUBRIDConnection.js b/src/CUBRIDConnection.js index 74f9c96..8693061 100644 --- a/src/CUBRIDConnection.js +++ b/src/CUBRIDConnection.js @@ -1,71 +1,71 @@ var Net = require('net'), - EventEmitter = require('events').EventEmitter, - Util = require('util'), - - ErrorMessages = require('./constants/ErrorMessages'), - DATA_TYPES = require('./constants/DataTypes'), - CASConstants = require('./constants/CASConstants'), - - ActionQueue = require('./utils/ActionQueue'), - Helpers = require('./utils/Helpers'), - Cache = require('./utils/Cache'), - - Query = require('./query/Query'), - Queue = require('./query/Queue'), - - PacketReader = require('./packets/PacketReader'), - PacketWriter = require('./packets/PacketWriter'), - ClientInfoExchangePacket = require('./packets/ClientInfoExchangePacket'), - OpenDatabasePacket = require('./packets/OpenDatabasePacket'), - GetEngineVersionPacket = require('./packets/GetEngineVersionPacket'), - ExecuteQueryPacket = require('./packets/ExecuteQueryPacket'), - GetSchemaPacket = require('./packets/GetSchemaPacket.js'), - CloseQueryPacket = require('./packets/CloseQueryPacket'), - BatchExecuteNoQueryPacket = require('./packets/BatchExecuteNoQueryPacket'), - CloseDatabasePacket = require('./packets/CloseDatabasePacket'), - FetchPacket = require('./packets/FetchPacket'), - SetAutoCommitModePacket = require('./packets/SetAutoCommitModePacket'), - RollbackPacket = require('./packets/RollbackPacket'), - CommitPacket = require('./packets/CommitPacket'), - LOBReadPacket = require('./packets/LOBReadPacket'), - LOBNewPacket = require('./packets/LOBNewPacket'), - LOBWritePacket = require('./packets/LOBWritePacket'), - SetDbParameterPacket = require('./packets/SetDbParameterPacket'), - GetDbParameterPacket = require('./packets/GetDbParameterPacket'), - PrepareExecuteOldProtocolPacket = require('./packets/PrepareExecuteOldProtocolPacket'); + EventEmitter = require('events').EventEmitter, + Util = require('util'), + + ErrorMessages = require('./constants/ErrorMessages'), + DATA_TYPES = require('./constants/DataTypes'), + CASConstants = require('./constants/CASConstants'), + + ActionQueue = require('./utils/ActionQueue'), + Helpers = require('./utils/Helpers'), + Cache = require('./utils/Cache'), + + Query = require('./query/Query'), + Queue = require('./query/Queue'), + + PacketReader = require('./packets/PacketReader'), + PacketWriter = require('./packets/PacketWriter'), + ClientInfoExchangePacket = require('./packets/ClientInfoExchangePacket'), + OpenDatabasePacket = require('./packets/OpenDatabasePacket'), + GetEngineVersionPacket = require('./packets/GetEngineVersionPacket'), + ExecuteQueryPacket = require('./packets/ExecuteQueryPacket'), + GetSchemaPacket = require('./packets/GetSchemaPacket.js'), + CloseQueryPacket = require('./packets/CloseQueryPacket'), + BatchExecuteNoQueryPacket = require('./packets/BatchExecuteNoQueryPacket'), + CloseDatabasePacket = require('./packets/CloseDatabasePacket'), + FetchPacket = require('./packets/FetchPacket'), + SetAutoCommitModePacket = require('./packets/SetAutoCommitModePacket'), + RollbackPacket = require('./packets/RollbackPacket'), + CommitPacket = require('./packets/CommitPacket'), + LOBReadPacket = require('./packets/LOBReadPacket'), + LOBNewPacket = require('./packets/LOBNewPacket'), + LOBWritePacket = require('./packets/LOBWritePacket'), + SetDbParameterPacket = require('./packets/SetDbParameterPacket'), + GetDbParameterPacket = require('./packets/GetDbParameterPacket'), + PrepareExecuteOldProtocolPacket = require('./packets/PrepareExecuteOldProtocolPacket'); if (typeof Buffer.concat !== 'function') { - // `Buffer.concat` is available since node 0.8.x. - // If it's not available, define it. This source code is taken - // from node's core source. - Buffer.concat = function(list, length) { - if (!Array.isArray(list)) { - throw new TypeError('Usage: Buffer.concat(list, [length])'); - } - - if (list.length === 0) { - return new Buffer(0); - } else if (list.length === 1) { - return list[0]; - } - - if (typeof length !== 'number') { - length = 0; - for (var i = 0; i < list.length; i++) { - var buf = list[i]; - length += buf.length; - } - } - - var buffer = new Buffer(length); - var pos = 0; - for (var i = 0; i < list.length; i++) { - var buf = list[i]; - buf.copy(buffer, pos); - pos += buf.length; - } - return buffer; - }; + // `Buffer.concat` is available since node 0.8.x. + // If it's not available, define it. This source code is taken + // from node's core source. + Buffer.concat = function(list, length) { + if (!Array.isArray(list)) { + throw new TypeError('Usage: Buffer.concat(list, [length])'); + } + + if (list.length === 0) { + return new Buffer(0); + } else if (list.length === 1) { + return list[0]; + } + + if (typeof length !== 'number') { + length = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + length += buf.length; + } + } + + var buffer = new Buffer(length); + var pos = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; + }; } module.exports = CUBRIDConnection; @@ -91,18 +91,18 @@ function CUBRIDConnection(brokerServer, brokerPort, user, password, database, ca // Because of this, we must manually call it ourselves: EventEmitter.call(this); - // Allow to pass connection parameters as an object. - if (typeof brokerServer === 'object') { - brokerPort = brokerServer.port; - user = brokerServer.user; - password = brokerServer.password; - database = brokerServer.database; - cacheTimeout = brokerServer.cacheTimeout; - connectionTimeout = brokerServer.connectionTimeout; - brokerServer = brokerServer.host; - } - - // `cacheTimeout` is provided in milliseconds, but the `Cache` class requires seconds. + // Allow to pass connection parameters as an object. + if (typeof brokerServer === 'object') { + brokerPort = brokerServer.port; + user = brokerServer.user; + password = brokerServer.password; + database = brokerServer.database; + cacheTimeout = brokerServer.cacheTimeout; + connectionTimeout = brokerServer.connectionTimeout; + brokerServer = brokerServer.host; + } + + // `cacheTimeout` is provided in milliseconds, but the `Cache` class requires seconds. this._queryCache = cacheTimeout && cacheTimeout > 0 ? new Cache(cacheTimeout / 1000) : null; // Connection parameters @@ -112,8 +112,8 @@ function CUBRIDConnection(brokerServer, brokerPort, user, password, database, ca this.user = user || 'public'; this.password = password || ''; this.database = database || 'demodb'; - // Connection timeout in milliseconds. - this._CONNECTION_TIMEOUT = connectionTimeout || 0; + // Connection timeout in milliseconds. + this._CONNECTION_TIMEOUT = connectionTimeout || 0; // Session public variables this.autoCommitMode = null; // Will be initialized on connect @@ -172,13 +172,13 @@ function CUBRIDConnection(brokerServer, brokerPort, user, password, database, ca this._DB_ENGINE_VER = ''; // Enforce query execution using the old protocol. - // One would enforce the old protocol when trying to connect - // to CUBRID SHARD Broker version 8.4.3 and 9.1.0. - // On later versions of CUBRID SHARD Broker (8.4.4+, 9.2.0+) - // users can use the default newer protocol. + // One would enforce the old protocol when trying to connect + // to CUBRID SHARD Broker version 8.4.3 and 9.1.0. + // On later versions of CUBRID SHARD Broker (8.4.4+, 9.2.0+) + // users can use the default newer protocol. this._ENFORCE_OLD_QUERY_PROTOCOL = false; - this._queue = new Queue(); + this._queue = new Queue(); // Used for standard callbacks 'err' parameter this._NO_ERROR = null; @@ -191,110 +191,110 @@ function CUBRIDConnection(brokerServer, brokerPort, user, password, database, ca */ CUBRIDConnection.prototype._doGetBrokerPort = function (callback) { var clientInfoExchangePacket = new ClientInfoExchangePacket(), - packetWriter = new PacketWriter(clientInfoExchangePacket.getBufferLength()), - self = this, - socket = this._socket = Net.createConnection(this.initialBrokerPort, this.brokerServer); + packetWriter = new PacketWriter(clientInfoExchangePacket.getBufferLength()), + self = this, + socket = this._socket = Net.createConnection(this.initialBrokerPort, this.brokerServer); socket.setNoDelay(true); socket.setTimeout(this._CONNECTION_TIMEOUT); clientInfoExchangePacket.write(packetWriter); - this._setSocketTimeoutErrorListeners(callback); + this._setSocketTimeoutErrorListeners(callback); socket.once('data', function (data) { - // Clear connection timeout - this.setTimeout(0); - this.removeAllListeners('timeout') - .removeAllListeners('data'); + // Clear connection timeout + this.setTimeout(0); + this.removeAllListeners('timeout') + .removeAllListeners('data'); var packetReader = new PacketReader(); packetReader.write(data); clientInfoExchangePacket.parse(packetReader); - var newPort = clientInfoExchangePacket.newConnectionPort; + var newPort = clientInfoExchangePacket.newConnectionPort; self.connectionBrokerPort = newPort; - if (newPort != 0) { + if (newPort != 0) { socket.end(); } - if (newPort > -1) { + if (newPort > -1) { callback(); } else { callback(new Error(ErrorMessages.ERROR_NEW_BROKER_PORT)); } }); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; CUBRIDConnection.prototype._setSocketTimeoutErrorListeners = function (callback) { - var self = this, - socket = this._socket; - - socket.on('timeout', function () { - // The `timeout` event listener is a one time only event. - // Refer to http://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback. - - // `timeout` is emitted (without an error message), if the socket - // times out from inactivity. This is only to notify that the - // socket has been idle. That's why we must manually close the - // connection. - // We need to force disconnection using `destroy()` function - // which will ensure that no more I/O activity happens on this - // socket. In contrast, `end()` function doesn't close the - // connection immediately; the server may still send some data, - // which we don't want. - socket.destroy(); - - self.connectionOpened = false; - - callback(new Error(ErrorMessages.ERROR_CONNECTION_TIMEOUT)); - }); - - this._socketCurrentEventCallback = callback; - - socket.on('error', function (err) { - // As of node 0.10.15 there is a known open bug in Node.js - // (https://github.com/joyent/node/issues/5851) - // which escalates the stream write error to the network socket, - // thus the same error is triggered twice. To handle this case, - // we need to catch only the first of the two events and ignore - // the second one. Since the same error object is escalated, we - // can set a boolean flag whether or not this error has been - // handled by node-cubrid. - if (!err.isHandledByNodeCubrid) { - err.isHandledByNodeCubrid = true; - this.setTimeout(0); - this.removeAllListeners('timeout') - .removeAllListeners('data'); - - // When `error` event is emitted, the socket client gets automatically - // closed. So, no need to close it manually. - self.connectionOpened = false; - - if (typeof self._socketCurrentEventCallback === 'function') { - self._socketCurrentEventCallback(err); - self._socketCurrentEventCallback = null; - } else { - throw err; - } - } - }); - - socket.on('end', function () { - self.connectionOpened = false; - - // Since node-cubrid supports reconnecting to the disconnected - // server, we do not consider socket disconnection by server - // as a fatal error. However, if anybody is listening for the - // disconnect event, we are eager to notify them. - if (self.listeners(self.EVENT_CONNECTION_DISCONNECTED).length > 0) { - self.emit(self.EVENT_CONNECTION_DISCONNECTED); - } - }); + var self = this, + socket = this._socket; + + socket.on('timeout', function () { + // The `timeout` event listener is a one time only event. + // Refer to http://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback. + + // `timeout` is emitted (without an error message), if the socket + // times out from inactivity. This is only to notify that the + // socket has been idle. That's why we must manually close the + // connection. + // We need to force disconnection using `destroy()` function + // which will ensure that no more I/O activity happens on this + // socket. In contrast, `end()` function doesn't close the + // connection immediately; the server may still send some data, + // which we don't want. + socket.destroy(); + + self.connectionOpened = false; + + callback(new Error(ErrorMessages.ERROR_CONNECTION_TIMEOUT)); + }); + + this._socketCurrentEventCallback = callback; + + socket.on('error', function (err) { + // As of node 0.10.15 there is a known open bug in Node.js + // (https://github.com/joyent/node/issues/5851) + // which escalates the stream write error to the network socket, + // thus the same error is triggered twice. To handle this case, + // we need to catch only the first of the two events and ignore + // the second one. Since the same error object is escalated, we + // can set a boolean flag whether or not this error has been + // handled by node-cubrid. + if (!err.isHandledByNodeCubrid) { + err.isHandledByNodeCubrid = true; + this.setTimeout(0); + this.removeAllListeners('timeout') + .removeAllListeners('data'); + + // When `error` event is emitted, the socket client gets automatically + // closed. So, no need to close it manually. + self.connectionOpened = false; + + if (typeof self._socketCurrentEventCallback === 'function') { + self._socketCurrentEventCallback(err); + self._socketCurrentEventCallback = null; + } else { + throw err; + } + } + }); + + socket.on('end', function () { + self.connectionOpened = false; + + // Since node-cubrid supports reconnecting to the disconnected + // server, we do not consider socket disconnection by server + // as a fatal error. However, if anybody is listening for the + // disconnect event, we are eager to notify them. + if (self.listeners(self.EVENT_CONNECTION_DISCONNECTED).length > 0) { + self.emit(self.EVENT_CONNECTION_DISCONNECTED); + } + }); }; /** @@ -303,35 +303,35 @@ CUBRIDConnection.prototype._setSocketTimeoutErrorListeners = function (callback) * @private */ CUBRIDConnection.prototype._doDatabaseLogin = function (callback) { - var socket; + var socket; - if (this.connectionBrokerPort) { - socket = this._socket = Net.createConnection(this.connectionBrokerPort, this.brokerServer); + if (this.connectionBrokerPort) { + socket = this._socket = Net.createConnection(this.connectionBrokerPort, this.brokerServer); - socket.setNoDelay(true); - socket.setTimeout(this._CONNECTION_TIMEOUT); + socket.setNoDelay(true); + socket.setTimeout(this._CONNECTION_TIMEOUT); - this._setSocketTimeoutErrorListeners(callback); - } else { - socket = this._socket; - } + this._setSocketTimeoutErrorListeners(callback); + } else { + socket = this._socket; + } var openDatabasePacket = new OpenDatabasePacket({ - database : this.database, - user : this.user, - password : this.password, - casInfo : this._CASInfo - }), - packetWriter = new PacketWriter(openDatabasePacket.getBufferLength()); + database : this.database, + user : this.user, + password : this.password, + casInfo : this._CASInfo + }), + packetWriter = new PacketWriter(openDatabasePacket.getBufferLength()); openDatabasePacket.write(packetWriter); - socket.on('data', this._receiveBytes({ - parserFunction: this._parseDatabaseLoginBuffer, - dataPacket: openDatabasePacket + socket.on('data', this._receiveBytes({ + parserFunction: this._parseDatabaseLoginBuffer, + dataPacket: openDatabasePacket }, callback)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; /** @@ -340,21 +340,21 @@ CUBRIDConnection.prototype._doDatabaseLogin = function (callback) { */ CUBRIDConnection.prototype._getEngineVersion = function (callback) { var getEngineVersionPacket = new GetEngineVersionPacket({ - casInfo : this._CASInfo - }), - packetWriter = new PacketWriter(getEngineVersionPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo + }), + packetWriter = new PacketWriter(getEngineVersionPacket.getBufferLength()), + socket = this._socket; getEngineVersionPacket.write(packetWriter); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; socket.on('data', this._receiveBytes({ - parserFunction: this._parseEngineVersionBuffer, - dataPacket: getEngineVersionPacket + parserFunction: this._parseEngineVersionBuffer, + dataPacket: getEngineVersionPacket }, callback)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; /** @@ -363,13 +363,13 @@ CUBRIDConnection.prototype._getEngineVersion = function (callback) { */ CUBRIDConnection.prototype.connect = function (callback) { var self = this, - err = this._NO_ERROR; + err = this._NO_ERROR; if (this.connectionOpened === true) { err = new Error(ErrorMessages.ERROR_CONNECTION_ALREADY_OPENED); Helpers._emitEvent(this, err, this.EVENT_ERROR); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } @@ -380,38 +380,38 @@ CUBRIDConnection.prototype.connect = function (callback) { err = new Error(ErrorMessages.ERROR_CONNECTION_ALREADY_PENDING); Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } - return; + return; } this.connectionPending = true; ActionQueue.enqueue([ - this._doGetBrokerPort.bind(this), - this._doDatabaseLogin.bind(this), - this._getEngineVersion.bind(this) - ], function (err) { - // Reset query execution status - self.connectionPending = false; - self.connectionOpened = !(typeof err !== 'undefined' && err !== null); - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTED); - - if (typeof(callback) === 'function') { - callback(err); + this._doGetBrokerPort.bind(this), + this._doDatabaseLogin.bind(this), + this._getEngineVersion.bind(this) + ], function (err) { + // Reset query execution status + self.connectionPending = false; + self.connectionOpened = !(typeof err !== 'undefined' && err !== null); + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTED); + + if (typeof(callback) === 'function') { + callback(err); + } } - } ); }; CUBRIDConnection.prototype._implyConnect = function(cb) { - if (this.connectionOpened) { - process.nextTick(cb); - } else { - this.connect(cb); - } + if (this.connectionOpened) { + process.nextTick(cb); + } else { + this.connect(cb); + } }; /** @@ -419,19 +419,19 @@ CUBRIDConnection.prototype._implyConnect = function(cb) { * @param callback */ CUBRIDConnection.prototype.getEngineVersion = function (callback) { - var self = this; + var self = this; - Helpers._emitEvent(this, this._NO_ERROR, this.EVENT_ERROR, this.EVENT_ENGINE_VERSION_AVAILABLE, this._DB_ENGINE_VER); + Helpers._emitEvent(this, this._NO_ERROR, this.EVENT_ERROR, this.EVENT_ENGINE_VERSION_AVAILABLE, this._DB_ENGINE_VER); - if (typeof(callback) === 'function') { - // Support asynchronous call for backward compatibility. - process.nextTick(function () { - callback(self._NO_ERROR, self._DB_ENGINE_VER); - }); - } + if (typeof(callback) === 'function') { + // Support asynchronous call for backward compatibility. + process.nextTick(function () { + callback(self._NO_ERROR, self._DB_ENGINE_VER); + }); + } - // Support synchronous call. - return this._DB_ENGINE_VER; + // Support synchronous call. + return this._DB_ENGINE_VER; }; /** @@ -440,20 +440,20 @@ CUBRIDConnection.prototype.getEngineVersion = function (callback) { * @param callback */ CUBRIDConnection.prototype.batchExecuteNoQuery = function (sqls, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._batchExecuteNoQuery(sqls, function (err) { - query.callback(err); - done(); - }); - }); + this._queue.push(function (done) { + self._batchExecuteNoQuery(sqls, function (err) { + query.callback(err); + done(); + }); + }); }; CUBRIDConnection.prototype._batchExecuteNoQuery = function (sqls, callback) { var err = this._NO_ERROR, - self = this; + self = this; if (Array.isArray(sqls)) { if (!sqls.length) { @@ -474,24 +474,24 @@ CUBRIDConnection.prototype._batchExecuteNoQuery = function (sqls, callback) { this._implyConnect.bind(this), function (cb) { var batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket({ - SQLs : sqls, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(batchExecuteNoQueryPacket.getBufferLength()), - socket = self._socket; + SQLs : sqls, + casInfo : self._CASInfo, + autoCommitMode : self.autoCommitMode, + dbVersion : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(batchExecuteNoQueryPacket.getBufferLength()), + socket = self._socket; batchExecuteNoQueryPacket.write(packetWriter); - self._socketCurrentEventCallback = cb; + self._socketCurrentEventCallback = cb; socket.on('data', self._receiveBytes({ - parserFunction: self._parseBatchExecuteBuffer, - dataPacket: batchExecuteNoQueryPacket + parserFunction: self._parseBatchExecuteBuffer, + dataPacket: batchExecuteNoQueryPacket }, cb)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); } ], function (err) { Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BATCH_COMMANDS_COMPLETED); @@ -538,391 +538,391 @@ CUBRIDConnection.prototype.executeWithParams = function (sql, arrParamsValues, a * @return {*} */ CUBRIDConnection.prototype.executeWithTypedParams = function (sql, arrParamsValues, arrParamsDataTypes, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._executeWithTypedParams(sql, arrParamsValues, arrParamsDataTypes, function (err) { - query.callback(err); - done(); - }); - }); + this._queue.push(function (done) { + self._executeWithTypedParams(sql, arrParamsValues, arrParamsDataTypes, function (err) { + query.callback(err); + done(); + }); + }); }; CUBRIDConnection.prototype._executeWithTypedParams = function (sql, arrParamsValues, arrParamsDataTypes, callback) { var self = this; ActionQueue.enqueue([ - this._implyConnect.bind(this), + this._implyConnect.bind(this), function (cb) { var prepareExecuteOldProtocolPacket = new PrepareExecuteOldProtocolPacket({ - sql : sql, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER, - paramValues : arrParamsValues, - paramTypes : arrParamsDataTypes - }), - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), - socket = self._socket; + sql : sql, + casInfo : self._CASInfo, + autoCommitMode : self.autoCommitMode, + dbVersion : self._DB_ENGINE_VER, + paramValues : arrParamsValues, + paramTypes : arrParamsDataTypes + }), + packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), + socket = self._socket; prepareExecuteOldProtocolPacket.writePrepare(packetWriter); - self._socketCurrentEventCallback = cb; + self._socketCurrentEventCallback = cb; socket.on('data', self._receiveBytes({ - parserFunction: self._parsePrepareBufferForOldProtocol, - dropDataPacket: true, - dataPacket: prepareExecuteOldProtocolPacket + parserFunction: self._parsePrepareBufferForOldProtocol, + dropDataPacket: true, + dataPacket: prepareExecuteOldProtocolPacket }, cb)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); } ], function (err) { Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BATCH_COMMANDS_COMPLETED); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } }); }; CUBRIDConnection.prototype._receiveBytes = function (options, cb) { - this._callback = cb; - this._parserOptions = options; - this._parserFunction = options.parserFunction; - this._totalBuffLength = 0; - this._buffArr = []; - this._expectedResponseLength = this._INVALID_RESPONSE_LENGTH; + this._callback = cb; + this._parserOptions = options; + this._parserFunction = options.parserFunction; + this._totalBuffLength = 0; + this._buffArr = []; + this._expectedResponseLength = this._INVALID_RESPONSE_LENGTH; - return this._receiveFirstBytes.bind(this); + return this._receiveFirstBytes.bind(this); }; CUBRIDConnection.prototype._receiveFirstBytes = function (data) { - var socket = this._socket; - - // Clear timeout if any. - socket.setTimeout(0); - socket.removeAllListeners('timeout'); - - this._totalBuffLength += data.length; - this._buffArr.push(data); - - if (this._expectedResponseLength === this._INVALID_RESPONSE_LENGTH && - this._totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = this._buffArr.length, - buff; - - socket.pause(); - socket.removeAllListeners('data'); - - if (l > 1) { - buff = Buffer.concat(this._buffArr, this._totalBuffLength); - // For later, use this already concatenated buffer. - // First empty the array: http://stackoverflow.com/a/1234337/556678. - this._buffArr.length = 0; - // Then push this buffer in. - this._buffArr.push(buff); - } else { - buff = this._buffArr[0]; - } - - this._expectedResponseLength = Helpers._getExpectedResponseLength(buff); - - if (this._totalBuffLength < this._expectedResponseLength) { - socket.on('data', this._receiveRemainingBytes.bind(this)); - socket.resume(); - } else { - socket.resume(); - this._parseBuffer(); - } - } + var socket = this._socket; + + // Clear timeout if any. + socket.setTimeout(0); + socket.removeAllListeners('timeout'); + + this._totalBuffLength += data.length; + this._buffArr.push(data); + + if (this._expectedResponseLength === this._INVALID_RESPONSE_LENGTH && + this._totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { + var l = this._buffArr.length, + buff; + + socket.pause(); + socket.removeAllListeners('data'); + + if (l > 1) { + buff = Buffer.concat(this._buffArr, this._totalBuffLength); + // For later, use this already concatenated buffer. + // First empty the array: http://stackoverflow.com/a/1234337/556678. + this._buffArr.length = 0; + // Then push this buffer in. + this._buffArr.push(buff); + } else { + buff = this._buffArr[0]; + } + + this._expectedResponseLength = Helpers._getExpectedResponseLength(buff); + + if (this._totalBuffLength < this._expectedResponseLength) { + socket.on('data', this._receiveRemainingBytes.bind(this)); + socket.resume(); + } else { + socket.resume(); + this._parseBuffer(); + } + } }; CUBRIDConnection.prototype._receiveRemainingBytes = function (data) { - this._totalBuffLength += data.length; - this._buffArr.push(data); + this._totalBuffLength += data.length; + this._buffArr.push(data); - // If we have received all the expected data, start parsing it. - if (this._totalBuffLength === this._expectedResponseLength) { - this._parseBuffer(); - } + // If we have received all the expected data, start parsing it. + if (this._totalBuffLength === this._expectedResponseLength) { + this._parseBuffer(); + } }; CUBRIDConnection.prototype._parseBuffer = function () { - this._socket.removeAllListeners('data'); + this._socket.removeAllListeners('data'); - var packetReader = new PacketReader(); - packetReader.write(Buffer.concat(this._buffArr, this._totalBuffLength)); + var packetReader = new PacketReader(); + packetReader.write(Buffer.concat(this._buffArr, this._totalBuffLength)); - this._parserFunction(packetReader); + this._parserFunction(packetReader); }; CUBRIDConnection.prototype._parseBufferForNewProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parse(packetReader).resultSet, - errorCode = dataPacket.errorCode, - err; + var dataPacket = this._parserOptions.dataPacket, + result = dataPacket.parse(packetReader).resultSet, + errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - this._queriesPacketList.push(dataPacket); + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } else { + this._queriesPacketList.push(dataPacket); - if (this._queryCache !== null) { - this._queryCache.getSet(this._parserOptions.sql, result); - } - } + if (this._queryCache !== null) { + this._queryCache.getSet(this._parserOptions.sql, result); + } + } - this._callback(err, result, dataPacket.queryHandle); + this._callback(err, result, dataPacket.queryHandle); }; CUBRIDConnection.prototype._parsePrepareBufferForOldProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parsePrepare(packetReader); + dataPacket.parsePrepare(packetReader); - var errorCode = dataPacket.errorCode; + var errorCode = dataPacket.errorCode; - if (errorCode !== 0) { - cb(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); - } else { - this._parseExecuteForOldProtocol(); - } + if (errorCode !== 0) { + cb(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); + } else { + this._parseExecuteForOldProtocol(); + } }; CUBRIDConnection.prototype._parseExecuteForOldProtocol = function () { - var dataPacket = this._parserOptions.dataPacket, - packetWriter = new PacketWriter(dataPacket.getExecuteBufferLength()), - socket = this._socket; + var dataPacket = this._parserOptions.dataPacket, + packetWriter = new PacketWriter(dataPacket.getExecuteBufferLength()), + socket = this._socket; - dataPacket.writeExecute(packetWriter); + dataPacket.writeExecute(packetWriter); - this._socketCurrentEventCallback = this._callback; + this._socketCurrentEventCallback = this._callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseExecuteBufferForOldProtocol, - dropDataPacket: this._parserOptions.dropDataPacket, - dataPacket: dataPacket - }, this._callback)); + socket.on('data', this._receiveBytes({ + parserFunction: this._parseExecuteBufferForOldProtocol, + dropDataPacket: this._parserOptions.dropDataPacket, + dataPacket: dataPacket + }, this._callback)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; CUBRIDConnection.prototype._parseExecuteBufferForOldProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parseExecute(packetReader).resultSet, - errorCode = dataPacket.errorCode; + var dataPacket = this._parserOptions.dataPacket, + result = dataPacket.parseExecute(packetReader).resultSet, + errorCode = dataPacket.errorCode; - if (errorCode !== 0) { - this._callback(new Error(errorCode + ':' + dataPacket.errorMsg)); - } else { - if (!this._parserOptions.dropDataPacket) { - this._queriesPacketList.push(dataPacket); - } + if (errorCode !== 0) { + this._callback(new Error(errorCode + ':' + dataPacket.errorMsg)); + } else { + if (!this._parserOptions.dropDataPacket) { + this._queriesPacketList.push(dataPacket); + } - this._callback(null, result, dataPacket.queryHandle); - } + this._callback(null, result, dataPacket.queryHandle); + } }; CUBRIDConnection.prototype._parseFetchBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parse(packetReader, this._queriesPacketList[this._parserOptions.i]).resultSet, - errorCode = dataPacket.errorCode, - err; + var dataPacket = this._parserOptions.dataPacket, + result = dataPacket.parse(packetReader, this._queriesPacketList[this._parserOptions.i]).resultSet, + errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err, result); + this._callback(err, result); }; CUBRIDConnection.prototype._parseBatchExecuteBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); + dataPacket.parse(packetReader); - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - // If there is a gloal error, get the error message - // from dataPacket.errorMsg. - if (errorCode !== 0 && dataPacket.errorMsg) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - // Otherwise, check the individual responses of each query in the batch - // and see if there is an error. - err = []; + // If there is a gloal error, get the error message + // from dataPacket.errorMsg. + if (errorCode !== 0 && dataPacket.errorMsg) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } else { + // Otherwise, check the individual responses of each query in the batch + // and see if there is an error. + err = []; - for (var i = 0; i < dataPacket.arrResultsCode.length; ++i) { - if (dataPacket.arrResultsCode[i] < 0) { - err.push(new Error(dataPacket.arrResultsCode[i] + ':' + dataPacket.arrResultsMsg[i])); - } - } + for (var i = 0; i < dataPacket.arrResultsCode.length; ++i) { + if (dataPacket.arrResultsCode[i] < 0) { + err.push(new Error(dataPacket.arrResultsCode[i] + ':' + dataPacket.arrResultsMsg[i])); + } + } - if (!err.length) { - err = null; - } - } + if (!err.length) { + err = null; + } + } - this._callback(err); + this._callback(err); }; CUBRIDConnection.prototype._parseDatabaseLoginBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); - this._CASInfo = dataPacket.casInfo; + dataPacket.parse(packetReader); + this._CASInfo = dataPacket.casInfo; - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - this.sessionId = dataPacket.sessionId; - this.autoCommitMode = this.AUTOCOMMIT_ON; - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } else { + this.sessionId = dataPacket.sessionId; + this.autoCommitMode = this.AUTOCOMMIT_ON; + } - this._callback(err); + this._callback(err); }; CUBRIDConnection.prototype._parseEngineVersionBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); + dataPacket.parse(packetReader); - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - this._DB_ENGINE_VER = dataPacket.engineVersion; - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } else { + this._DB_ENGINE_VER = dataPacket.engineVersion; + } - this._callback(err); + this._callback(err); }; CUBRIDConnection.prototype._parseCloseQueryBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); + dataPacket.parse(packetReader); - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err); + this._callback(err); }; CUBRIDConnection.prototype._parseCloseBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); - // Close internal socket connection. - this._socket.destroy(); + dataPacket.parse(packetReader); + // Close internal socket connection. + this._socket.destroy(); - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err); + this._callback(err); }; CUBRIDConnection.prototype._parseCommitBuffer = - CUBRIDConnection.prototype._parseRollbackBuffer = - CUBRIDConnection.prototype._parseSetDatabaseParameterBuffer = + CUBRIDConnection.prototype._parseRollbackBuffer = + CUBRIDConnection.prototype._parseSetDatabaseParameterBuffer = -CUBRIDConnection.prototype._parseGetDatabaseParameterBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + CUBRIDConnection.prototype._parseGetDatabaseParameterBuffer = function (packetReader) { + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parse(packetReader); + dataPacket.parse(packetReader); - var errorCode = dataPacket.errorCode, - err; + var errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err); -}; + this._callback(err); + }; CUBRIDConnection.prototype._parseGetSchemaBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + var dataPacket = this._parserOptions.dataPacket; - dataPacket.parseRequestSchema(packetReader); + dataPacket.parseRequestSchema(packetReader); - var errorCode = dataPacket.errorCode; + var errorCode = dataPacket.errorCode; - if (errorCode !== 0) { - this._callback(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); - } else { - this._parseWriteFetchSchema(); - } + if (errorCode !== 0) { + this._callback(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); + } else { + this._parseWriteFetchSchema(); + } }; CUBRIDConnection.prototype._parseWriteFetchSchema = function () { - var dataPacket = this._parserOptions.dataPacket, - packetWriter = new PacketWriter(dataPacket.getFetchSchemaBufferLength()), - socket = this._socket; + var dataPacket = this._parserOptions.dataPacket, + packetWriter = new PacketWriter(dataPacket.getFetchSchemaBufferLength()), + socket = this._socket; - dataPacket.writeFetchSchema(packetWriter); + dataPacket.writeFetchSchema(packetWriter); - this._socketCurrentEventCallback = this._callback; + this._socketCurrentEventCallback = this._callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseFetchSchemaBuffer, - dataPacket: dataPacket - }, this._callback)); + socket.on('data', this._receiveBytes({ + parserFunction: this._parseFetchSchemaBuffer, + dataPacket: dataPacket + }, this._callback)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; CUBRIDConnection.prototype._parseFetchSchemaBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parseFetchSchema(packetReader).schemaInfo, - errorCode = dataPacket.errorCode, - err; + var dataPacket = this._parserOptions.dataPacket, + result = dataPacket.parseFetchSchema(packetReader).schemaInfo, + errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err, result); + this._callback(err, result); }; CUBRIDConnection.prototype._parseLobNewBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - logObject = dataPacket.parse(packetReader).result, - errorCode = dataPacket.errorCode, - err; + var dataPacket = this._parserOptions.dataPacket, + logObject = dataPacket.parse(packetReader).result, + errorCode = dataPacket.errorCode, + err; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + if (errorCode !== 0) { + err = new Error(errorCode + ':' + dataPacket.errorMsg); + } - this._callback(err, logObject); + this._callback(err, logObject); }; CUBRIDConnection.prototype.query = function (sql, params, callback) { - var self = this, - query = new Query(sql, params, callback); + var self = this, + query = new Query(sql, params, callback); - this._queue.push(function (done) { - self._query(query.sql, function (err, result, queryHandle) { - query.callback(err, result, queryHandle); - done(); - }); - }); + this._queue.push(function (done) { + self._query(query.sql, function (err, result, queryHandle) { + query.callback(err, result, queryHandle); + done(); + }); + }); }; /** @@ -943,41 +943,41 @@ CUBRIDConnection.prototype._queryNewProtocol = function (sql, callback) { ActionQueue.enqueue([ function (cb) { - self._implyConnect(cb); + self._implyConnect(cb); }, function (cb) { // Check if data is already in cache if (self._queryCache !== null && self._queryCache.contains(sql)) { - cb(null, self._queryCache.get(sql)); + cb(null, self._queryCache.get(sql)); } else { - var executeQueryPacket = new ExecuteQueryPacket({ - sql : sql, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(executeQueryPacket.getBufferLength()), - socket = self._socket; - - executeQueryPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - // `_receiveBytes()` will return a function which will process the - // incoming data. - socket.on('data', self._receiveBytes({ - sql: sql, - parserFunction: self._parseBufferForNewProtocol, - dataPacket: executeQueryPacket - }, cb)); - - socket.write(packetWriter._buffer); - } + var executeQueryPacket = new ExecuteQueryPacket({ + sql : sql, + casInfo : self._CASInfo, + autoCommitMode : self.autoCommitMode, + dbVersion : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(executeQueryPacket.getBufferLength()), + socket = self._socket; + + executeQueryPacket.write(packetWriter); + + self._socketCurrentEventCallback = cb; + + // `_receiveBytes()` will return a function which will process the + // incoming data. + socket.on('data', self._receiveBytes({ + sql: sql, + parserFunction: self._parseBufferForNewProtocol, + dataPacket: executeQueryPacket + }, cb)); + + socket.write(packetWriter._buffer); + } } ], function (err, result, handle) { Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_DATA_AVAILABLE, result, handle, sql); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err, result, handle); } }); @@ -1006,24 +1006,24 @@ CUBRIDConnection.prototype._queryOldProtocol = function (sql, arrParamsValues, a paramValues : arrParamsValues, paramTypes : arrParamsDataTypes }), - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), - socket = self._socket; + packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), + socket = self._socket; prepareExecuteOldProtocolPacket.writePrepare(packetWriter); - self._socketCurrentEventCallback = cb; + self._socketCurrentEventCallback = cb; socket.on('data', self._receiveBytes({ - parserFunction: self._parsePrepareBufferForOldProtocol, - dataPacket: prepareExecuteOldProtocolPacket + parserFunction: self._parsePrepareBufferForOldProtocol, + dataPacket: prepareExecuteOldProtocolPacket }, cb)); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); } ], function (err, result, handle) { Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_DATA_AVAILABLE, result, handle, sql); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err, result, handle); } }); @@ -1062,21 +1062,21 @@ CUBRIDConnection.prototype.queryWithTypedParams = function (sql, arrParamsValues * @param callback */ CUBRIDConnection.prototype.fetch = function (queryHandle, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.unshift(function (done) { - self._fetch(queryHandle, function (err, result, queryHandle) { - query.callback(err, result, queryHandle); - done(); - }); - }); + this._queue.unshift(function (done) { + self._fetch(queryHandle, function (err, result, queryHandle) { + query.callback(err, result, queryHandle); + done(); + }); + }); }; CUBRIDConnection.prototype._fetch = function (queryHandle, callback) { var self = this, - err = this._NO_ERROR, - foundQueryHandle = false; + err = this._NO_ERROR, + foundQueryHandle = false; for (var i = 0; i < this._queriesPacketList.length; i++) { if (this._queriesPacketList[i].queryHandle === queryHandle) { @@ -1090,7 +1090,7 @@ CUBRIDConnection.prototype._fetch = function (queryHandle, callback) { Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err, null, null); } } else { @@ -1102,29 +1102,29 @@ CUBRIDConnection.prototype._fetch = function (queryHandle, callback) { } } else { var fetchPacket = new FetchPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(fetchPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo, + db_version : this._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(fetchPacket.getBufferLength()), + socket = this._socket; fetchPacket.write(packetWriter, this._queriesPacketList[i]); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; - socket.on('data', this._receiveBytes({ - i: i, - parserFunction: this._parseFetchBuffer, - dataPacket: fetchPacket - }, function (err, result) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_FETCH_DATA_AVAILABLE, result, queryHandle); + socket.on('data', this._receiveBytes({ + i: i, + parserFunction: this._parseFetchBuffer, + dataPacket: fetchPacket + }, function (err, result) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_FETCH_DATA_AVAILABLE, result, queryHandle); - if (typeof(callback) === 'function') { - callback(err, result, queryHandle); - } - })); + if (typeof(callback) === 'function') { + callback(err, result, queryHandle); + } + })); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); } } }; @@ -1135,21 +1135,21 @@ CUBRIDConnection.prototype._fetch = function (queryHandle, callback) { * @param callback */ CUBRIDConnection.prototype.closeQuery = function (queryHandle, callback) { - var self = this, - query = new Query(queryHandle, callback); + var self = this, + query = new Query(queryHandle, callback); - this._queue.unshift(function (done) { - self._closeQuery(queryHandle, function (err) { - query.callback(err, queryHandle); - done(); - }); - }); + this._queue.unshift(function (done) { + self._closeQuery(queryHandle, function (err) { + query.callback(err, queryHandle); + done(); + }); + }); }; CUBRIDConnection.prototype._closeQuery = function (queryHandle, callback) { var self = this, - err = this._NO_ERROR, - foundQueryHandle = false; + err = this._NO_ERROR, + foundQueryHandle = false; for (var i = 0; i < this._queriesPacketList.length; ++i) { if (this._queriesPacketList[i].queryHandle === queryHandle) { @@ -1159,89 +1159,89 @@ CUBRIDConnection.prototype._closeQuery = function (queryHandle, callback) { } if (foundQueryHandle === false) { - err = new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY + ": " + queryHandle); + err = new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY + ": " + queryHandle); if (typeof(callback) === 'function') { callback(err); } - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + Helpers._emitEvent(this, err, this.EVENT_ERROR, null); } else { - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var closeQueryPacket = new CloseQueryPacket({ - casInfo : self._CASInfo, - reqHandle : queryHandle, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(closeQueryPacket.getBufferLength()), - socket = self._socket; - - closeQueryPacket.write(packetWriter); - - function onResponse(err) { - // Remove the event we've previously bound to. - socket.removeListener('end', onConnectionReset); - - if (!err) { - // Remove the referenced query packet from the hash. - self._queriesPacketList.splice(foundQueryHandle, 1); - } - - cb(err); - } - - function onConnectionReset() { - // CUBRID Broker may occasionally reset the connection between the client and the - // CAS that the Broker has assigned to this client. Refer to - // https://github.com/CUBRID/node-cubrid/issues/15 for details. According to - // CUBRID CCI native driver implementation function qe_send_close_handle_msg(), - // we can consider the connection closed operation as a successful request. - // This is true because internally CUBRID Broker manages a pool of CAS - // (CUBRID Application Server) processes. When a client connects, the Broker - // assigns/connect it to one of the CAS. Then the client sends some query requests - // to this CAS. After the client receives a response, it may decide to do some - // other application logic before it closes the query handle. Once the client is - // done with the response, it may try to close the query handle. - // In between these receive response and close query, CUBRID Broker may reassign - // the CAS to another client. Notice the client-Broker connection is not broken. - // When the actual close query request arrives to the Broker, it finds out that - // the CAS referred by the client is reassigned, it sends CONNECTION RESET to the - // client. node-cubrid should listen it and consider such event as if the close - // query request was successful. - socket.removeAllListeners('data'); - // Execute `onResponse` without an error. - onResponse(); - } - - function onError(err) { - socket.removeAllListeners('data'); - - // `ECONNRESET` should also be considered as a connection - // reset. - onResponse(err.code == 'ECONNRESET' ? null : err); - } - - self._socketCurrentEventCallback = onError; - - socket.on('data', self._receiveBytes({ - queryHandle: queryHandle, - parserFunction: self._parseCloseQueryBuffer, - dataPacket: closeQueryPacket - }, onResponse)); - - socket.on('end', onConnectionReset); - - socket.write(packetWriter._buffer); - } - ], function (err) { - if (typeof(callback) === 'function') { - callback(err, queryHandle); - } - - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_CLOSED, queryHandle); - }); + ActionQueue.enqueue([ + this._implyConnect.bind(this), + function (cb) { + var closeQueryPacket = new CloseQueryPacket({ + casInfo : self._CASInfo, + reqHandle : queryHandle, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(closeQueryPacket.getBufferLength()), + socket = self._socket; + + closeQueryPacket.write(packetWriter); + + function onResponse(err) { + // Remove the event we've previously bound to. + socket.removeListener('end', onConnectionReset); + + if (!err) { + // Remove the referenced query packet from the hash. + self._queriesPacketList.splice(foundQueryHandle, 1); + } + + cb(err); + } + + function onConnectionReset() { + // CUBRID Broker may occasionally reset the connection between the client and the + // CAS that the Broker has assigned to this client. Refer to + // https://github.com/CUBRID/node-cubrid/issues/15 for details. According to + // CUBRID CCI native driver implementation function qe_send_close_handle_msg(), + // we can consider the connection closed operation as a successful request. + // This is true because internally CUBRID Broker manages a pool of CAS + // (CUBRID Application Server) processes. When a client connects, the Broker + // assigns/connect it to one of the CAS. Then the client sends some query requests + // to this CAS. After the client receives a response, it may decide to do some + // other application logic before it closes the query handle. Once the client is + // done with the response, it may try to close the query handle. + // In between these receive response and close query, CUBRID Broker may reassign + // the CAS to another client. Notice the client-Broker connection is not broken. + // When the actual close query request arrives to the Broker, it finds out that + // the CAS referred by the client is reassigned, it sends CONNECTION RESET to the + // client. node-cubrid should listen it and consider such event as if the close + // query request was successful. + socket.removeAllListeners('data'); + // Execute `onResponse` without an error. + onResponse(); + } + + function onError(err) { + socket.removeAllListeners('data'); + + // `ECONNRESET` should also be considered as a connection + // reset. + onResponse(err.code == 'ECONNRESET' ? null : err); + } + + self._socketCurrentEventCallback = onError; + + socket.on('data', self._receiveBytes({ + queryHandle: queryHandle, + parserFunction: self._parseCloseQueryBuffer, + dataPacket: closeQueryPacket + }, onResponse)); + + socket.on('end', onConnectionReset); + + socket.write(packetWriter._buffer); + } + ], function (err) { + if (typeof(callback) === 'function') { + callback(err, queryHandle); + } + + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_CLOSED, queryHandle); + }); } }; @@ -1254,91 +1254,91 @@ CUBRIDConnection.prototype.close = close; CUBRIDConnection.prototype.end = close; function close(callback) { - var self = this; - - if (!this.connectionOpened) { - // If the connection has already been closed, no need to emit - // the error. After all this is what the client wants - to - // close the connection. - if (typeof(callback) === 'function') { - callback(); - } - - return; - } - - // Remove all pending requests. - this._queue.empty(); - - ActionQueue.enqueue([ - function (cb) { - ActionQueue.while( - function () { - return (self._queriesPacketList[0] !== null && self._queriesPacketList[0] !== undefined); - }, - function (cb) { - self.closeQuery(self._queriesPacketList[0].queryHandle, cb); - }, - function (err) { - // Log non-blocking error - if (typeof err !== 'undefined' && err !== null) { - Helpers.logError(ErrorMessages.ERROR_ON_CLOSE_QUERY_HANDLE + err); - } - - cb(); - } - ); - }, - function (cb) { - var closeDatabasePacket = new CloseDatabasePacket({ - casInfo : self._CASInfo, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()), - socket = self._socket; - - closeDatabasePacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parseCloseBuffer, - dataPacket: closeDatabasePacket - }, cb)); - - socket.write(packetWriter._buffer); - } - ], function (err) { - // Reset connection status - self.connectionPending = false; - self.connectionOpened = false; - - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTION_CLOSED); - - if (typeof(callback) === 'function') { - callback(err); - } - }); + var self = this; + + if (!this.connectionOpened) { + // If the connection has already been closed, no need to emit + // the error. After all this is what the client wants - to + // close the connection. + if (typeof(callback) === 'function') { + callback(); + } + + return; + } + + // Remove all pending requests. + this._queue.empty(); + + ActionQueue.enqueue([ + function (cb) { + ActionQueue.while( + function () { + return (self._queriesPacketList[0] !== null && self._queriesPacketList[0] !== undefined); + }, + function (cb) { + self.closeQuery(self._queriesPacketList[0].queryHandle, cb); + }, + function (err) { + // Log non-blocking error + if (typeof err !== 'undefined' && err !== null) { + Helpers.logError(ErrorMessages.ERROR_ON_CLOSE_QUERY_HANDLE + err); + } + + cb(); + } + ); + }, + function (cb) { + var closeDatabasePacket = new CloseDatabasePacket({ + casInfo : self._CASInfo, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()), + socket = self._socket; + + closeDatabasePacket.write(packetWriter); + + self._socketCurrentEventCallback = cb; + + socket.on('data', self._receiveBytes({ + parserFunction: self._parseCloseBuffer, + dataPacket: closeDatabasePacket + }, cb)); + + socket.write(packetWriter._buffer); + } + ], function (err) { + // Reset connection status + self.connectionPending = false; + self.connectionOpened = false; + + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTION_CLOSED); + + if (typeof(callback) === 'function') { + callback(err); + } + }); } /** * Start transaction * @param callback */ CUBRIDConnection.prototype.beginTransaction = function (callback) { - var self = this; + var self = this; - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - _toggleAutoCommitMode(self, self.AUTOCOMMIT_OFF, cb); - } - ], function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BEGIN_TRANSACTION); + ActionQueue.enqueue([ + this._implyConnect.bind(this), + function (cb) { + _toggleAutoCommitMode(self, self.AUTOCOMMIT_OFF, cb); + } + ], function (err) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BEGIN_TRANSACTION); - if (typeof(callback) === 'function') { - callback(err); - } - }); + if (typeof(callback) === 'function') { + callback(err); + } + }); }; /** @@ -1369,51 +1369,51 @@ CUBRIDConnection.prototype.getAutoCommitMode = function () { * @param callback */ CUBRIDConnection.prototype.rollback = function (callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.unshift(function (done) { - self._rollback(function (err) { - query.callback(err); - done(); - }); - }); + this._queue.unshift(function (done) { + self._rollback(function (err) { + query.callback(err); + done(); + }); + }); }; CUBRIDConnection.prototype._rollback = function (callback) { var self = this, - err = this._NO_ERROR; + err = this._NO_ERROR; if (this.autoCommitMode === false) { var rollbackPacket = new RollbackPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(rollbackPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo, + db_version : this._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(rollbackPacket.getBufferLength()), + socket = this._socket; rollbackPacket.write(packetWriter); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseRollbackBuffer, - dataPacket: rollbackPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_ROLLBACK_COMPLETED); + socket.on('data', this._receiveBytes({ + parserFunction: this._parseRollbackBuffer, + dataPacket: rollbackPacket + }, function (err) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_ROLLBACK_COMPLETED); - if (typeof(callback) === 'function') { - callback(err); - } - })); + if (typeof(callback) === 'function') { + callback(err); + } + })); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); } else { err = new Error(ErrorMessages.ERROR_NO_ROLLBACK); - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } } @@ -1424,43 +1424,43 @@ CUBRIDConnection.prototype._rollback = function (callback) { * @param callback */ CUBRIDConnection.prototype.commit = function (callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.unshift(function (done) { - self._commit(function (err) { - query.callback(err); - done(); - }); - }); + this._queue.unshift(function (done) { + self._commit(function (err) { + query.callback(err); + done(); + }); + }); }; CUBRIDConnection.prototype._commit = function (callback) { var self = this, - err = this._NO_ERROR; + err = this._NO_ERROR; if (this.autoCommitMode === false) { var commitPacket = new CommitPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(commitPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo, + db_version : this._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(commitPacket.getBufferLength()), + socket = this._socket; commitPacket.write(packetWriter); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseCommitBuffer, - dataPacket: commitPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_COMMIT_COMPLETED); + socket.on('data', this._receiveBytes({ + parserFunction: this._parseCommitBuffer, + dataPacket: commitPacket + }, function (err) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_COMMIT_COMPLETED); - if (typeof(callback) === 'function') { - callback(err); - } - })); + if (typeof(callback) === 'function') { + callback(err); + } + })); socket.write(packetWriter._buffer); } else { @@ -1468,7 +1468,7 @@ CUBRIDConnection.prototype._commit = function (callback) { Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } } @@ -1485,7 +1485,7 @@ function _toggleAutoCommitMode(self, autoCommitMode, callback) { var err = self._NO_ERROR; if (!Helpers._validateInputBoolean(autoCommitMode)) { - err = new Error(ErrorMessages.ERROR_INPUT_VALIDATION); + err = new Error(ErrorMessages.ERROR_INPUT_VALIDATION); Helpers._emitEvent(self, err, self.EVENT_ERROR, null); } else { @@ -1504,50 +1504,50 @@ function _toggleAutoCommitMode(self, autoCommitMode, callback) { * @param callback */ CUBRIDConnection.prototype.getSchema = function (schemaType, tableNameFilter, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._getSchema(schemaType, tableNameFilter, function (err, result) { - query.callback(err, result); - done(); - }); - }); + this._queue.push(function (done) { + self._getSchema(schemaType, tableNameFilter, function (err, result) { + query.callback(err, result); + done(); + }); + }); }; CUBRIDConnection.prototype._getSchema = function (schemaType, tableNameFilter, callback) { var self = this; - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var getSchemaPacket = new GetSchemaPacket({ - casInfo : self._CASInfo, - schemaType : schemaType, - tableNamePattern : tableNameFilter, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(getSchemaPacket.getRequestSchemaBufferLength()), - socket = self._socket; + ActionQueue.enqueue([ + this._implyConnect.bind(this), + function (cb) { + var getSchemaPacket = new GetSchemaPacket({ + casInfo : self._CASInfo, + schemaType : schemaType, + tableNamePattern : tableNameFilter, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(getSchemaPacket.getRequestSchemaBufferLength()), + socket = self._socket; - getSchemaPacket.writeRequestSchema(packetWriter); + getSchemaPacket.writeRequestSchema(packetWriter); - self._socketCurrentEventCallback = cb; + self._socketCurrentEventCallback = cb; - socket.on('data', self._receiveBytes({ - parserFunction: self._parseGetSchemaBuffer, - dataPacket: getSchemaPacket - }, cb)); + socket.on('data', self._receiveBytes({ + parserFunction: self._parseGetSchemaBuffer, + dataPacket: getSchemaPacket + }, cb)); - socket.write(packetWriter._buffer); - } - ], function (err, result) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SCHEMA_DATA_AVAILABLE, result); + socket.write(packetWriter._buffer); + } + ], function (err, result) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SCHEMA_DATA_AVAILABLE, result); - if (typeof(callback) === 'function') { - callback(err, result); - } - }); + if (typeof(callback) === 'function') { + callback(err, result); + } + }); }; /** @@ -1556,50 +1556,50 @@ CUBRIDConnection.prototype._getSchema = function (schemaType, tableNameFilter, c * @param callback */ CUBRIDConnection.prototype.lobNew = function (lobType, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._lobNew(lobType, function (err, lobObject) { - query.callback(err, lobObject); - done(); - }); - }); + this._queue.push(function (done) { + self._lobNew(lobType, function (err, lobObject) { + query.callback(err, lobObject); + done(); + }); + }); }; CUBRIDConnection.prototype._lobNew = function (lobType, callback) { var self = this; ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var lobNewPacket = new LOBNewPacket({ - casInfo : self._CASInfo, - lobType : lobType, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobNewPacket.getBufferLength()), - socket = self._socket; - - lobNewPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parseLobNewBuffer, - dataPacket: lobNewPacket - }, cb)); - - socket.write(packetWriter._buffer); - } - ], - function (err, lobObject) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_NEW_COMPLETED, lobObject); + this._implyConnect.bind(this), + function (cb) { + var lobNewPacket = new LOBNewPacket({ + casInfo : self._CASInfo, + lobType : lobType, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(lobNewPacket.getBufferLength()), + socket = self._socket; + + lobNewPacket.write(packetWriter); + + self._socketCurrentEventCallback = cb; + + socket.on('data', self._receiveBytes({ + parserFunction: self._parseLobNewBuffer, + dataPacket: lobNewPacket + }, cb)); + + socket.write(packetWriter._buffer); + } + ], + function (err, lobObject) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_NEW_COMPLETED, lobObject); - if (typeof(callback) === 'function') { - callback(err, lobObject); - } - }); + if (typeof(callback) === 'function') { + callback(err, lobObject); + } + }); }; /** @@ -1610,20 +1610,20 @@ CUBRIDConnection.prototype._lobNew = function (lobType, callback) { * @param callback */ CUBRIDConnection.prototype.lobWrite = function (lobObject, position, dataBuffer, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._lobWrite(lobObject, position, dataBuffer, function (err, lobObject, totalWriteLen) { - query.callback(err, lobObject, totalWriteLen); - done(); - }); - }); + this._queue.push(function (done) { + self._lobWrite(lobObject, position, dataBuffer, function (err, lobObject, totalWriteLen) { + query.callback(err, lobObject, totalWriteLen); + done(); + }); + }); }; CUBRIDConnection.prototype._lobWrite = function (lobObject, position, dataBuffer, callback) { var self = this, - err = self._NO_ERROR; + err = self._NO_ERROR; if (lobObject.lobLength + 1 !== position) { err = new Error(ErrorMessages.ERROR_INVALID_LOB_POSITION); @@ -1634,106 +1634,106 @@ CUBRIDConnection.prototype._lobWrite = function (lobObject, position, dataBuffer --position; var realWriteLen, writeLen, - totalWriteLen = 0, - len = dataBuffer.length, - offset = 0; + totalWriteLen = 0, + len = dataBuffer.length, + offset = 0; ActionQueue.while( - function () { - return len > 0; - }, - function (cb) { - var expectedResponseLength = self._INVALID_RESPONSE_LENGTH; + function () { + return len > 0; + }, + function (cb) { + var expectedResponseLength = self._INVALID_RESPONSE_LENGTH; - writeLen = Math.min(len, self._LOB_MAX_IO_LENGTH); + writeLen = Math.min(len, self._LOB_MAX_IO_LENGTH); - var dataToWrite = null; + var dataToWrite = null; - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_BLOB) { - dataToWrite = dataBuffer.slice(position, position + writeLen); - } else { - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { - dataToWrite = dataBuffer.substring(position, position + writeLen); + if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_BLOB) { + dataToWrite = dataBuffer.slice(position, position + writeLen); + } else { + if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { + dataToWrite = dataBuffer.substring(position, position + writeLen); + } } - } - var lobWritePacket = new LOBWritePacket({ - casInfo : self._CASInfo, - lobObject : lobObject, - position : position, - data : dataToWrite, - writeLen : writeLen, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobWritePacket.getBufferLength()), - totalBuffLength = 0, - buffArr = [], - socket = self._socket; - - lobWritePacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', function (data) { - totalBuffLength += data.length; - buffArr.push(data); - - if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && - totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = buffArr.length, - buff; - - if (l > 1) { - buff = Buffer.concat(buffArr, totalBuffLength); - // For later, use this already concatenated buffer. - // First empty the array: http://stackoverflow.com/a/1234337/556678. - buffArr.length = 0; - // Then push this buffer in. - buffArr.push(buff); - } else { - buff = buffArr[0]; - } - - expectedResponseLength = Helpers._getExpectedResponseLength(buff); - } - - if (totalBuffLength === expectedResponseLength) { - socket.removeAllListeners('data'); + var lobWritePacket = new LOBWritePacket({ + casInfo : self._CASInfo, + lobObject : lobObject, + position : position, + data : dataToWrite, + writeLen : writeLen, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(lobWritePacket.getBufferLength()), + totalBuffLength = 0, + buffArr = [], + socket = self._socket; + + lobWritePacket.write(packetWriter); + + self._socketCurrentEventCallback = cb; + + socket.on('data', function (data) { + totalBuffLength += data.length; + buffArr.push(data); + + if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && + totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { + var l = buffArr.length, + buff; + + if (l > 1) { + buff = Buffer.concat(buffArr, totalBuffLength); + // For later, use this already concatenated buffer. + // First empty the array: http://stackoverflow.com/a/1234337/556678. + buffArr.length = 0; + // Then push this buffer in. + buffArr.push(buff); + } else { + buff = buffArr[0]; + } + + expectedResponseLength = Helpers._getExpectedResponseLength(buff); + } + + if (totalBuffLength === expectedResponseLength) { + socket.removeAllListeners('data'); + + var packetReader = new PacketReader(); + packetReader.write(Buffer.concat(buffArr, totalBuffLength)); - var packetReader = new PacketReader(); - packetReader.write(Buffer.concat(buffArr, totalBuffLength)); + lobWritePacket.parse(packetReader); + realWriteLen = lobWritePacket.wroteLength; + position = position + realWriteLen; + len -= realWriteLen; + offset += realWriteLen; + totalWriteLen += realWriteLen; - lobWritePacket.parse(packetReader); - realWriteLen = lobWritePacket.wroteLength; - position = position + realWriteLen; - len -= realWriteLen; - offset += realWriteLen; - totalWriteLen += realWriteLen; + var errorCode = lobWritePacket.errorCode, + errorMsg = lobWritePacket.errorMsg; - var errorCode = lobWritePacket.errorCode, - errorMsg = lobWritePacket.errorMsg; + if (errorCode !== 0) { + err = new Error(errorCode + ':' + errorMsg); + } - if (errorCode !== 0) { - err = new Error(errorCode + ':' + errorMsg); + cb(err); } + }); - cb(err); + socket.write(packetWriter._buffer); + }, + function (err) { + if (totalWriteLen > lobObject.lobLength) { + lobObject.lobLength = totalWriteLen; } - }); - - socket.write(packetWriter._buffer); - }, - function (err) { - if (totalWriteLen > lobObject.lobLength) { - lobObject.lobLength = totalWriteLen; - } - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_WRITE_COMPLETED, lobObject, totalWriteLen); + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_WRITE_COMPLETED, lobObject, totalWriteLen); - if (typeof(callback) === 'function') { - callback(err, lobObject, totalWriteLen); - } - }); + if (typeof(callback) === 'function') { + callback(err, lobObject, totalWriteLen); + } + }); }; /** @@ -1744,21 +1744,21 @@ CUBRIDConnection.prototype._lobWrite = function (lobObject, position, dataBuffer * @param callback */ CUBRIDConnection.prototype.lobRead = function (lobObject, position, length, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._lobRead(lobObject, position, length, function (err, buffer, totalReadLen) { - query.callback(err, buffer, totalReadLen); - done(); - }); - }); + this._queue.push(function (done) { + self._lobRead(lobObject, position, length, function (err, buffer, totalReadLen) { + query.callback(err, buffer, totalReadLen); + done(); + }); + }); }; CUBRIDConnection.prototype._lobRead = function (lobObject, position, length, callback) { var self = this, - err = self._NO_ERROR, - buffer; + err = self._NO_ERROR, + buffer; if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { buffer = ''; @@ -1775,98 +1775,98 @@ CUBRIDConnection.prototype._lobRead = function (lobObject, position, length, cal } var realReadLen, - readLen, - totalReadLen = 0; + readLen, + totalReadLen = 0; ActionQueue.while( - function () { - return length > 0; - }, - function (cb) { - var expectedResponseLength = self._INVALID_RESPONSE_LENGTH, - lobReadPacket = new LOBReadPacket({ - casInfo : self._CASInfo, - lobObject : lobObject, - position : position, - lengthToRead : length, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobReadPacket.getBufferLength()), - totalBuffLength = 0, - buffArr = [], - socket = self._socket; - - readLen = Math.min(length, self._LOB_MAX_IO_LENGTH); - - lobReadPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', function (data) { - totalBuffLength += data.length; - buffArr.push(data); - - if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && - totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = buffArr.length, - buff; - - if (l > 1) { - buff = Buffer.concat(buffArr, totalBuffLength); - // For later, use this already concatenated buffer. - // First empty the array: http://stackoverflow.com/a/1234337/556678. - buffArr.length = 0; - // Then push this buffer in. - buffArr.push(buff); - } else { - buff = buffArr[0]; - } - - expectedResponseLength = Helpers._getExpectedResponseLength(buff); - } + function () { + return length > 0; + }, + function (cb) { + var expectedResponseLength = self._INVALID_RESPONSE_LENGTH, + lobReadPacket = new LOBReadPacket({ + casInfo : self._CASInfo, + lobObject : lobObject, + position : position, + lengthToRead : length, + db_version : self._DB_ENGINE_VER + }), + packetWriter = new PacketWriter(lobReadPacket.getBufferLength()), + totalBuffLength = 0, + buffArr = [], + socket = self._socket; + + readLen = Math.min(length, self._LOB_MAX_IO_LENGTH); + + lobReadPacket.write(packetWriter); + + self._socketCurrentEventCallback = cb; + + socket.on('data', function (data) { + totalBuffLength += data.length; + buffArr.push(data); + + if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && + totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { + var l = buffArr.length, + buff; + + if (l > 1) { + buff = Buffer.concat(buffArr, totalBuffLength); + // For later, use this already concatenated buffer. + // First empty the array: http://stackoverflow.com/a/1234337/556678. + buffArr.length = 0; + // Then push this buffer in. + buffArr.push(buff); + } else { + buff = buffArr[0]; + } + + expectedResponseLength = Helpers._getExpectedResponseLength(buff); + } - if (totalBuffLength === expectedResponseLength) { - socket.removeAllListeners('data'); + if (totalBuffLength === expectedResponseLength) { + socket.removeAllListeners('data'); - var packetReader = new PacketReader(); - packetReader.write(Buffer.concat(buffArr, totalBuffLength)); + var packetReader = new PacketReader(); + packetReader.write(Buffer.concat(buffArr, totalBuffLength)); - lobReadPacket.parse(packetReader); + lobReadPacket.parse(packetReader); - realReadLen = lobReadPacket.readLength; - position += realReadLen; - length -= realReadLen; - totalReadLen += realReadLen; + realReadLen = lobReadPacket.readLength; + position += realReadLen; + length -= realReadLen; + totalReadLen += realReadLen; - if (realReadLen === 0) { - length = 0; - } + if (realReadLen === 0) { + length = 0; + } - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { - buffer += lobReadPacket.lobBuffer; - } else { - buffer = Helpers._combineData(buffer, lobReadPacket.lobBuffer); - } + if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { + buffer += lobReadPacket.lobBuffer; + } else { + buffer = Helpers._combineData(buffer, lobReadPacket.lobBuffer); + } - var errorCode = lobReadPacket.errorCode; + var errorCode = lobReadPacket.errorCode; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + lobReadPacket.errorMsg); + if (errorCode !== 0) { + err = new Error(errorCode + ':' + lobReadPacket.errorMsg); + } + + cb(err); } + }); + + socket.write(packetWriter._buffer); + }, + function (err) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_READ_COMPLETED, buffer, totalReadLen); - cb(err); + if (typeof(callback) === 'function') { + callback(err, buffer, totalReadLen); } }); - - socket.write(packetWriter._buffer); - }, - function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_READ_COMPLETED, buffer, totalReadLen); - - if (typeof(callback) === 'function') { - callback(err, buffer, totalReadLen); - } - }); }; /** @@ -1895,60 +1895,60 @@ CUBRIDConnection.prototype.getConnectionTimeout = function () { * @param callback */ CUBRIDConnection.prototype.setDatabaseParameter = function (parameter, value, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._setDatabaseParameter(parameter, value, function (err) { - query.callback(err); - done(); - }); - }); + this._queue.push(function (done) { + self._setDatabaseParameter(parameter, value, function (err) { + query.callback(err); + done(); + }); + }); }; CUBRIDConnection.prototype._setDatabaseParameter = function (parameter, value, callback) { var self = this, - err = this._NO_ERROR; + err = this._NO_ERROR; if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { var errorCode = -1011, - errorMsg = Helpers._resolveErrorCode(errorCode); + errorMsg = Helpers._resolveErrorCode(errorCode); err = new Error(errorCode + ':' + errorMsg); - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } - return; + return; } var setDbParameterPacket = new SetDbParameterPacket({ - casInfo : this._CASInfo, - parameter : parameter, - value : value - }), - packetWriter = new PacketWriter(setDbParameterPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo, + parameter : parameter, + value : value + }), + packetWriter = new PacketWriter(setDbParameterPacket.getBufferLength()), + socket = this._socket; setDbParameterPacket.write(packetWriter); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; socket.on('data', this._receiveBytes({ - parserFunction: this._parseSetDatabaseParameterBuffer, - dataPacket: setDbParameterPacket + parserFunction: this._parseSetDatabaseParameterBuffer, + dataPacket: setDbParameterPacket }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SET_DB_PARAMETER_COMPLETED, null); + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SET_DB_PARAMETER_COMPLETED, null); - if (typeof(callback) === 'function') { - callback(err); - } + if (typeof(callback) === 'function') { + callback(err); + } })); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; /** @@ -1957,59 +1957,59 @@ CUBRIDConnection.prototype._setDatabaseParameter = function (parameter, value, c * @param callback */ CUBRIDConnection.prototype.getDatabaseParameter = function (parameter, callback) { - var self = this, - query = new Query(null, callback); + var self = this, + query = new Query(null, callback); - this._queue.push(function (done) { - self._getDatabaseParameter(parameter, function (err, value) { - query.callback(err, value); - done(); - }); - }); + this._queue.push(function (done) { + self._getDatabaseParameter(parameter, function (err, value) { + query.callback(err, value); + done(); + }); + }); }; CUBRIDConnection.prototype._getDatabaseParameter = function (parameter, callback) { var self = this, - err = this._NO_ERROR; + err = this._NO_ERROR; if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { var errorCode = -1011, - errorMsg = Helpers._resolveErrorCode(errorCode); + errorMsg = Helpers._resolveErrorCode(errorCode); err = new Error(errorCode + ':' + errorMsg); - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - if (typeof(callback) === 'function') { + if (typeof(callback) === 'function') { callback(err); } - return; + return; } var getDbParameterPacket = new GetDbParameterPacket({ - casInfo : this._CASInfo, - parameter : parameter - }), - packetWriter = new PacketWriter(getDbParameterPacket.getBufferLength()), - socket = this._socket; + casInfo : this._CASInfo, + parameter : parameter + }), + packetWriter = new PacketWriter(getDbParameterPacket.getBufferLength()), + socket = this._socket; getDbParameterPacket.write(packetWriter); - this._socketCurrentEventCallback = callback; + this._socketCurrentEventCallback = callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseGetDatabaseParameterBuffer, - dataPacket: getDbParameterPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_GET_DB_PARAMETER_COMPLETED, getDbParameterPacket.value); + socket.on('data', this._receiveBytes({ + parserFunction: this._parseGetDatabaseParameterBuffer, + dataPacket: getDbParameterPacket + }, function (err) { + Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_GET_DB_PARAMETER_COMPLETED, getDbParameterPacket.value); - if (typeof(callback) === 'function') { - callback(err, getDbParameterPacket.value); - } - })); + if (typeof(callback) === 'function') { + callback(err, getDbParameterPacket.value); + } + })); - socket.write(packetWriter._buffer); + socket.write(packetWriter._buffer); }; /** @@ -2040,7 +2040,7 @@ CUBRIDConnection.prototype.getEnforceOldQueryProtocol = function () { * @param callback */ CUBRIDConnection.prototype.addQuery = function (sql, callback) { - this.query(sql, callback); + this.query(sql, callback); }; /** @@ -2064,5 +2064,5 @@ function isQueueEmpty() { } CUBRIDConnection.prototype.getQueueDepth = function () { - return this._queue.getDepth(); + return this._queue.getDepth(); }; From 7965ae9bb656061d269445f020c33a9293e5d0cd Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 12:42:36 +0900 Subject: [PATCH 02/10] Ref #14: Indent using spaces instead of tabs. --- src/query/Queue.js | 48 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/query/Queue.js b/src/query/Queue.js index 7591dc5..cac5ef4 100644 --- a/src/query/Queue.js +++ b/src/query/Queue.js @@ -1,48 +1,48 @@ module.exports = Queue; function Queue() { - this.items = []; -}; + this.items = []; +} Queue.prototype.push = function (item) { - this.items.push(item); - this.process(); + this.items.push(item); + this.process(); }; Queue.prototype.unshift = function (item) { - this.items.unshift(item); - this.process(); + this.items.unshift(item); + this.process(); }; Queue.prototype.process = function () { - if (!this.currentItem && this.items.length) { - // Get the front item. - this.currentItem = this.items.shift(); + if (!this.currentItem && this.items.length) { + // Get the front item. + this.currentItem = this.items.shift(); - var self = this; + var self = this; - // Every item is a function which calls the callback - // we pass when done. - this.currentItem(function () { - self.currentItem = null; + // Every item is a function which calls the callback + // we pass when done. + this.currentItem(function () { + self.currentItem = null; - self.process(); - }); - } + self.process(); + }); + } }; Queue.prototype.getDepth = function () { - return this.items.length + (this.currentItem ? 1 : 0); + return this.items.length + (this.currentItem ? 1 : 0); }; Queue.prototype.isEmpty = function () { - return this.items.length == 0 && !this.currentItem; + return this.items.length == 0 && !this.currentItem; }; Queue.prototype.empty = function () { - // The most efficient way to empty an array is the following - // as stated in http://stackoverflow.com/a/1232046/556678. - this.items.length = 0; - // Remember, that this functions will remove all pending - // requests, but does not terminate the running query. + // The most efficient way to empty an array is the following + // as stated in http://stackoverflow.com/a/1232046/556678. + this.items.length = 0; + // Remember, that this functions will remove all pending + // requests, but does not terminate the running query. }; From 525b2dcc9395badb8898f5ae9c1fa315a91b6550 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 17:37:54 +0900 Subject: [PATCH 03/10] Ref #14: Indent using spaces instead of tabs. --- src/packets/ClientInfoExchangePacket.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/packets/ClientInfoExchangePacket.js b/src/packets/ClientInfoExchangePacket.js index 386adc6..c571e97 100644 --- a/src/packets/ClientInfoExchangePacket.js +++ b/src/packets/ClientInfoExchangePacket.js @@ -1,5 +1,5 @@ var DRIVER_VERSION = require('../constants/DriverVersion'), - DATA_TYPES = require('../constants/DataTypes'); + DATA_TYPES = require('../constants/DataTypes'); module.exports = ClientInfoExchangePacket; @@ -37,11 +37,11 @@ ClientInfoExchangePacket.prototype.parse = function (parser) { }; ClientInfoExchangePacket.prototype.getBufferLength = function () { - var bufferLength = - // The length of "CUBRK" string. - 5 + - // JDBC client type + CAS version + 0 + 0 + 0. All bytes. - DATA_TYPES.BYTE_SIZEOF * 5; + var bufferLength = + // The length of "CUBRK" string. + 5 + + // JDBC client type + CAS version + 0 + 0 + 0. All bytes. + DATA_TYPES.BYTE_SIZEOF * 5; - return bufferLength; + return bufferLength; }; From b29d8a987dbe60ed0ed6b8e560c99acf81f923f0 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 17:43:48 +0900 Subject: [PATCH 04/10] Ref #14: Indent using spaces instead of tabs. --- src/constants/CASConstants.js | 682 ++++++++++++++++----------------- src/constants/DriverVersion.js | 4 +- 2 files changed, 343 insertions(+), 343 deletions(-) diff --git a/src/constants/CASConstants.js b/src/constants/CASConstants.js index eb273c5..c74ca69 100644 --- a/src/constants/CASConstants.js +++ b/src/constants/CASConstants.js @@ -2,456 +2,456 @@ * Define CUBRID Function codes constants */ exports.CASFunctionCode = { - CAS_FC_END_TRAN : 1, - CAS_FC_PREPARE : 2, - CAS_FC_EXECUTE : 3, - CAS_FC_GET_DB_PARAMETER : 4, - CAS_FC_SET_DB_PARAMETER : 5, - CAS_FC_CLOSE_REQ_HANDLE : 6, - CAS_FC_CURSOR : 7, - CAS_FC_FETCH : 8, - CAS_FC_SCHEMA_INFO : 9, - CAS_FC_OID_GET : 10, - CAS_FC_OID_PUT : 11, - CAS_FC_DEPRECATED1 : 12, - CAS_FC_DEPRECATED2 : 13, - CAS_FC_DEPRECATED3 : 14, - CAS_FC_GET_DB_VERSION : 15, - CAS_FC_GET_CLASS_NUM_OBJS : 16, - CAS_FC_OID_CMD : 17, - CAS_FC_COLLECTION : 18, - CAS_FC_NEXT_RESULT : 19, - CAS_FC_EXECUTE_BATCH : 20, - CAS_FC_EXECUTE_ARRAY : 21, - CAS_FC_CURSOR_UPDATE : 22, - CAS_FC_GET_ATTR_TYPE_STR : 23, - CAS_FC_GET_QUERY_INFO : 24, - CAS_FC_DEPRECATED4 : 25, - CAS_FC_SAVEPOINT : 26, - CAS_FC_PARAMETER_INFO : 27, - CAS_FC_XA_PREPARE : 28, - CAS_FC_XA_RECOVER : 29, - CAS_FC_XA_END_TRAN : 30, - CAS_FC_CON_CLOSE : 31, - CAS_FC_CHECK_CAS : 32, - CAS_FC_MAKE_OUT_RS : 33, - CAS_FC_GET_GENERATED_KEYS : 34, - CAS_FC_LOB_NEW : 35, - CAS_FC_LOB_WRITE : 36, - CAS_FC_LOB_READ : 37, - CAS_FC_END_SESSION : 38, - CAS_FC_GET_ROW_COUNT : 39, - CAS_FC_GET_LAST_INSERT_ID : 40, - CAS_FC_PREPARE_AND_EXECUTE : 41 + CAS_FC_END_TRAN : 1, + CAS_FC_PREPARE : 2, + CAS_FC_EXECUTE : 3, + CAS_FC_GET_DB_PARAMETER : 4, + CAS_FC_SET_DB_PARAMETER : 5, + CAS_FC_CLOSE_REQ_HANDLE : 6, + CAS_FC_CURSOR : 7, + CAS_FC_FETCH : 8, + CAS_FC_SCHEMA_INFO : 9, + CAS_FC_OID_GET : 10, + CAS_FC_OID_PUT : 11, + CAS_FC_DEPRECATED1 : 12, + CAS_FC_DEPRECATED2 : 13, + CAS_FC_DEPRECATED3 : 14, + CAS_FC_GET_DB_VERSION : 15, + CAS_FC_GET_CLASS_NUM_OBJS : 16, + CAS_FC_OID_CMD : 17, + CAS_FC_COLLECTION : 18, + CAS_FC_NEXT_RESULT : 19, + CAS_FC_EXECUTE_BATCH : 20, + CAS_FC_EXECUTE_ARRAY : 21, + CAS_FC_CURSOR_UPDATE : 22, + CAS_FC_GET_ATTR_TYPE_STR : 23, + CAS_FC_GET_QUERY_INFO : 24, + CAS_FC_DEPRECATED4 : 25, + CAS_FC_SAVEPOINT : 26, + CAS_FC_PARAMETER_INFO : 27, + CAS_FC_XA_PREPARE : 28, + CAS_FC_XA_RECOVER : 29, + CAS_FC_XA_END_TRAN : 30, + CAS_FC_CON_CLOSE : 31, + CAS_FC_CHECK_CAS : 32, + CAS_FC_MAKE_OUT_RS : 33, + CAS_FC_GET_GENERATED_KEYS : 34, + CAS_FC_LOB_NEW : 35, + CAS_FC_LOB_WRITE : 36, + CAS_FC_LOB_READ : 37, + CAS_FC_END_SESSION : 38, + CAS_FC_GET_ROW_COUNT : 39, + CAS_FC_GET_LAST_INSERT_ID : 40, + CAS_FC_PREPARE_AND_EXECUTE : 41 }; exports.CASFunctionCode900 = { - CAS_FC_END_TRAN : 1, - CAS_FC_PREPARE : 2, - CAS_FC_EXECUTE : 3, - CAS_FC_GET_DB_PARAMETER : 4, - CAS_FC_SET_DB_PARAMETER : 5, - CAS_FC_CLOSE_REQ_HANDLE : 6, - CAS_FC_CURSOR : 7, - CAS_FC_FETCH : 8, - CAS_FC_SCHEMA_INFO : 9, - CAS_FC_OID_GET : 10, - CAS_FC_OID_PUT : 11, - CAS_FC_DEPRECATED1 : 12, - CAS_FC_DEPRECATED2 : 13, - CAS_FC_DEPRECATED3 : 14, - CAS_FC_GET_DB_VERSION : 15, - CAS_FC_GET_CLASS_NUM_OBJS : 16, - CAS_FC_OID_CMD : 17, - CAS_FC_COLLECTION : 18, - CAS_FC_NEXT_RESULT : 19, - CAS_FC_EXECUTE_BATCH : 20, - CAS_FC_EXECUTE_ARRAY : 21, - CAS_FC_CURSOR_UPDATE : 22, - CAS_FC_GET_ATTR_TYPE_STR : 23, - CAS_FC_GET_QUERY_INFO : 24, - CAS_FC_DEPRECATED4 : 25, - CAS_FC_SAVEPOINT : 26, - CAS_FC_PARAMETER_INFO : 27, - CAS_FC_XA_PREPARE : 28, - CAS_FC_XA_RECOVER : 29, - CAS_FC_XA_END_TRAN : 30, - CAS_FC_CON_CLOSE : 31, - CAS_FC_CHECK_CAS : 32, - CAS_FC_MAKE_OUT_RS : 33, - CAS_FC_GET_GENERATED_KEYS : 34, - CAS_FC_LOB_NEW : 35, - CAS_FC_LOB_WRITE : 36, - CAS_FC_LOB_READ : 37, - CAS_FC_END_SESSION : 38, - CAS_FC_GET_ROW_COUNT : 39, - CAS_FC_GET_LAST_INSERT_ID : 40, - CAS_FC_CURSOR_CLOSE : 41, - CAS_FC_PREPARE_AND_EXECUTE : 42 + CAS_FC_END_TRAN : 1, + CAS_FC_PREPARE : 2, + CAS_FC_EXECUTE : 3, + CAS_FC_GET_DB_PARAMETER : 4, + CAS_FC_SET_DB_PARAMETER : 5, + CAS_FC_CLOSE_REQ_HANDLE : 6, + CAS_FC_CURSOR : 7, + CAS_FC_FETCH : 8, + CAS_FC_SCHEMA_INFO : 9, + CAS_FC_OID_GET : 10, + CAS_FC_OID_PUT : 11, + CAS_FC_DEPRECATED1 : 12, + CAS_FC_DEPRECATED2 : 13, + CAS_FC_DEPRECATED3 : 14, + CAS_FC_GET_DB_VERSION : 15, + CAS_FC_GET_CLASS_NUM_OBJS : 16, + CAS_FC_OID_CMD : 17, + CAS_FC_COLLECTION : 18, + CAS_FC_NEXT_RESULT : 19, + CAS_FC_EXECUTE_BATCH : 20, + CAS_FC_EXECUTE_ARRAY : 21, + CAS_FC_CURSOR_UPDATE : 22, + CAS_FC_GET_ATTR_TYPE_STR : 23, + CAS_FC_GET_QUERY_INFO : 24, + CAS_FC_DEPRECATED4 : 25, + CAS_FC_SAVEPOINT : 26, + CAS_FC_PARAMETER_INFO : 27, + CAS_FC_XA_PREPARE : 28, + CAS_FC_XA_RECOVER : 29, + CAS_FC_XA_END_TRAN : 30, + CAS_FC_CON_CLOSE : 31, + CAS_FC_CHECK_CAS : 32, + CAS_FC_MAKE_OUT_RS : 33, + CAS_FC_GET_GENERATED_KEYS : 34, + CAS_FC_LOB_NEW : 35, + CAS_FC_LOB_WRITE : 36, + CAS_FC_LOB_READ : 37, + CAS_FC_END_SESSION : 38, + CAS_FC_GET_ROW_COUNT : 39, + CAS_FC_GET_LAST_INSERT_ID : 40, + CAS_FC_CURSOR_CLOSE : 41, + CAS_FC_PREPARE_AND_EXECUTE : 42 }; /** * Define CUBRID Statement types constants */ exports.CUBRIDStatementType = { - CUBRID_STMT_ALTER_CLASS : 0, - CUBRID_STMT_ALTER_SERIAL : 1, - CUBRID_STMT_COMMIT_WORK : 2, - CUBRID_STMT_REGISTER_DATABASE : 3, - CUBRID_STMT_CREATE_CLASS : 4, - CUBRID_STMT_CREATE_INDEX : 5, - CUBRID_STMT_CREATE_TRIGGER : 6, - CUBRID_STMT_CREATE_SERIAL : 7, - CUBRID_STMT_DROP_DATABASE : 8, - CUBRID_STMT_DROP_CLASS : 9, - CUBRID_STMT_DROP_INDEX : 10, - CUBRID_STMT_DROP_LABEL : 11, - CUBRID_STMT_DROP_TRIGGER : 12, - CUBRID_STMT_DROP_SERIAL : 13, - CUBRID_STMT_EVALUATE : 14, - CUBRID_STMT_RENAME_CLASS : 15, - CUBRID_STMT_ROLLBACK_WORK : 16, - CUBRID_STMT_GRANT : 17, - CUBRID_STMT_REVOKE : 18, - CUBRID_STMT_STATISTICS : 19, - CUBRID_STMT_INSERT : 20, - CUBRID_STMT_SELECT : 21, - CUBRID_STMT_UPDATE : 22, - CUBRID_STMT_DELETE : 23, - CUBRID_STMT_CALL : 24, - CUBRID_STMT_GET_ISO_LVL : 25, - CUBRID_STMT_GET_TIMEOUT : 26, - CUBRID_STMT_GET_OPT_LVL : 27, - CUBRID_STMT_SET_OPT_LVL : 28, - CUBRID_STMT_SCOPE : 29, - CUBRID_STMT_GET_TRIGGER : 30, - CUBRID_STMT_SET_TRIGGER : 31, - CUBRID_STMT_SAVEPOINT : 32, - CUBRID_STMT_PREPARE : 33, - CUBRID_STMT_ATTACH : 34, - CUBRID_STMT_USE : 35, - CUBRID_STMT_REMOVE_TRIGGER : 36, - CUBRID_STMT_RENAME_TRIGGER : 37, - CUBRID_STMT_ON_LDB : 38, - CUBRID_STMT_GET_LDB : 39, - CUBRID_STMT_SET_LDB : 40, - CUBRID_STMT_GET_STATS : 41, - CUBRID_STMT_CREATE_USER : 42, - CUBRID_STMT_DROP_USER : 43, - CUBRID_STMT_ALTER_USER : 44, - CUBRID_STMT_CALL_SP : 0x7e, - CUBRID_STMT_UNKNOWN : 0x7f + CUBRID_STMT_ALTER_CLASS : 0, + CUBRID_STMT_ALTER_SERIAL : 1, + CUBRID_STMT_COMMIT_WORK : 2, + CUBRID_STMT_REGISTER_DATABASE : 3, + CUBRID_STMT_CREATE_CLASS : 4, + CUBRID_STMT_CREATE_INDEX : 5, + CUBRID_STMT_CREATE_TRIGGER : 6, + CUBRID_STMT_CREATE_SERIAL : 7, + CUBRID_STMT_DROP_DATABASE : 8, + CUBRID_STMT_DROP_CLASS : 9, + CUBRID_STMT_DROP_INDEX : 10, + CUBRID_STMT_DROP_LABEL : 11, + CUBRID_STMT_DROP_TRIGGER : 12, + CUBRID_STMT_DROP_SERIAL : 13, + CUBRID_STMT_EVALUATE : 14, + CUBRID_STMT_RENAME_CLASS : 15, + CUBRID_STMT_ROLLBACK_WORK : 16, + CUBRID_STMT_GRANT : 17, + CUBRID_STMT_REVOKE : 18, + CUBRID_STMT_STATISTICS : 19, + CUBRID_STMT_INSERT : 20, + CUBRID_STMT_SELECT : 21, + CUBRID_STMT_UPDATE : 22, + CUBRID_STMT_DELETE : 23, + CUBRID_STMT_CALL : 24, + CUBRID_STMT_GET_ISO_LVL : 25, + CUBRID_STMT_GET_TIMEOUT : 26, + CUBRID_STMT_GET_OPT_LVL : 27, + CUBRID_STMT_SET_OPT_LVL : 28, + CUBRID_STMT_SCOPE : 29, + CUBRID_STMT_GET_TRIGGER : 30, + CUBRID_STMT_SET_TRIGGER : 31, + CUBRID_STMT_SAVEPOINT : 32, + CUBRID_STMT_PREPARE : 33, + CUBRID_STMT_ATTACH : 34, + CUBRID_STMT_USE : 35, + CUBRID_STMT_REMOVE_TRIGGER : 36, + CUBRID_STMT_RENAME_TRIGGER : 37, + CUBRID_STMT_ON_LDB : 38, + CUBRID_STMT_GET_LDB : 39, + CUBRID_STMT_SET_LDB : 40, + CUBRID_STMT_GET_STATS : 41, + CUBRID_STMT_CREATE_USER : 42, + CUBRID_STMT_DROP_USER : 43, + CUBRID_STMT_ALTER_USER : 44, + CUBRID_STMT_CALL_SP : 0x7e, + CUBRID_STMT_UNKNOWN : 0x7f }; /** * Define CUBRID Isolation levels constants */ exports.CUBRIDIsolationLevel = { - TRAN_UNKNOWN_ISOLATION : 0x00, - TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE : 0x01, - TRAN_COMMIT_CLASS_COMMIT_INSTANCE : 0x02, - TRAN_REP_CLASS_UNCOMMIT_INSTANCE : 0x03, - TRAN_REP_CLASS_COMMIT_INSTANCE : 0x04, - TRAN_REP_CLASS_REP_INSTANCE : 0x05, - TRAN_SERIALIZABLE : 0x06, - TRAN_DEFAULT_ISOLATION : 0x01 + TRAN_UNKNOWN_ISOLATION : 0x00, + TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE : 0x01, + TRAN_COMMIT_CLASS_COMMIT_INSTANCE : 0x02, + TRAN_REP_CLASS_UNCOMMIT_INSTANCE : 0x03, + TRAN_REP_CLASS_COMMIT_INSTANCE : 0x04, + TRAN_REP_CLASS_REP_INSTANCE : 0x05, + TRAN_SERIALIZABLE : 0x06, + TRAN_DEFAULT_ISOLATION : 0x01 }; /** * Define CUBRID Data types constants */ exports.CUBRIDDataType = { - CCI_U_TYPE_UNKNOWN : 0, - CCI_U_TYPE_NULL : 0, - CCI_U_TYPE_CHAR : 1, - CCI_U_TYPE_STRING : 2, - CCI_U_TYPE_NCHAR : 3, - CCI_U_TYPE_VARNCHAR : 4, - CCI_U_TYPE_BIT : 5, - CCI_U_TYPE_VARBIT : 6, - CCI_U_TYPE_NUMERIC : 7, - CCI_U_TYPE_INT : 8, - CCI_U_TYPE_SHORT : 9, - CCI_U_TYPE_MONETARY : 10, - CCI_U_TYPE_FLOAT : 11, - CCI_U_TYPE_DOUBLE : 12, - CCI_U_TYPE_DATE : 13, - CCI_U_TYPE_TIME : 14, - CCI_U_TYPE_TIMESTAMP : 15, - CCI_U_TYPE_SET : 16, - CCI_U_TYPE_MULTISET : 17, - CCI_U_TYPE_SEQUENCE : 18, - CCI_U_TYPE_OBJECT : 19, - CCI_U_TYPE_RESULTSET : 20, - CCI_U_TYPE_BIGINT : 21, - CCI_U_TYPE_DATETIME : 22, - CCI_U_TYPE_BLOB : 23, - CCI_U_TYPE_CLOB : 24, - CCI_U_TYPE_ENUM : 25 + CCI_U_TYPE_UNKNOWN : 0, + CCI_U_TYPE_NULL : 0, + CCI_U_TYPE_CHAR : 1, + CCI_U_TYPE_STRING : 2, + CCI_U_TYPE_NCHAR : 3, + CCI_U_TYPE_VARNCHAR : 4, + CCI_U_TYPE_BIT : 5, + CCI_U_TYPE_VARBIT : 6, + CCI_U_TYPE_NUMERIC : 7, + CCI_U_TYPE_INT : 8, + CCI_U_TYPE_SHORT : 9, + CCI_U_TYPE_MONETARY : 10, + CCI_U_TYPE_FLOAT : 11, + CCI_U_TYPE_DOUBLE : 12, + CCI_U_TYPE_DATE : 13, + CCI_U_TYPE_TIME : 14, + CCI_U_TYPE_TIMESTAMP : 15, + CCI_U_TYPE_SET : 16, + CCI_U_TYPE_MULTISET : 17, + CCI_U_TYPE_SEQUENCE : 18, + CCI_U_TYPE_OBJECT : 19, + CCI_U_TYPE_RESULTSET : 20, + CCI_U_TYPE_BIGINT : 21, + CCI_U_TYPE_DATETIME : 22, + CCI_U_TYPE_BLOB : 23, + CCI_U_TYPE_CLOB : 24, + CCI_U_TYPE_ENUM : 25 }; /** * Convert data type number to data type name */ exports.getCUBRIDDataTypeName = function (type) { - switch (type) { - case this.CUBRIDDataType.CCI_U_TYPE_CHAR: - return 'Char'; - case this.CUBRIDDataType.CCI_U_TYPE_NCHAR: - return 'NChar'; - case this.CUBRIDDataType.CCI_U_TYPE_STRING: - return 'String'; - case this.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: - return 'VarNchar'; - case this.CUBRIDDataType.CCI_U_TYPE_SHORT: - return 'Short'; - case this.CUBRIDDataType.CCI_U_TYPE_INT: - return 'Int'; - case this.CUBRIDDataType.CCI_U_TYPE_BIGINT: - return 'Bigint'; - case this.CUBRIDDataType.CCI_U_TYPE_FLOAT: - return 'Float'; - case this.CUBRIDDataType.CCI_U_TYPE_DOUBLE: - return 'Double'; - case this.CUBRIDDataType.CCI_U_TYPE_MONETARY: - return 'Monetary'; - case this.CUBRIDDataType.CCI_U_TYPE_NUMERIC: - return 'Numeric'; - case this.CUBRIDDataType.CCI_U_TYPE_DATE: - return 'Date'; - case this.CUBRIDDataType.CCI_U_TYPE_TIME: - return 'Time'; - case this.CUBRIDDataType.CCI_U_TYPE_DATETIME: - return 'DateTime'; - case this.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: - return 'Timestamp'; - case this.CUBRIDDataType.CCI_U_TYPE_OBJECT: - return 'Object'; - case this.CUBRIDDataType.CCI_U_TYPE_BIT: - return 'Bit'; - case this.CUBRIDDataType.CCI_U_TYPE_VARBIT: - return 'Varbit'; - case this.CUBRIDDataType.CCI_U_TYPE_SET: - return 'Set'; - case this.CUBRIDDataType.CCI_U_TYPE_MULTISET: - return 'Multiset'; - case this.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: - return 'Sequence'; - case this.CUBRIDDataType.CCI_U_TYPE_BLOB: - return 'Blob'; - case this.CUBRIDDataType.CCI_U_TYPE_CLOB: - return 'Clob'; - case this.CUBRIDDataType.CCI_U_TYPE_ENUM: - return 'ENUM'; - case this.CUBRIDDataType.CCI_U_TYPE_RESULTSET: - return 'Resultset'; - default: - return 'UNKNOWN'; - } + switch (type) { + case this.CUBRIDDataType.CCI_U_TYPE_CHAR: + return 'Char'; + case this.CUBRIDDataType.CCI_U_TYPE_NCHAR: + return 'NChar'; + case this.CUBRIDDataType.CCI_U_TYPE_STRING: + return 'String'; + case this.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: + return 'VarNchar'; + case this.CUBRIDDataType.CCI_U_TYPE_SHORT: + return 'Short'; + case this.CUBRIDDataType.CCI_U_TYPE_INT: + return 'Int'; + case this.CUBRIDDataType.CCI_U_TYPE_BIGINT: + return 'Bigint'; + case this.CUBRIDDataType.CCI_U_TYPE_FLOAT: + return 'Float'; + case this.CUBRIDDataType.CCI_U_TYPE_DOUBLE: + return 'Double'; + case this.CUBRIDDataType.CCI_U_TYPE_MONETARY: + return 'Monetary'; + case this.CUBRIDDataType.CCI_U_TYPE_NUMERIC: + return 'Numeric'; + case this.CUBRIDDataType.CCI_U_TYPE_DATE: + return 'Date'; + case this.CUBRIDDataType.CCI_U_TYPE_TIME: + return 'Time'; + case this.CUBRIDDataType.CCI_U_TYPE_DATETIME: + return 'DateTime'; + case this.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: + return 'Timestamp'; + case this.CUBRIDDataType.CCI_U_TYPE_OBJECT: + return 'Object'; + case this.CUBRIDDataType.CCI_U_TYPE_BIT: + return 'Bit'; + case this.CUBRIDDataType.CCI_U_TYPE_VARBIT: + return 'Varbit'; + case this.CUBRIDDataType.CCI_U_TYPE_SET: + return 'Set'; + case this.CUBRIDDataType.CCI_U_TYPE_MULTISET: + return 'Multiset'; + case this.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: + return 'Sequence'; + case this.CUBRIDDataType.CCI_U_TYPE_BLOB: + return 'Blob'; + case this.CUBRIDDataType.CCI_U_TYPE_CLOB: + return 'Clob'; + case this.CUBRIDDataType.CCI_U_TYPE_ENUM: + return 'ENUM'; + case this.CUBRIDDataType.CCI_U_TYPE_RESULTSET: + return 'Resultset'; + default: + return 'UNKNOWN'; + } }; /** * Convert data type name to data type number */ exports.getCUBRIDDataTypeNumber = function (type) { - type = type.toLowerCase(); - switch (type) { - case 'char': - return this.CUBRIDDataType.CCI_U_TYPE_CHAR; - case 'varchar': - return this.CUBRIDDataType.CCI_U_TYPE_STRING; - case 'nchar': - return this.CUBRIDDataType.CCI_U_TYPE_NCHAR; - case 'string': - return this.CUBRIDDataType.CCI_U_TYPE_STRING; - case 'varnchar': - return this.CUBRIDDataType.CCI_U_TYPE_VARNCHAR; - case 'short': - return this.CUBRIDDataType.CCI_U_TYPE_SHORT; - case 'int': - return this.CUBRIDDataType.CCI_U_TYPE_INT; - case 'bigint': - return this.CUBRIDDataType.CCI_U_TYPE_BIGINT; - case 'float': - return this.CUBRIDDataType.CCI_U_TYPE_FLOAT; - case 'double': - return this.CUBRIDDataType.CCI_U_TYPE_DOUBLE; - case 'monetary': - return this.CUBRIDDataType.CCI_U_TYPE_MONETARY; - case 'numeric': - return this.CUBRIDDataType.CCI_U_TYPE_NUMERIC; - case 'date': - return this.CUBRIDDataType.CCI_U_TYPE_DATE; - case 'time': - return this.CUBRIDDataType.CCI_U_TYPE_TIME; - case 'datetime': - return this.CUBRIDDataType.CCI_U_TYPE_DATETIME; - case 'timestamp': - return this.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP; - case 'object': - return this.CUBRIDDataType.CCI_U_TYPE_OBJECT; - case 'bit': - return this.CUBRIDDataType.CCI_U_TYPE_BIT; - case 'varbit': - return this.CUBRIDDataType.CCI_U_TYPE_VARBIT; - case 'set': - return this.CUBRIDDataType.CCI_U_TYPE_SET; - case 'multiset': - return this.CUBRIDDataType.CCI_U_TYPE_MULTISET; - case 'sequence': - return this.CUBRIDDataType.CCI_U_TYPE_SEQUENCE; - case 'blob': - return this.CUBRIDDataType.CCI_U_TYPE_BLOB; - case 'clob': - return this.CUBRIDDataType.CCI_U_TYPE_CLOB; - case 'resultset': - return this.CUBRIDDataType.CCI_U_TYPE_RESULTSET; - default: - return this.CUBRIDDataType.CCI_U_TYPE_UNKNOWN; - } + type = type.toLowerCase(); + switch (type) { + case 'char': + return this.CUBRIDDataType.CCI_U_TYPE_CHAR; + case 'varchar': + return this.CUBRIDDataType.CCI_U_TYPE_STRING; + case 'nchar': + return this.CUBRIDDataType.CCI_U_TYPE_NCHAR; + case 'string': + return this.CUBRIDDataType.CCI_U_TYPE_STRING; + case 'varnchar': + return this.CUBRIDDataType.CCI_U_TYPE_VARNCHAR; + case 'short': + return this.CUBRIDDataType.CCI_U_TYPE_SHORT; + case 'int': + return this.CUBRIDDataType.CCI_U_TYPE_INT; + case 'bigint': + return this.CUBRIDDataType.CCI_U_TYPE_BIGINT; + case 'float': + return this.CUBRIDDataType.CCI_U_TYPE_FLOAT; + case 'double': + return this.CUBRIDDataType.CCI_U_TYPE_DOUBLE; + case 'monetary': + return this.CUBRIDDataType.CCI_U_TYPE_MONETARY; + case 'numeric': + return this.CUBRIDDataType.CCI_U_TYPE_NUMERIC; + case 'date': + return this.CUBRIDDataType.CCI_U_TYPE_DATE; + case 'time': + return this.CUBRIDDataType.CCI_U_TYPE_TIME; + case 'datetime': + return this.CUBRIDDataType.CCI_U_TYPE_DATETIME; + case 'timestamp': + return this.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP; + case 'object': + return this.CUBRIDDataType.CCI_U_TYPE_OBJECT; + case 'bit': + return this.CUBRIDDataType.CCI_U_TYPE_BIT; + case 'varbit': + return this.CUBRIDDataType.CCI_U_TYPE_VARBIT; + case 'set': + return this.CUBRIDDataType.CCI_U_TYPE_SET; + case 'multiset': + return this.CUBRIDDataType.CCI_U_TYPE_MULTISET; + case 'sequence': + return this.CUBRIDDataType.CCI_U_TYPE_SEQUENCE; + case 'blob': + return this.CUBRIDDataType.CCI_U_TYPE_BLOB; + case 'clob': + return this.CUBRIDDataType.CCI_U_TYPE_CLOB; + case 'resultset': + return this.CUBRIDDataType.CCI_U_TYPE_RESULTSET; + default: + return this.CUBRIDDataType.CCI_U_TYPE_UNKNOWN; + } }; /** * Define CUBRID Schema type constants */ exports.CUBRIDSchemaType = { - CCI_SCH_CLASS : 1, - CCI_SCH_VCLASS : 2, - CCI_SCH_QUERY_SPEC : 3, - CCI_SCH_ATTRIBUTE : 4, - CCI_SCH_CLASS_ATTRIBUTE : 5, - CCI_SCH_METHOD : 6, - CCI_SCH_CLASS_METHOD : 7, - CCI_SCH_METHOD_FILE : 8, - CCI_SCH_SUPERCLASS : 9, - CCI_SCH_SUBCLASS : 10, - CCI_SCH_CONSTRAIT : 11, - CCI_SCH_TRIGGER : 12, - CCI_SCH_CLASS_PRIVILEGE : 13, - CCI_SCH_ATTR_PRIVILEGE : 14, - CCI_SCH_DIRECT_SUPER_CLASS : 15, - CCI_SCH_PRIMARY_KEY : 16, - CCI_SCH_IMPORTED_KEYS : 17, - CCI_SCH_EXPORTED_KEYS : 18, - CCI_SCH_CROSS_REFERENCE : 19 + CCI_SCH_CLASS : 1, + CCI_SCH_VCLASS : 2, + CCI_SCH_QUERY_SPEC : 3, + CCI_SCH_ATTRIBUTE : 4, + CCI_SCH_CLASS_ATTRIBUTE : 5, + CCI_SCH_METHOD : 6, + CCI_SCH_CLASS_METHOD : 7, + CCI_SCH_METHOD_FILE : 8, + CCI_SCH_SUPERCLASS : 9, + CCI_SCH_SUBCLASS : 10, + CCI_SCH_CONSTRAIT : 11, + CCI_SCH_TRIGGER : 12, + CCI_SCH_CLASS_PRIVILEGE : 13, + CCI_SCH_ATTR_PRIVILEGE : 14, + CCI_SCH_DIRECT_SUPER_CLASS : 15, + CCI_SCH_PRIMARY_KEY : 16, + CCI_SCH_IMPORTED_KEYS : 17, + CCI_SCH_EXPORTED_KEYS : 18, + CCI_SCH_CROSS_REFERENCE : 19 }; /** * Define CUBRID Prepare statement constants */ exports.CCIPrepareOption = { - CCI_PREPARE_NORMAL : 0x00, - CCI_PREPARE_INCLUDE_OID : 0x01, - CCI_PREPARE_UPDATABLE : 0x02, - CCI_PREPARE_QUERY_INFO : 0x04, - CCI_PREPARE_HOLDABLE : 0x08, - CCI_PREPARE_CALL : 0x40 + CCI_PREPARE_NORMAL : 0x00, + CCI_PREPARE_INCLUDE_OID : 0x01, + CCI_PREPARE_UPDATABLE : 0x02, + CCI_PREPARE_QUERY_INFO : 0x04, + CCI_PREPARE_HOLDABLE : 0x08, + CCI_PREPARE_CALL : 0x40 }; /** * Define CUBRID OID commands constants */ exports.OidCommand = { - DROP_BY_OID : 1, - IS_INSTANCE : 2, - GET_READ_LOCK_BY_OID : 3, - GET_WRITE_LOCK_BY_OID : 4, - GET_CLASS_NAME_BY_OID : 5 + DROP_BY_OID : 1, + IS_INSTANCE : 2, + GET_READ_LOCK_BY_OID : 3, + GET_WRITE_LOCK_BY_OID : 4, + GET_CLASS_NAME_BY_OID : 5 }; /** * Define CUBRID Transaction type constants */ exports.CCITransactionType = { - CCI_TRAN_COMMIT : 1, - CCI_TRAN_ROLLBACK : 2 + CCI_TRAN_COMMIT : 1, + CCI_TRAN_ROLLBACK : 2 }; /** * Define CUBRID Database parameters constants */ exports.CCIDbParam = { - CCI_PARAM_ISOLATION_LEVEL : 1, - CCI_PARAM_LOCK_TIMEOUT : 2, - CCI_PARAM_MAX_STRING_LENGTH : 3, - CCI_PARAM_AUTO_COMMIT : 4 + CCI_PARAM_ISOLATION_LEVEL : 1, + CCI_PARAM_LOCK_TIMEOUT : 2, + CCI_PARAM_MAX_STRING_LENGTH : 3, + CCI_PARAM_AUTO_COMMIT : 4 }; /** * Define CUBRID Collection-related commands constants */ exports.CUBRIDCollectionCommand = { - GET_COLLECTION_VALUE : 1, - GET_SIZE_OF_COLLECTION : 2, - DROP_ELEMENT_IN_SET : 3, - ADD_ELEMENT_TO_SET : 4, - DROP_ELEMENT_IN_SEQUENCE : 5, - INSERT_ELEMENT_INTO_SEQUENCE : 6, - PUT_ELEMENT_ON_SEQUENCE : 7 + GET_COLLECTION_VALUE : 1, + GET_SIZE_OF_COLLECTION : 2, + DROP_ELEMENT_IN_SET : 3, + ADD_ELEMENT_TO_SET : 4, + DROP_ELEMENT_IN_SEQUENCE : 5, + INSERT_ELEMENT_INTO_SEQUENCE : 6, + PUT_ELEMENT_ON_SEQUENCE : 7 }; /** * Define CUBRID Connection status constants */ exports.ConnectionStatus = { - CON_STATUS_OUT_TRAN : 0, - CON_STATUS_IN_TRAN : 1, - CON_STATUS_CLOSE : 2, - CON_STATUS_CLOSE_AND_CONNECT : 3 + CON_STATUS_OUT_TRAN : 0, + CON_STATUS_IN_TRAN : 1, + CON_STATUS_CLOSE : 2, + CON_STATUS_CLOSE_AND_CONNECT : 3 }; /** * Define CUBRID Cursor position constants */ exports.CCICursorPosition = { - CCI_CURSOR_FIRST : 0, - CCI_CURSOR_CURRENT : 1, - CCI_CURSOR_LAST : 2 + CCI_CURSOR_FIRST : 0, + CCI_CURSOR_CURRENT : 1, + CCI_CURSOR_LAST : 2 }; /** * Define CUBRID Statement execution type constants */ exports.StmtType = { - NORMAL : 0, - GET_BY_OID : 1, - GET_SCHEMA_INFO : 2, - GET_AUTOINCREMENT_KEYS : 3 + NORMAL : 0, + GET_BY_OID : 1, + GET_SCHEMA_INFO : 2, + GET_AUTOINCREMENT_KEYS : 3 }; /** * Define CUBRID Query execution constants */ exports.QueryExecutionMode = { - SYNC_EXEC : 0, - ASYNC_EXEC : 1 + SYNC_EXEC : 0, + ASYNC_EXEC : 1 }; /** * Define CUBRID Statement execution constants */ exports.CCIExecutionOption = { - CCI_EXEC_NORMAL : 0x00, - CCI_EXEC_ASYNC : 0x01, - CCI_EXEC_QUERY_ALL : 0x02, - CCI_EXEC_QUERY_INFO : 0x04, - CCI_EXEC_ONLY_QUERY_PLAN : 0x08, - CCI_EXEC_THREAD : 0x10, - CCI_EXEC_HOLDABLE : 0x20 + CCI_EXEC_NORMAL : 0x00, + CCI_EXEC_ASYNC : 0x01, + CCI_EXEC_QUERY_ALL : 0x02, + CCI_EXEC_QUERY_INFO : 0x04, + CCI_EXEC_ONLY_QUERY_PLAN : 0x08, + CCI_EXEC_THREAD : 0x10, + CCI_EXEC_HOLDABLE : 0x20 }; /** * Define CUBRID Schema pattern match flags */ exports.CCISchemaPatternMatchFlag = { - CCI_CLASS_NAME_PATTERN_MATCH : 0X01, - CCI_ATTR_NAME_PATTERN_MATCH : 0X02 + CCI_CLASS_NAME_PATTERN_MATCH : 0X01, + CCI_ATTR_NAME_PATTERN_MATCH : 0X02 }; /** * Define CUBRID LOB types */ exports.CCILOBType = { - CCI_LOB_TYPE_BLOB : 33, - CCI_LOB_TYPE_CLOB : 34 + CCI_LOB_TYPE_BLOB : 33, + CCI_LOB_TYPE_CLOB : 34 }; diff --git a/src/constants/DriverVersion.js b/src/constants/DriverVersion.js index cce9fa2..e624a27 100644 --- a/src/constants/DriverVersion.js +++ b/src/constants/DriverVersion.js @@ -3,7 +3,7 @@ * The protocol version is validated by the CUBRID broker, * to assess the compatibility level with the CUBRID engine. */ -var CAS_PROTO_INDICATOR = 0x40; -var CAS_PROTOCOL_VERSION = 0x01; +const CAS_PROTO_INDICATOR = 0x40; +const CAS_PROTOCOL_VERSION = 0x01; exports.CAS_VER = CAS_PROTO_INDICATOR | CAS_PROTOCOL_VERSION; From 941122eaab577f2297ff5c4fbb8516bb38938adf Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 18:39:54 +0900 Subject: [PATCH 05/10] Ref #14: Indent using spaces instead of tabs. --- src/packets/ExecuteQueryPacket.js | 602 +++++++++++++++--------------- 1 file changed, 301 insertions(+), 301 deletions(-) diff --git a/src/packets/ExecuteQueryPacket.js b/src/packets/ExecuteQueryPacket.js index 0c5a75a..43149e9 100644 --- a/src/packets/ExecuteQueryPacket.js +++ b/src/packets/ExecuteQueryPacket.js @@ -1,9 +1,9 @@ var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - CAS = require('../constants/CASConstants'), - ErrorMessages = require('../constants/ErrorMessages'), - ColumnMetaData = require('../resultset/ColumnMetaData'), - ResultInfo = require('../resultset/ResultInfo'); + Helpers = require('../utils/Helpers'), + CAS = require('../constants/CASConstants'), + ErrorMessages = require('../constants/ErrorMessages'), + ColumnMetaData = require('../resultset/ColumnMetaData'), + ResultInfo = require('../resultset/ResultInfo'); module.exports = ExecuteQueryPacket; @@ -13,31 +13,31 @@ module.exports = ExecuteQueryPacket; * @constructor */ function ExecuteQueryPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.sql = options.sql; - this.autoCommit = options.autoCommitMode; - this.dbVersion = options.dbVersion; - - this.resultSet = ''; // Resultset of the query - this.resultCacheLifetime = 0; // Cache lifetime - this.statementType = null; // Statement type - this.bindCount = 0; // Bind count - this.isUpdatable = false; // Is updatable - this.totalTupleCount = 0; // Total nomber of tuples - this.cache_reusable = 0; // Cache reusable - this.resultCount = 0; // Number of results - this.columnCount = 0; // Number of columns - this.infoArray = new ColumnMetaData(); // Column meta data - this.resultInfos = new ResultInfo(); // Result info - this.queryHandle = 0; // Query handle - this.currentTupleCount = 0; // Current number of returned tuples - this.tupleCount = 0; // Number of tuples - - this.responseCode = 0; // Response code - this.errorCode = 0; // Error code - this.errorMsg = ''; // Error message + options = options || {}; + + this.casInfo = options.casInfo; + this.sql = options.sql; + this.autoCommit = options.autoCommitMode; + this.dbVersion = options.dbVersion; + + this.resultSet = ''; // Resultset of the query + this.resultCacheLifetime = 0; // Cache lifetime + this.statementType = null; // Statement type + this.bindCount = 0; // Bind count + this.isUpdatable = false; // Is updatable + this.totalTupleCount = 0; // Total nomber of tuples + this.cache_reusable = 0; // Cache reusable + this.resultCount = 0; // Number of results + this.columnCount = 0; // Number of columns + this.infoArray = new ColumnMetaData(); // Column meta data + this.resultInfos = new ResultInfo(); // Result info + this.queryHandle = 0; // Query handle + this.currentTupleCount = 0; // Current number of returned tuples + this.tupleCount = 0; // Number of tuples + + this.responseCode = 0; // Response code + this.errorCode = 0; // Error code + this.errorMsg = ''; // Error message } /** @@ -45,75 +45,75 @@ function ExecuteQueryPacket(options) { * @param writer */ ExecuteQueryPacket.prototype.write = function (writer) { - // Set the length of this request. Don't include the first eight bytes - // (`DATA_LENGTH_SIZEOF` and `CAS_INFO_SIZE`) because they are not - // part of the query data. - writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - // `this.casInfo` is already a buffer. Just write them as bytes. - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); - - // Then tell which CAS function should CAS execute. - // TODO: Shouldn't CAS function by an integer of four bytes? - // Why write only one byte? - writer._writeByte(this.dbVersion.startsWith('9.0.0') ? CAS.CASFunctionCode900.CAS_FC_PREPARE_AND_EXECUTE : CAS.CASFunctionCode.CAS_FC_PREPARE_AND_EXECUTE); - - // The length of the next piece of data, i.e. CAS function. - // The length of any piece of data should be represented by an - // integer value. - writer._writeInt(DATA_TYPES.INT_SIZEOF); - - // Next, write how many arguments (integer value, thus 4 bytes) - // should the CAS function accept. `CAS_FC_PREPARE_AND_EXECUTE` - // accepts `3` arguments. - writer._writeInt(3); - - // Now goes the SQL query. - writer._writeNullTerminatedString(this.sql); - - // The size of the next piece, also in 4-byte integer. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - // The type of prepare CAS has to execute. - writer._writeByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); - - // The size of the next piece. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - // Autocommit mode. - writer._writeByte(this.autoCommit ? 1 : 0); - - // Execute info. - - // The size of the next piece. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - // Execute flag. - writer._writeByte(CAS.CCIExecutionOption.CCI_EXEC_QUERY_ALL); - - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); - // `max_col_size`: The maximum length of a column in bytes to be fetched - // when it is a string data type. If this value is 0, full length is fetched. - writer._writeInt(0); - - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); - // Max row size. - writer._writeInt(0); - - // NULL. - writer._writeInt(0); - - // Write cache time - writer._writeInt(2 * DATA_TYPES.INT_SIZEOF); - // Seconds. - writer._writeInt(0); - // Milliseconds. - writer._writeInt(0); - - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); - // Query timeout. - writer._writeInt(0); - - return writer; + // Set the length of this request. Don't include the first eight bytes + // (`DATA_LENGTH_SIZEOF` and `CAS_INFO_SIZE`) because they are not + // part of the query data. + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + // `this.casInfo` is already a buffer. Just write them as bytes. + writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + + // Then tell which CAS function should CAS execute. + // TODO: Shouldn't CAS function by an integer of four bytes? + // Why write only one byte? + writer._writeByte(this.dbVersion.startsWith('9.0.0') ? CAS.CASFunctionCode900.CAS_FC_PREPARE_AND_EXECUTE : CAS.CASFunctionCode.CAS_FC_PREPARE_AND_EXECUTE); + + // The length of the next piece of data, i.e. CAS function. + // The length of any piece of data should be represented by an + // integer value. + writer._writeInt(DATA_TYPES.INT_SIZEOF); + + // Next, write how many arguments (integer value, thus 4 bytes) + // should the CAS function accept. `CAS_FC_PREPARE_AND_EXECUTE` + // accepts `3` arguments. + writer._writeInt(3); + + // Now goes the SQL query. + writer._writeNullTerminatedString(this.sql); + + // The size of the next piece, also in 4-byte integer. + writer._writeInt(DATA_TYPES.BYTE_SIZEOF); + // The type of prepare CAS has to execute. + writer._writeByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); + + // The size of the next piece. + writer._writeInt(DATA_TYPES.BYTE_SIZEOF); + // Autocommit mode. + writer._writeByte(this.autoCommit ? 1 : 0); + + // Execute info. + + // The size of the next piece. + writer._writeInt(DATA_TYPES.BYTE_SIZEOF); + // Execute flag. + writer._writeByte(CAS.CCIExecutionOption.CCI_EXEC_QUERY_ALL); + + // The size of the next piece. + writer._writeInt(DATA_TYPES.INT_SIZEOF); + // `max_col_size`: The maximum length of a column in bytes to be fetched + // when it is a string data type. If this value is 0, full length is fetched. + writer._writeInt(0); + + // The size of the next piece. + writer._writeInt(DATA_TYPES.INT_SIZEOF); + // Max row size. + writer._writeInt(0); + + // NULL. + writer._writeInt(0); + + // Write cache time + writer._writeInt(2 * DATA_TYPES.INT_SIZEOF); + // Seconds. + writer._writeInt(0); + // Milliseconds. + writer._writeInt(0); + + // The size of the next piece. + writer._writeInt(DATA_TYPES.INT_SIZEOF); + // Query timeout. + writer._writeInt(0); + + return writer; }; /** @@ -121,89 +121,89 @@ ExecuteQueryPacket.prototype.write = function (writer) { * @param parser */ ExecuteQueryPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); - - this.responseCode = parser._parseInt(); - - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.queryHandle = this.responseCode; - this.resultCacheLifetime = parser._parseInt(); // Cache lifetime - this.statementType = parser._parseByte(); // Statement type - this.bindCount = parser._parseInt(); // Bind count - this.isUpdatable = (parser._parseByte() === 0); // Is updatable? - this.columnCount = parser._parseInt(); // Query result columns count - this.infoArray = []; - - for (i = 0; i < this.columnCount; i++) { - var info = new ColumnMetaData(); - info.ColumnType = parser._parseByte(); // Column type - info.scale = parser._parseShort(); // Scale - info.precision = parser._parseInt(); // Precision - var len = parser._parseInt(); - info.Name = parser._parseNullTerminatedString(len); // Column name - len = parser._parseInt(); - info.RealName = parser._parseNullTerminatedString(len); // Column real name - len = parser._parseInt(); - info.TableName = parser._parseNullTerminatedString(len); // Table name - info.IsNullable = (parser._parseByte() === 1); // Is nullable? - len = parser._parseInt(); - info.DafaultValue = parser._parseNullTerminatedString(len); // Default value - info.IsAutoIncrement = (parser._parseByte() === 1); // Is auto increment? - info.IsUniqueKey = (parser._parseByte() === 1); // Is unuque key? - info.IsPrimaryKey = (parser._parseByte() === 1); // Is primary key? - info.IsReverseIndex = (parser._parseByte() === 1); // Reserve index? - info.IsReverseUnique = (parser._parseByte() === 1); // Reserve unique? - info.IsForeignKey = (parser._parseByte() === 1); // Is foreign key? - info.IsShared = (parser._parseByte() === 1); // Shared? - this.infoArray[i] = info; - } - - this.totalTupleCount = parser._parseInt(); // Tuples count - this.cache_reusable = parser._parseByte(); // Cache reusable - this.resultCount = parser._parseInt(); // Result count - // Read result info - for (i = 0; i < this.resultCount; i++) { - var resultInfo = new ResultInfo(); - resultInfo.StmtType = parser._parseByte(); // Statement type - resultInfo.ResultCount = parser._parseInt(); // Result count - resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID - resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds - resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds - this.resultInfos[i] = resultInfo; - } - } - - if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { - var fetchCode = parser._parseInt(); // Fetch code - this.tupleCount = parser._parseInt(); // Tuple count - var columnNames = new Array(this.columnCount); - var columnDataTypes = new Array(this.columnCount); - - for (var i = 0; i < this.columnCount; i++) { - columnNames[i] = this.infoArray[i].Name; - columnDataTypes[i] = CAS.getCUBRIDDataTypeName(this.infoArray[i].ColumnType); - } - - var columnValues = this._getData(parser, this.tupleCount); - - this.resultSet = JSON.stringify({ - ColumnNames : columnNames, - ColumnDataTypes : columnDataTypes, - RowsCount : this.totalTupleCount, - ColumnValues : columnValues - }); - } - - return this; + var responseLength = parser._parseInt(); + + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + + this.responseCode = parser._parseInt(); + + if (this.responseCode < 0) { + this.errorCode = parser._parseInt(); + this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); + + if (this.errorMsg.length === 0) { + this.errorMsg = Helpers._resolveErrorCode(this.errorCode); + } + } else { + this.queryHandle = this.responseCode; + this.resultCacheLifetime = parser._parseInt(); // Cache lifetime + this.statementType = parser._parseByte(); // Statement type + this.bindCount = parser._parseInt(); // Bind count + this.isUpdatable = (parser._parseByte() === 0); // Is updatable? + this.columnCount = parser._parseInt(); // Query result columns count + this.infoArray = []; + + for (i = 0; i < this.columnCount; i++) { + var info = new ColumnMetaData(); + info.ColumnType = parser._parseByte(); // Column type + info.scale = parser._parseShort(); // Scale + info.precision = parser._parseInt(); // Precision + var len = parser._parseInt(); + info.Name = parser._parseNullTerminatedString(len); // Column name + len = parser._parseInt(); + info.RealName = parser._parseNullTerminatedString(len); // Column real name + len = parser._parseInt(); + info.TableName = parser._parseNullTerminatedString(len); // Table name + info.IsNullable = (parser._parseByte() === 1); // Is nullable? + len = parser._parseInt(); + info.DafaultValue = parser._parseNullTerminatedString(len); // Default value + info.IsAutoIncrement = (parser._parseByte() === 1); // Is auto increment? + info.IsUniqueKey = (parser._parseByte() === 1); // Is unuque key? + info.IsPrimaryKey = (parser._parseByte() === 1); // Is primary key? + info.IsReverseIndex = (parser._parseByte() === 1); // Reserve index? + info.IsReverseUnique = (parser._parseByte() === 1); // Reserve unique? + info.IsForeignKey = (parser._parseByte() === 1); // Is foreign key? + info.IsShared = (parser._parseByte() === 1); // Shared? + this.infoArray[i] = info; + } + + this.totalTupleCount = parser._parseInt(); // Tuples count + this.cache_reusable = parser._parseByte(); // Cache reusable + this.resultCount = parser._parseInt(); // Result count + // Read result info + for (i = 0; i < this.resultCount; i++) { + var resultInfo = new ResultInfo(); + resultInfo.StmtType = parser._parseByte(); // Statement type + resultInfo.ResultCount = parser._parseInt(); // Result count + resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID + resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds + resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds + this.resultInfos[i] = resultInfo; + } + } + + if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { + var fetchCode = parser._parseInt(); // Fetch code + this.tupleCount = parser._parseInt(); // Tuple count + var columnNames = new Array(this.columnCount); + var columnDataTypes = new Array(this.columnCount); + + for (var i = 0; i < this.columnCount; i++) { + columnNames[i] = this.infoArray[i].Name; + columnDataTypes[i] = CAS.getCUBRIDDataTypeName(this.infoArray[i].ColumnType); + } + + var columnValues = this._getData(parser, this.tupleCount); + + this.resultSet = JSON.stringify({ + ColumnNames : columnNames, + ColumnDataTypes : columnDataTypes, + RowsCount : this.totalTupleCount, + ColumnValues : columnValues + }); + } + + return this; }; /** @@ -212,43 +212,43 @@ ExecuteQueryPacket.prototype.parse = function (parser) { * @param tupleCount */ ExecuteQueryPacket.prototype._getData = function (parser, tupleCount) { - var columnValues = new Array(tupleCount); - - // Loop through rows. - for (var i = 0; i < tupleCount; ++i) { - var index = parser._parseInt(); // Column index - var Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID - - columnValues[i] = new Array(this.columnCount); - - for (var j = 0; j < this.columnCount; ++j) { - var size = parser._parseInt(); // Value size - var val; - - if (size <= 0) { - val = null; - } else { - var type = CAS.CUBRIDDataType.CCI_U_TYPE_NULL; - - if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP || - this.infoArray[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { - type = parser._parseByte(); // Column data type - --size; - } else { - type = this.infoArray[j].ColumnType; - } - - val = this._readValue(j, type, size, parser); // Read value - - columnValues[i][j] = val; - } - } - } - this.currentTupleCount += tupleCount; - - return columnValues; + var columnValues = new Array(tupleCount); + + // Loop through rows. + for (var i = 0; i < tupleCount; ++i) { + var index = parser._parseInt(); // Column index + var Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID + + columnValues[i] = new Array(this.columnCount); + + for (var j = 0; j < this.columnCount; ++j) { + var size = parser._parseInt(); // Value size + var val; + + if (size <= 0) { + val = null; + } else { + var type = CAS.CUBRIDDataType.CCI_U_TYPE_NULL; + + if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL || + this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE || + this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP || + this.infoArray[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { + type = parser._parseByte(); // Column data type + --size; + } else { + type = this.infoArray[j].ColumnType; + } + + val = this._readValue(j, type, size, parser); // Read value + + columnValues[i][j] = val; + } + } + } + this.currentTupleCount += tupleCount; + + return columnValues; }; /** @@ -259,106 +259,106 @@ ExecuteQueryPacket.prototype._getData = function (parser, tupleCount) { * @param parser */ ExecuteQueryPacket.prototype._readValue = function (index, type, size, parser) { - switch (type) { - case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_ENUM: - return parser._parseNullTerminatedString(size); + switch (type) { + case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_ENUM: + return parser._parseNullTerminatedString(size); - case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: - return parser._parseShort(); + case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: + return parser._parseShort(); - case CAS.CUBRIDDataType.CCI_U_TYPE_INT: - return parser._parseInt(); + case CAS.CUBRIDDataType.CCI_U_TYPE_INT: + return parser._parseInt(); - case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: - return parser._parseLong(); + case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: + return parser._parseLong(); - case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: - return parser._parseFloat(); + case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: + return parser._parseFloat(); - case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: - case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: - return parser._parseDouble(); + case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: + case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: + return parser._parseDouble(); - case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: - return parser._parseNumeric(size); + case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: + return parser._parseNumeric(size); - case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: - return parser._parseDate(); + case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: + return parser._parseDate(); - case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: - return parser._parseTime(); + case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: + return parser._parseTime(); - case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: - return parser._parseDateTime(); + case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: + return parser._parseDateTime(); - case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: - return parser._parseTimeStamp(); + case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: + return parser._parseTimeStamp(); - case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: - return parser._parseObject(); + case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: + return parser._parseObject(); - case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: - return parser._parseBytes(size); + case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: + return parser._parseBytes(size); - case CAS.CUBRIDDataType.CCI_U_TYPE_SET: - case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: - case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: - return parser._parseSequence(); + case CAS.CUBRIDDataType.CCI_U_TYPE_SET: + case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: + case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: + return parser._parseSequence(); - case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: - return parser._parseBlob(size); + case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: + return parser._parseBlob(size); - case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: - return parser._parseClob(size); + case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: + return parser._parseClob(size); - case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: - return parser._parseResultSet(); + case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: + return parser._parseResultSet(); - default: - return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); - } + default: + return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); + } }; ExecuteQueryPacket.prototype.getBufferLength = function () { - var bufferLength = // Total length of the request without itself and CAS info. - DATA_TYPES.DATA_LENGTH_SIZEOF + - // CAS info. - DATA_TYPES.CAS_INFO_SIZE + - // CAS function. - DATA_TYPES.BYTE_SIZEOF + - // TODO: what are these four bytes for? - DATA_TYPES.INT_SIZEOF + - // CAS arguments. - DATA_TYPES.INT_SIZEOF + - // TODO: These four bytes are absent below. Why? - DATA_TYPES.INT_SIZEOF + - // A NULL terminated SQL query string. - Buffer.byteLength(this.sql) + 1 + - // The length of the next part. - DATA_TYPES.INT_SIZEOF + - // The type of CCI prepare. - DATA_TYPES.BYTE_SIZEOF + - // The length of the next part. - DATA_TYPES.INT_SIZEOF + - // Autocommit mode - DATA_TYPES.BYTE_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.BYTE_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF; - - return bufferLength; + var bufferLength = // Total length of the request without itself and CAS info. + DATA_TYPES.DATA_LENGTH_SIZEOF + + // CAS info. + DATA_TYPES.CAS_INFO_SIZE + + // CAS function. + DATA_TYPES.BYTE_SIZEOF + + // TODO: what are these four bytes for? + DATA_TYPES.INT_SIZEOF + + // CAS arguments. + DATA_TYPES.INT_SIZEOF + + // TODO: These four bytes are absent below. Why? + DATA_TYPES.INT_SIZEOF + + // A NULL terminated SQL query string. + Buffer.byteLength(this.sql) + 1 + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // The type of CCI prepare. + DATA_TYPES.BYTE_SIZEOF + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // Autocommit mode + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF; + + return bufferLength; }; From 4405f1d50a1a25cdae2c9187d2b079cb5e2cfb93 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Sun, 11 Sep 2016 22:46:23 +0900 Subject: [PATCH 06/10] Ref #14: Indent using spaces instead of tabs. --- src/packets/BatchExecuteNoQueryPacket.js | 38 ++++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/packets/BatchExecuteNoQueryPacket.js b/src/packets/BatchExecuteNoQueryPacket.js index cfa74df..525016e 100644 --- a/src/packets/BatchExecuteNoQueryPacket.js +++ b/src/packets/BatchExecuteNoQueryPacket.js @@ -1,6 +1,6 @@ var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - CAS = require('../constants/CASConstants'); + Helpers = require('../utils/Helpers'), + CAS = require('../constants/CASConstants'); module.exports = BatchExecuteNoQueryPacket; @@ -29,7 +29,7 @@ function BatchExecuteNoQueryPacket(options) { * @param writer */ BatchExecuteNoQueryPacket.prototype.write = function (writer) { - writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_EXECUTE_BATCH); writer._writeInt(DATA_TYPES.BYTE_SIZEOF); @@ -97,20 +97,20 @@ BatchExecuteNoQueryPacket.prototype.parse = function (parser) { }; BatchExecuteNoQueryPacket.prototype.getBufferLength = function () { - var bufferLength = - DATA_TYPES.DATA_LENGTH_SIZEOF + - DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + - DATA_TYPES.INT_SIZEOF + - DATA_TYPES.BYTE_SIZEOF + - // The length of all queries. - DATA_TYPES.INT_SIZEOF * this.SQLs.length + - // The number of NULL terminating characters: one for each query. - this.SQLs.length; - - for (var i = 0; i < this.SQLs.length; ++i) { - bufferLength += Buffer.byteLength(this.SQLs[i]); - } - - return bufferLength; + var bufferLength = + DATA_TYPES.DATA_LENGTH_SIZEOF + + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + + // The length of all queries. + DATA_TYPES.INT_SIZEOF * this.SQLs.length + + // The number of NULL terminating characters: one for each query. + this.SQLs.length; + + for (var i = 0; i < this.SQLs.length; ++i) { + bufferLength += Buffer.byteLength(this.SQLs[i]); + } + + return bufferLength; }; From 99dde5f5bff5511bde69f71bad1f70ee424081c1 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Wed, 5 Oct 2016 14:06:25 +0900 Subject: [PATCH 07/10] #49 Implement Protocol v6 of CUBRID. New Features #49 Implement Protocol v6 of CUBRID. #13 Add support for alternative hosts to support client side HA. #12 #11 Provide a configurable logging function. #18 Added ENUM data type support via the old protocol. #14 Support promises. Refactoring #48 Update README. #14 Indent using spaces instead of tabs. #14 Reduce the use of self where this can be used directly. #14 Extract constants and other useless variables from the connection object. --- .eslintignore | 1 + .eslintrc.yml | 5 + .gitignore | 1 + .travis.yml | 74 +- CHANGELOG.md | 4 - CUBRID version supported.txt | 2 - Dockerfile | 4 +- README.md | 1672 +++++---- demo/E2E/E2E_01.js | 67 - demo/E2E/E2E_02.js | 60 - demo/E2E/E2E_03.js | 81 - demo/Server/DemoServer.js | 79 - demo/Web site (1) - Basic/app.js | 61 - demo/Web site (1) - Basic/db_helper.js | 100 - demo/Web site (1) - Basic/favicon.ico | Bin 5430 -> 0 bytes demo/Web site (1) - Basic/index.html | 187 -- demo/Web site (1) - Basic/readme.txt | 14 - demo/Web site (1) - Basic/setup.sql | 13 - demo/Web site (2) - Paging/app.js | 95 - demo/Web site (2) - Paging/cubrid.png | Bin 1149 -> 0 bytes demo/Web site (2) - Paging/db_helper.js | 207 -- demo/Web site (2) - Paging/favicon.ico | Bin 5430 -> 0 bytes demo/Web site (2) - Paging/index.html | 332 -- demo/Web site (2) - Paging/readme.txt | 9 - demo/Web site (3) - Filter/app.js | 112 - demo/Web site (3) - Filter/cubrid.png | Bin 1149 -> 0 bytes demo/Web site (3) - Filter/db_helper.js | 216 -- demo/Web site (3) - Filter/favicon.ico | Bin 5430 -> 0 bytes demo/Web site (3) - Filter/index.html | 347 -- demo/Web site (3) - Filter/readme.txt | 9 - demo/Web site (3) - Filter/site.css | 23 - demo/Web site (4) - Events/app.js | 122 - demo/Web site (4) - Events/cubrid.png | Bin 1149 -> 0 bytes demo/Web site (4) - Events/db_helper.js | 247 -- demo/Web site (4) - Events/favicon.ico | Bin 5430 -> 0 bytes demo/Web site (4) - Events/index.html | 367 -- demo/Web site (4) - Events/readme.txt | 9 - demo/Web site (4) - Events/site.css | 24 - demo/Web site (5) - Database/app.js | 75 - demo/Web site (5) - Database/cubrid.png | Bin 1149 -> 0 bytes demo/Web site (5) - Database/db_helper.js | 45 - demo/Web site (5) - Database/favicon.ico | Bin 5430 -> 0 bytes demo/Web site (5) - Database/index.html | 133 - demo/Web site (5) - Database/readme.txt | 9 - demo/Web site (5) - Database/site.css | 24 - index.js | 31 +- package.json | 27 +- src/CUBRIDConnection.js | 2989 +++++++++-------- src/ConsoleLogger.js | 31 + src/NoopLogger.js | 12 + src/config.js | 6 - src/constants/CASConstants.js | 40 + src/constants/DriverVersion.js | 9 - src/constants/ErrorMessages.js | 99 +- src/cubrid.js | 44 - src/packets/BatchExecuteNoQueryPacket.js | 126 +- src/packets/ClientInfoExchangePacket.js | 30 +- src/packets/CloseDatabasePacket.js | 29 +- src/packets/CloseQueryPacket.js | 90 +- src/packets/CommitPacket.js | 32 +- src/packets/ExecuteQueryPacket.js | 329 +- src/packets/FetchPacket.js | 60 +- src/packets/GetDbParameterPacket.js | 24 +- src/packets/GetEngineVersionPacket.js | 24 +- src/packets/GetSchemaPacket.js | 584 ++-- src/packets/LOBNewPacket.js | 65 +- src/packets/LOBReadPacket.js | 74 +- src/packets/LOBWritePacket.js | 74 +- src/packets/OpenDatabasePacket.js | 75 +- src/packets/PacketReader.js | 289 +- src/packets/PacketWriter.js | 325 +- .../PrepareExecuteOldProtocolPacket.js | 624 ---- src/packets/PrepareExecutePacket.js | 620 ++++ src/packets/RollbackPacket.js | 26 +- src/packets/SetAutoCommitModePacket.js | 32 +- src/packets/SetDbParameterPacket.js | 30 +- src/query/Query.js | 20 +- src/query/Queue.js | 32 +- src/resultset/ColumnMetaData.js | 5 +- src/resultset/Result2Array.js | 148 - src/utils/ActionQueue.js | 83 - src/utils/Cache.js | 58 - src/utils/Helpers.js | 339 +- test/.DS_Store | Bin 0 -> 8196 bytes test/.eslintrc.yml | 8 + test/CUBRID.createConnection.js | 144 + test/CUBRIDConnection.batchExecuteNoQuery.js | 918 +++++ test/CUBRIDConnection.beginTransaction.js | 245 ++ test/CUBRIDConnection.close.js | 44 + test/CUBRIDConnection.closeQuery.js | 61 + test/CUBRIDConnection.commit.js | 75 + test/CUBRIDConnection.connect.js | 277 ++ test/CUBRIDConnection.end.js | 107 + test/CUBRIDConnection.execute.js | 541 +++ ...CUBRIDConnection.executeWithTypedParams.js | 589 ++++ test/CUBRIDConnection.fetch.js | 1145 +++++++ test/CUBRIDConnection.getConnectionTimeout.js | 19 + test/CUBRIDConnection.getDatabaseParameter.js | 47 + test/CUBRIDConnection.getEngineVersion.js | 71 + test/CUBRIDConnection.getSchema.js | 84 + test/CUBRIDConnection.lobRead.js | 535 +++ test/CUBRIDConnection.lobWrite.js | 975 ++++++ test/CUBRIDConnection.query.js | 2029 +++++++++++ test/CUBRIDConnection.queryAll.js | 224 ++ test/CUBRIDConnection.rollback.js | 257 ++ test/CUBRIDConnection.setAutoCommitMode.js | 193 ++ test/CUBRIDConnection.setConnectionTimeout.js | 46 + test/CUBRIDConnection.setDatabaseParameter.js | 41 + test/Helpers.js | 92 + .../packets/test_BatchExecuteNoQueryPacket.js | 46 - .../packets/test_ClientInfoExchangePacket.js | 25 - .../packets/test_CloseDatabasePacket.js | 45 - .../packets/test_CloseQueryPacket.js | 49 - test/old_tests/packets/test_CommitPacket.js | 47 - .../packets/test_ExecuteQueryPacket.js | 52 - test/old_tests/packets/test_FetchPacket.js | 66 - .../packets/test_GetDbParameterPacket.js | 43 - .../packets/test_GetEngineVersionPacket.js | 50 - .../old_tests/packets/test_GetSchemaPacket.js | 68 - test/old_tests/packets/test_LOBNewPacket.js | 52 - test/old_tests/packets/test_LOBReadPacket.js | 75 - test/old_tests/packets/test_LOBWritePacket.js | 77 - .../packets/test_OpenDatabasePacket.js | 44 - .../packets/test_PacketWriter_PacketReader.js | 301 -- .../test_PrepareExecuteOldProtocolPacket.js | 103 - test/old_tests/packets/test_RollbackPacket.js | 47 - .../packets/test_SetAutoCommitMode.js | 48 - .../packets/test_SetAutoCommitModePacket.js | 45 - .../packets/test_SetDbParameterPacket.js | 43 - test/old_tests/test_Async.js | 94 - test/old_tests/test_AutoCommitMode.js | 70 - test/old_tests/test_BadConnect.js | 17 - test/old_tests/test_BadPort.js | 18 - test/old_tests/test_BadSQLSyntax.js | 34 - test/old_tests/test_BasicBatchExecute.js | 45 - .../test_BasicBatchExecute_ImplicitConnect.js | 39 - test/old_tests/test_BasicConnect.js | 34 - test/old_tests/test_BasicEvents.js | 26 - test/old_tests/test_BasicEvents_Error.js | 29 - test/old_tests/test_BasicEvents_Error_2.js | 25 - test/old_tests/test_BasicExecute.js | 51 - test/old_tests/test_BasicExecute_2.js | 38 - test/old_tests/test_BasicExtendedSelect.js | 81 - .../test_BasicExtendedSelect_Sequence.js | 56 - test/old_tests/test_BasicMultiFetch.js | 100 - .../test_BasicMultiFetch_Sequence.js | 92 - .../test_BasicMultifetchOldProtocol.js | 101 - test/old_tests/test_BasicQueriesQueue.js | 52 - .../test_BasicQueriesQueue_ImplicitConnect.js | 52 - test/old_tests/test_BasicSelect.js | 51 - test/old_tests/test_BasicSelect_Cache.js | 66 - test/old_tests/test_BasicSelect_Events.js | 67 - .../test_BasicSelect_ImplicitConnect.js | 46 - .../test_Basic_QueriesQueue_Events.js | 63 - .../test_Basic_QueriesQueue_Events_Error.js | 28 - test/old_tests/test_BatchExecuteVariant.js | 51 - test/old_tests/test_BatchExecute_Error.js | 43 - test/old_tests/test_BigString.js | 69 - test/old_tests/test_Blob.js | 60 - test/old_tests/test_Blob_Insert.js | 75 - test/old_tests/test_Clob.js | 54 - test/old_tests/test_Clob_Insert.js | 69 - test/old_tests/test_CloseDefault.js | 48 - test/old_tests/test_ConcurrentFetch_Events.js | 80 - .../old_tests/test_ConcurrentSelect_Events.js | 76 - test/old_tests/test_Connect.js | 34 - test/old_tests/test_ConnectCollision.js | 35 - test/old_tests/test_ConnectTimeout.js | 20 - test/old_tests/test_Connect_Events.js | 31 - test/old_tests/test_Connect_Sequence.js | 31 - test/old_tests/test_ConnectionPool.js | 135 - test/old_tests/test_DataTypes.js | 111 - test/old_tests/test_DataTypesEvents.js | 107 - test/old_tests/test_Encoding_Korean.js | 53 - test/old_tests/test_Encoding_Russian.js | 53 - test/old_tests/test_ExecuteWithParams.js | 56 - test/old_tests/test_ExecuteWithTypedParams.js | 121 - test/old_tests/test_GetDbParameter.js | 40 - test/old_tests/test_GetDbParameterError.js | 34 - test/old_tests/test_GetDbParameter_Events.js | 65 - test/old_tests/test_Helpers.js | 70 - test/old_tests/test_IndexExports.js | 51 - test/old_tests/test_LastInsertID.js | 62 - test/old_tests/test_Named_Functions.js | 53 - test/old_tests/test_NodePool.js | 152 - test/old_tests/test_ObjectsArray.js | 51 - test/old_tests/test_ParallelQueries.js | 96 - test/old_tests/test_ParallelQueries_2.js | 92 - test/old_tests/test_ParallelQueries_3.js | 61 - test/old_tests/test_QueriesQueue.js | 119 - test/old_tests/test_QueriesQueue_Events.js | 69 - test/old_tests/test_QueriesQueue_Mixed.js | 62 - .../old_tests/test_QueriesQueue_MultiFetch.js | 171 - test/old_tests/test_QueryCollision.js | 62 - test/old_tests/test_QueryCollision_2.js | 65 - test/old_tests/test_QueryOldProtocol.js | 50 - test/old_tests/test_QueryWithParams.js | 49 - test/old_tests/test_QueryWithParams_2.js | 48 - test/old_tests/test_QueryWithTypedParams.js | 49 - test/old_tests/test_Rollback.js | 70 - test/old_tests/test_Schema.js | 66 - test/old_tests/test_SchemaAttribute.js | 58 - test/old_tests/test_SchemaClassPrivilege.js | 46 - test/old_tests/test_SchemaConstraint.js | 35 - test/old_tests/test_SchemaExportedKeys.js | 43 - test/old_tests/test_SchemaImportedKeys.js | 73 - test/old_tests/test_SchemaPrimaryKeys.js | 38 - test/old_tests/test_SchemaUsers.js | 42 - test/old_tests/test_Schema_Columns.js | 48 - test/old_tests/test_Schema_Events.js | 59 - test/old_tests/test_Schema_Tables.js | 48 - test/old_tests/test_Schema_Views.js | 48 - test/old_tests/test_SelectConstant.js | 51 - test/old_tests/test_SelectConstant_2.js | 52 - test/old_tests/test_SetAutoCommit.js | 41 - test/old_tests/test_SetDbParameter.js | 33 - test/old_tests/test_SetDbParameterError.js | 34 - test/old_tests/test_SetDbParameter_Events.js | 32 - test/old_tests/test_Setup.js | 2 - test/old_tests/test_SocketError.js | 29 - test/old_tests/test_Transaction.js | 76 - .../test_Transaction_Commit_Error.js | 66 - test/old_tests/test_Transaction_Events.js | 104 - test/old_tests/test_scratch.js | 21 - test/old_tests/utils/test_ActionQueue.js | 49 - test/old_tests/utils/test_Cache.js | 36 - test/old_tests/utils/test_Helpers.js | 72 - test/old_tests/utils/test_Utils.js | 29 - test/packets.BatchExecuteNoQueryPacket.js | 81 + test/packets.ClientInfoExchangePacket.js | 33 + test/packets.CloseDatabasePacket.js | 45 + test/perf/.DS_Store | Bin 0 -> 6148 bytes ...ed-Sep-28-2016-20-33-16-GMT+0900--KST-.csv | 299 ++ test/perf/execute-perf.js | 87 + test/perf/perf-results-by-version.xls | Bin 0 -> 2500096 bytes test/perf/query-perf.js | 84 + test/test.CUBRIDConnection.query.js | 409 --- test/test.Helpers.js | 115 - test/testCUBRID.createConnection.js | 57 - test/testCUBRIDConnection.end.js | 49 - ...stCUBRIDConnection.getConnectionTimeout.js | 15 - ...stCUBRIDConnection.setConnectionTimeout.js | 35 - test/testSetup/fix_lcov.js | 17 - test/testSetup/index.js | 38 + test/testSetup/test_Setup.js | 16 - test/testTransactionHardDisconnect.js | 64 - test/test_ActionQueue.js | 52 - test/test_Async.js | 94 - test/test_AutoCommitMode.js | 76 - test/test_BadConnect.js | 29 - test/test_BadPort.js | 20 - test/test_BadSQLSyntax.js | 42 - test/test_BasicBatchExecute.js | 49 - .../test_BasicBatchExecute_ImplicitConnect.js | 42 - test/test_BasicConnect.js | 37 - test/test_BasicEvents.js | 29 - test/test_BasicEvents_Error.js | 33 - test/test_BasicEvents_Error_2.js | 27 - test/test_BasicExecute.js | 54 - test/test_BasicExecute_2.js | 43 - test/test_BasicExtendedSelect.js | 85 - test/test_BasicExtendedSelect_Sequence.js | 58 - test/test_BasicMultiFetch.js | 100 - test/test_BasicMultiFetch_Sequence.js | 83 - test/test_BasicMultifetchOldProtocol.js | 101 - test/test_BasicQueriesQueue.js | 67 - .../test_BasicQueriesQueue_ImplicitConnect.js | 56 - test/test_BasicSelect.js | 53 - test/test_BasicSelect_Events.js | 75 - test/test_BasicSelect_ImplicitConnect.js | 54 - test/test_Basic_QueriesQueue_Events.js | 70 - test/test_Basic_QueriesQueue_Events_Error.js | 33 - test/test_BatchExecuteNoQueryPacket.js | 44 - test/test_BatchExecuteVariant.js | 54 - test/test_BatchExecute_Error.js | 60 - test/test_BigString.js | 72 - test/test_Blob.js | 61 - test/test_Blob_Insert.js | 68 - test/test_Cache.js | 37 - test/test_ClientInfoExchangePacket.js | 20 - test/test_Clob.js | 49 - test/test_Clob_Insert.js | 62 - test/test_CloseDatabasePacket.js | 39 - test/test_CloseDefault.js | 58 - test/test_Connect.js | 37 - test/test_ConnectCollision.js | 40 - test/test_ConnectTimeout.js | 44 - test/test_Connect_Events.js | 38 - test/test_Connect_Sequence.js | 31 - test/test_DataTypes.js | 129 - test/test_DataTypesEvents.js | 113 - test/test_EmitEvent.js | 42 - test/test_Encoding_Korean.js | 47 - test/test_Encoding_Russian.js | 46 - test/test_ExecuteQueryPacket.js | 1 - test/test_ExecuteWithParams.js | 58 - test/test_ExecuteWithTypedParams.js | 115 - test/test_GetDbParameter.js | 45 - test/test_GetDbParameterError.js | 39 - test/test_GetDbParameter_Events.js | 67 - test/test_IndexExports.js | 59 - test/test_LastInsertID.js | 69 - test/test_Named_Functions.js | 59 - test/test_NodePool.js | 159 - test/test_ObjectsArray.js | 61 - test/test_ParallelQueries.js | 100 - test/test_ParallelQueries_2.js | 94 - test/test_ParallelQueries_3.js | 67 - test/test_PrepareExecuteOldProtocolPacket.js | 54 +- test/test_QueriesQueue.js | 123 - test/test_QueriesQueue_Events.js | 76 - test/test_QueriesQueue_Mixed.js | 66 - test/test_QueriesQueue_MultiFetch.js | 178 - test/test_QueryCollision_01.js | 53 - test/test_QueryCollision_02.js | 72 - test/test_QueryOldProtocol.js | 64 - test/test_QueryWithParams.js | 2 +- test/test_QueryWithParams_2.js | 42 +- test/test_QueryWithTypedParams.js | 2 +- test/test_Rollback.js | 74 - test/test_Schema.js | 62 - test/test_SchemaAttribute.js | 18 +- test/test_SchemaClassPrivilege.js | 14 +- test/test_SchemaConstraint.js | 2 +- test/test_SchemaExportedKeys.js | 2 +- test/test_SchemaImportedKeys.js | 16 +- test/test_SchemaPrimaryKeys.js | 2 +- test/test_SchemaUsers.js | 66 +- test/test_Schema_Events.js | 14 +- test/test_Schema_Tables.js | 2 +- test/test_Schema_Views.js | 2 +- test/test_SelectConstant_01.js | 59 - test/test_SelectConstant_02.js | 61 - test/test_SetAutoCommit.js | 43 - test/test_SetDbParameter.js | 37 - test/test_SetDbParameterError.js | 40 - test/test_SetDbParameter_Events.js | 35 - test/test_SocketError.js | 33 - test/test_Transaction.js | 64 - test/test_Transaction_Commit_Error.js | 62 - test/test_Transaction_Events.js | 108 - test/test_Utils.js | 33 - ...ion to CUBRID Node.js driver - Part I.docx | Bin 188666 -> 0 bytes ...on to CUBRID Node.js driver - Part II.docx | Bin 146549 -> 0 bytes 344 files changed, 14342 insertions(+), 20546 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.yml delete mode 100644 CUBRID version supported.txt delete mode 100644 demo/E2E/E2E_01.js delete mode 100644 demo/E2E/E2E_02.js delete mode 100644 demo/E2E/E2E_03.js delete mode 100644 demo/Server/DemoServer.js delete mode 100644 demo/Web site (1) - Basic/app.js delete mode 100644 demo/Web site (1) - Basic/db_helper.js delete mode 100644 demo/Web site (1) - Basic/favicon.ico delete mode 100644 demo/Web site (1) - Basic/index.html delete mode 100644 demo/Web site (1) - Basic/readme.txt delete mode 100644 demo/Web site (1) - Basic/setup.sql delete mode 100644 demo/Web site (2) - Paging/app.js delete mode 100644 demo/Web site (2) - Paging/cubrid.png delete mode 100644 demo/Web site (2) - Paging/db_helper.js delete mode 100644 demo/Web site (2) - Paging/favicon.ico delete mode 100644 demo/Web site (2) - Paging/index.html delete mode 100644 demo/Web site (2) - Paging/readme.txt delete mode 100644 demo/Web site (3) - Filter/app.js delete mode 100644 demo/Web site (3) - Filter/cubrid.png delete mode 100644 demo/Web site (3) - Filter/db_helper.js delete mode 100644 demo/Web site (3) - Filter/favicon.ico delete mode 100644 demo/Web site (3) - Filter/index.html delete mode 100644 demo/Web site (3) - Filter/readme.txt delete mode 100644 demo/Web site (3) - Filter/site.css delete mode 100644 demo/Web site (4) - Events/app.js delete mode 100644 demo/Web site (4) - Events/cubrid.png delete mode 100644 demo/Web site (4) - Events/db_helper.js delete mode 100644 demo/Web site (4) - Events/favicon.ico delete mode 100644 demo/Web site (4) - Events/index.html delete mode 100644 demo/Web site (4) - Events/readme.txt delete mode 100644 demo/Web site (4) - Events/site.css delete mode 100644 demo/Web site (5) - Database/app.js delete mode 100644 demo/Web site (5) - Database/cubrid.png delete mode 100644 demo/Web site (5) - Database/db_helper.js delete mode 100644 demo/Web site (5) - Database/favicon.ico delete mode 100644 demo/Web site (5) - Database/index.html delete mode 100644 demo/Web site (5) - Database/readme.txt delete mode 100644 demo/Web site (5) - Database/site.css create mode 100644 src/ConsoleLogger.js create mode 100644 src/NoopLogger.js delete mode 100644 src/config.js delete mode 100644 src/constants/DriverVersion.js delete mode 100644 src/cubrid.js delete mode 100644 src/packets/PrepareExecuteOldProtocolPacket.js create mode 100644 src/packets/PrepareExecutePacket.js delete mode 100644 src/resultset/Result2Array.js delete mode 100644 src/utils/ActionQueue.js delete mode 100644 src/utils/Cache.js create mode 100644 test/.DS_Store create mode 100644 test/.eslintrc.yml create mode 100644 test/CUBRID.createConnection.js create mode 100644 test/CUBRIDConnection.batchExecuteNoQuery.js create mode 100644 test/CUBRIDConnection.beginTransaction.js create mode 100644 test/CUBRIDConnection.close.js create mode 100644 test/CUBRIDConnection.closeQuery.js create mode 100644 test/CUBRIDConnection.commit.js create mode 100644 test/CUBRIDConnection.connect.js create mode 100644 test/CUBRIDConnection.end.js create mode 100644 test/CUBRIDConnection.execute.js create mode 100644 test/CUBRIDConnection.executeWithTypedParams.js create mode 100644 test/CUBRIDConnection.fetch.js create mode 100644 test/CUBRIDConnection.getConnectionTimeout.js create mode 100644 test/CUBRIDConnection.getDatabaseParameter.js create mode 100644 test/CUBRIDConnection.getEngineVersion.js create mode 100644 test/CUBRIDConnection.getSchema.js create mode 100644 test/CUBRIDConnection.lobRead.js create mode 100644 test/CUBRIDConnection.lobWrite.js create mode 100644 test/CUBRIDConnection.query.js create mode 100644 test/CUBRIDConnection.queryAll.js create mode 100644 test/CUBRIDConnection.rollback.js create mode 100644 test/CUBRIDConnection.setAutoCommitMode.js create mode 100644 test/CUBRIDConnection.setConnectionTimeout.js create mode 100644 test/CUBRIDConnection.setDatabaseParameter.js create mode 100644 test/Helpers.js delete mode 100644 test/old_tests/packets/test_BatchExecuteNoQueryPacket.js delete mode 100644 test/old_tests/packets/test_ClientInfoExchangePacket.js delete mode 100644 test/old_tests/packets/test_CloseDatabasePacket.js delete mode 100644 test/old_tests/packets/test_CloseQueryPacket.js delete mode 100644 test/old_tests/packets/test_CommitPacket.js delete mode 100644 test/old_tests/packets/test_ExecuteQueryPacket.js delete mode 100644 test/old_tests/packets/test_FetchPacket.js delete mode 100644 test/old_tests/packets/test_GetDbParameterPacket.js delete mode 100644 test/old_tests/packets/test_GetEngineVersionPacket.js delete mode 100644 test/old_tests/packets/test_GetSchemaPacket.js delete mode 100644 test/old_tests/packets/test_LOBNewPacket.js delete mode 100644 test/old_tests/packets/test_LOBReadPacket.js delete mode 100644 test/old_tests/packets/test_LOBWritePacket.js delete mode 100644 test/old_tests/packets/test_OpenDatabasePacket.js delete mode 100644 test/old_tests/packets/test_PacketWriter_PacketReader.js delete mode 100644 test/old_tests/packets/test_PrepareExecuteOldProtocolPacket.js delete mode 100644 test/old_tests/packets/test_RollbackPacket.js delete mode 100644 test/old_tests/packets/test_SetAutoCommitMode.js delete mode 100644 test/old_tests/packets/test_SetAutoCommitModePacket.js delete mode 100644 test/old_tests/packets/test_SetDbParameterPacket.js delete mode 100644 test/old_tests/test_Async.js delete mode 100644 test/old_tests/test_AutoCommitMode.js delete mode 100644 test/old_tests/test_BadConnect.js delete mode 100644 test/old_tests/test_BadPort.js delete mode 100644 test/old_tests/test_BadSQLSyntax.js delete mode 100644 test/old_tests/test_BasicBatchExecute.js delete mode 100644 test/old_tests/test_BasicBatchExecute_ImplicitConnect.js delete mode 100644 test/old_tests/test_BasicConnect.js delete mode 100644 test/old_tests/test_BasicEvents.js delete mode 100644 test/old_tests/test_BasicEvents_Error.js delete mode 100644 test/old_tests/test_BasicEvents_Error_2.js delete mode 100644 test/old_tests/test_BasicExecute.js delete mode 100644 test/old_tests/test_BasicExecute_2.js delete mode 100644 test/old_tests/test_BasicExtendedSelect.js delete mode 100644 test/old_tests/test_BasicExtendedSelect_Sequence.js delete mode 100644 test/old_tests/test_BasicMultiFetch.js delete mode 100644 test/old_tests/test_BasicMultiFetch_Sequence.js delete mode 100644 test/old_tests/test_BasicMultifetchOldProtocol.js delete mode 100644 test/old_tests/test_BasicQueriesQueue.js delete mode 100644 test/old_tests/test_BasicQueriesQueue_ImplicitConnect.js delete mode 100644 test/old_tests/test_BasicSelect.js delete mode 100644 test/old_tests/test_BasicSelect_Cache.js delete mode 100644 test/old_tests/test_BasicSelect_Events.js delete mode 100644 test/old_tests/test_BasicSelect_ImplicitConnect.js delete mode 100644 test/old_tests/test_Basic_QueriesQueue_Events.js delete mode 100644 test/old_tests/test_Basic_QueriesQueue_Events_Error.js delete mode 100644 test/old_tests/test_BatchExecuteVariant.js delete mode 100644 test/old_tests/test_BatchExecute_Error.js delete mode 100644 test/old_tests/test_BigString.js delete mode 100644 test/old_tests/test_Blob.js delete mode 100644 test/old_tests/test_Blob_Insert.js delete mode 100644 test/old_tests/test_Clob.js delete mode 100644 test/old_tests/test_Clob_Insert.js delete mode 100644 test/old_tests/test_CloseDefault.js delete mode 100644 test/old_tests/test_ConcurrentFetch_Events.js delete mode 100644 test/old_tests/test_ConcurrentSelect_Events.js delete mode 100644 test/old_tests/test_Connect.js delete mode 100644 test/old_tests/test_ConnectCollision.js delete mode 100644 test/old_tests/test_ConnectTimeout.js delete mode 100644 test/old_tests/test_Connect_Events.js delete mode 100644 test/old_tests/test_Connect_Sequence.js delete mode 100644 test/old_tests/test_ConnectionPool.js delete mode 100644 test/old_tests/test_DataTypes.js delete mode 100644 test/old_tests/test_DataTypesEvents.js delete mode 100644 test/old_tests/test_Encoding_Korean.js delete mode 100644 test/old_tests/test_Encoding_Russian.js delete mode 100644 test/old_tests/test_ExecuteWithParams.js delete mode 100644 test/old_tests/test_ExecuteWithTypedParams.js delete mode 100644 test/old_tests/test_GetDbParameter.js delete mode 100644 test/old_tests/test_GetDbParameterError.js delete mode 100644 test/old_tests/test_GetDbParameter_Events.js delete mode 100644 test/old_tests/test_Helpers.js delete mode 100644 test/old_tests/test_IndexExports.js delete mode 100644 test/old_tests/test_LastInsertID.js delete mode 100644 test/old_tests/test_Named_Functions.js delete mode 100644 test/old_tests/test_NodePool.js delete mode 100644 test/old_tests/test_ObjectsArray.js delete mode 100644 test/old_tests/test_ParallelQueries.js delete mode 100644 test/old_tests/test_ParallelQueries_2.js delete mode 100644 test/old_tests/test_ParallelQueries_3.js delete mode 100644 test/old_tests/test_QueriesQueue.js delete mode 100644 test/old_tests/test_QueriesQueue_Events.js delete mode 100644 test/old_tests/test_QueriesQueue_Mixed.js delete mode 100644 test/old_tests/test_QueriesQueue_MultiFetch.js delete mode 100644 test/old_tests/test_QueryCollision.js delete mode 100644 test/old_tests/test_QueryCollision_2.js delete mode 100644 test/old_tests/test_QueryOldProtocol.js delete mode 100644 test/old_tests/test_QueryWithParams.js delete mode 100644 test/old_tests/test_QueryWithParams_2.js delete mode 100644 test/old_tests/test_QueryWithTypedParams.js delete mode 100644 test/old_tests/test_Rollback.js delete mode 100644 test/old_tests/test_Schema.js delete mode 100644 test/old_tests/test_SchemaAttribute.js delete mode 100644 test/old_tests/test_SchemaClassPrivilege.js delete mode 100644 test/old_tests/test_SchemaConstraint.js delete mode 100644 test/old_tests/test_SchemaExportedKeys.js delete mode 100644 test/old_tests/test_SchemaImportedKeys.js delete mode 100644 test/old_tests/test_SchemaPrimaryKeys.js delete mode 100644 test/old_tests/test_SchemaUsers.js delete mode 100644 test/old_tests/test_Schema_Columns.js delete mode 100644 test/old_tests/test_Schema_Events.js delete mode 100644 test/old_tests/test_Schema_Tables.js delete mode 100644 test/old_tests/test_Schema_Views.js delete mode 100644 test/old_tests/test_SelectConstant.js delete mode 100644 test/old_tests/test_SelectConstant_2.js delete mode 100644 test/old_tests/test_SetAutoCommit.js delete mode 100644 test/old_tests/test_SetDbParameter.js delete mode 100644 test/old_tests/test_SetDbParameterError.js delete mode 100644 test/old_tests/test_SetDbParameter_Events.js delete mode 100644 test/old_tests/test_Setup.js delete mode 100644 test/old_tests/test_SocketError.js delete mode 100644 test/old_tests/test_Transaction.js delete mode 100644 test/old_tests/test_Transaction_Commit_Error.js delete mode 100644 test/old_tests/test_Transaction_Events.js delete mode 100644 test/old_tests/test_scratch.js delete mode 100644 test/old_tests/utils/test_ActionQueue.js delete mode 100644 test/old_tests/utils/test_Cache.js delete mode 100644 test/old_tests/utils/test_Helpers.js delete mode 100644 test/old_tests/utils/test_Utils.js create mode 100644 test/packets.BatchExecuteNoQueryPacket.js create mode 100644 test/packets.ClientInfoExchangePacket.js create mode 100644 test/packets.CloseDatabasePacket.js create mode 100644 test/perf/.DS_Store create mode 100644 test/perf/execute-perf-results-cubrid-9.2.3.0005-node-v4.5.0-node-cubrid-3.0.0-Wed-Sep-28-2016-20-33-16-GMT+0900--KST-.csv create mode 100644 test/perf/execute-perf.js create mode 100644 test/perf/perf-results-by-version.xls create mode 100644 test/perf/query-perf.js delete mode 100644 test/test.CUBRIDConnection.query.js delete mode 100644 test/test.Helpers.js delete mode 100644 test/testCUBRID.createConnection.js delete mode 100644 test/testCUBRIDConnection.end.js delete mode 100644 test/testCUBRIDConnection.getConnectionTimeout.js delete mode 100644 test/testCUBRIDConnection.setConnectionTimeout.js delete mode 100644 test/testSetup/fix_lcov.js create mode 100644 test/testSetup/index.js delete mode 100644 test/testSetup/test_Setup.js delete mode 100644 test/testTransactionHardDisconnect.js delete mode 100644 test/test_ActionQueue.js delete mode 100644 test/test_Async.js delete mode 100644 test/test_AutoCommitMode.js delete mode 100644 test/test_BadConnect.js delete mode 100644 test/test_BadPort.js delete mode 100644 test/test_BadSQLSyntax.js delete mode 100644 test/test_BasicBatchExecute.js delete mode 100644 test/test_BasicBatchExecute_ImplicitConnect.js delete mode 100644 test/test_BasicConnect.js delete mode 100644 test/test_BasicEvents.js delete mode 100644 test/test_BasicEvents_Error.js delete mode 100644 test/test_BasicEvents_Error_2.js delete mode 100644 test/test_BasicExecute.js delete mode 100644 test/test_BasicExecute_2.js delete mode 100644 test/test_BasicExtendedSelect.js delete mode 100644 test/test_BasicExtendedSelect_Sequence.js delete mode 100644 test/test_BasicMultiFetch.js delete mode 100644 test/test_BasicMultiFetch_Sequence.js delete mode 100644 test/test_BasicMultifetchOldProtocol.js delete mode 100644 test/test_BasicQueriesQueue.js delete mode 100644 test/test_BasicQueriesQueue_ImplicitConnect.js delete mode 100644 test/test_BasicSelect.js delete mode 100644 test/test_BasicSelect_Events.js delete mode 100644 test/test_BasicSelect_ImplicitConnect.js delete mode 100644 test/test_Basic_QueriesQueue_Events.js delete mode 100644 test/test_Basic_QueriesQueue_Events_Error.js delete mode 100644 test/test_BatchExecuteNoQueryPacket.js delete mode 100644 test/test_BatchExecuteVariant.js delete mode 100644 test/test_BatchExecute_Error.js delete mode 100644 test/test_BigString.js delete mode 100644 test/test_Blob.js delete mode 100644 test/test_Blob_Insert.js delete mode 100644 test/test_Cache.js delete mode 100644 test/test_ClientInfoExchangePacket.js delete mode 100644 test/test_Clob.js delete mode 100644 test/test_Clob_Insert.js delete mode 100644 test/test_CloseDatabasePacket.js delete mode 100644 test/test_CloseDefault.js delete mode 100644 test/test_Connect.js delete mode 100644 test/test_ConnectCollision.js delete mode 100644 test/test_ConnectTimeout.js delete mode 100644 test/test_Connect_Events.js delete mode 100644 test/test_Connect_Sequence.js delete mode 100644 test/test_DataTypes.js delete mode 100644 test/test_DataTypesEvents.js delete mode 100644 test/test_EmitEvent.js delete mode 100644 test/test_Encoding_Korean.js delete mode 100644 test/test_Encoding_Russian.js delete mode 100644 test/test_ExecuteWithParams.js delete mode 100644 test/test_ExecuteWithTypedParams.js delete mode 100644 test/test_GetDbParameter.js delete mode 100644 test/test_GetDbParameterError.js delete mode 100644 test/test_GetDbParameter_Events.js delete mode 100644 test/test_IndexExports.js delete mode 100644 test/test_LastInsertID.js delete mode 100644 test/test_Named_Functions.js delete mode 100644 test/test_NodePool.js delete mode 100644 test/test_ObjectsArray.js delete mode 100644 test/test_ParallelQueries.js delete mode 100644 test/test_ParallelQueries_2.js delete mode 100644 test/test_ParallelQueries_3.js delete mode 100644 test/test_QueriesQueue.js delete mode 100644 test/test_QueriesQueue_Events.js delete mode 100644 test/test_QueriesQueue_Mixed.js delete mode 100644 test/test_QueriesQueue_MultiFetch.js delete mode 100644 test/test_QueryCollision_01.js delete mode 100644 test/test_QueryCollision_02.js delete mode 100644 test/test_QueryOldProtocol.js delete mode 100644 test/test_Rollback.js delete mode 100644 test/test_Schema.js delete mode 100644 test/test_SelectConstant_01.js delete mode 100644 test/test_SelectConstant_02.js delete mode 100644 test/test_SetAutoCommit.js delete mode 100644 test/test_SetDbParameter.js delete mode 100644 test/test_SetDbParameterError.js delete mode 100644 test/test_SetDbParameter_Events.js delete mode 100644 test/test_SocketError.js delete mode 100644 test/test_Transaction.js delete mode 100644 test/test_Transaction_Commit_Error.js delete mode 100644 test/test_Transaction_Events.js delete mode 100644 test/test_Utils.js delete mode 100644 tutorials/Introduction to CUBRID Node.js driver - Part I.docx delete mode 100644 tutorials/Introduction to CUBRID Node.js driver - Part II.docx diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ed9f9cc --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +coverage \ No newline at end of file diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..549f156 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,5 @@ +extends: eslint:recommended +installedESLint: true +env: + es6: true + node: true diff --git a/.gitignore b/.gitignore index 3c3629e..ba2a97b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +coverage diff --git a/.travis.yml b/.travis.yml index 3d7a492..e46cbde 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,64 +1,28 @@ +sudo: required + language: node_js node_js: - # Quote the version number as Travis will interpret 0.10 as 0.1 unless quoted. - - "0.10" + - 4 + +services: + - docker env: - - CUBRID_VERSION=9.1.0 - - CUBRID_VERSION=8.4.4 - - CUBRID_VERSION=8.4.3 - - CUBRID_VERSION=8.4.1 + - CUBRID_VERSION=9.3.6.0002 + - CUBRID_VERSION=9.2.26.0004 + - CUBRID_VERSION=9.2.3.0005 + - CUBRID_VERSION=9.1.0.0218 + - CUBRID_VERSION=9.0.0.0478 + - CUBRID_VERSION=8.4.3.10001 + - CUBRID_VERSION=8.4.1.32003 before_install: - # According to http://docs.travis-ci.com/user/build-configuration/ - # prepare the system to install prerequisites or dependencies. - # Update the OS before installing prerequisites. - - sudo apt-get update - # Install Chef Solo prerequisites. - # Ruby >=2.0.0 is required by one of the Chef dependencies. - # Build Ruby from source. Will auto install gem. - - RUBY_MAJOR_VERSION=2.2 - - RUBY_VERSION=$RUBY_MAJOR_VERSION.0 - # Install Ruby prerequisites. - - sudo apt-get install -y build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev wget ssl-cert - # Download Ruby source into the current directory. - - wget http://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR_VERSION/ruby-$RUBY_VERSION.tar.gz - # Extract Ruby source - - tar -xvzf ruby-$RUBY_VERSION.tar.gz - # Enter the Ruby directory. - - cd ruby-$RUBY_VERSION - # Configure Ruby. - - ./configure --prefix=/usr/local - - make - # Install Ruby. - - sudo make install - # Return back to the previous directory. - - cd .. - # Install Chef Solo. - # Chef Solo 11.4.4 is broken, so install one of the later versions. - # The bug was supposed to be fixed in 11.4.5 which is already released. - - sudo gem install chef --no-rdoc --no-ri - -install: - # Install dev dependencies for this Node.js project. - - npm install - # CUBRID operates on IPv4 address, while Travis defaults to IPv6. - # Therefore, we need to explicitly override the default `hostname` - # to point to an IPv4 address. - - sudo hostname localhost - # Make sure the target directory for cookbooks exists. - - mkdir -p /tmp/chef-solo - # Prepare a file with runlist for Chef Solo. - - echo '{"cubrid":{"version":"'$CUBRID_VERSION'"},"run_list":["cubrid::demodb"]}' > cubrid_chef.json - # Install CUBRID via Chef Solo. Download all cookbooks from a remote URL. - - sudo chef-solo -c test/testSetup/solo.rb -j cubrid_chef.json -r http://sourceforge.net/projects/cubrid/files/CUBRID-Demo-Virtual-Machines/Vagrant/chef-cookbooks.tar.gz/download + - docker pull lighthopper/cubrid:$CUBRID_VERSION + - docker run -d -p 33000:33000 lighthopper/cubrid:$CUBRID_VERSION ./create-start-demodb.sh + - docker ps -a after_success: - # Install JSCoverage prerequisites. - - sudo apt-get install zip - # Install JSCoverage to instrument code covered version of the node-cubrid module. - - export JSCOVERAGE_VERSION=0.5.1 - - wget http://siliconforks.com/jscoverage/download/jscoverage-$JSCOVERAGE_VERSION.tar.bz2 - - tar jxf jscoverage-$JSCOVERAGE_VERSION.tar.bz2 && cd jscoverage-$JSCOVERAGE_VERSION && ./configure && make && sudo make install && cd .. - - npm run cover + - npm run coverage + +script: npm run test diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bc8d94..ce2b9fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,5 @@ # node-cubrid change log -## Version Next (Unreleased) - -- Ref #14: Indent using spaces instead of tabs. - ## Version 2.2.5 (June 5, 2015) - Fix #45: Imply the connection before beginning the transaction. diff --git a/CUBRID version supported.txt b/CUBRID version supported.txt deleted file mode 100644 index 74df60b..0000000 --- a/CUBRID version supported.txt +++ /dev/null @@ -1,2 +0,0 @@ ->=8.4.1.2030 -<=9.1 diff --git a/Dockerfile b/Dockerfile index f3f1a55..3d0c539 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # This is a Dockerfile to build an image for running # node-cubrid tests. -FROM node:0.10 +FROM node:4.5.0 MAINTAINER Esen Sagynov @@ -12,7 +12,7 @@ WORKDIR /node-cubrid # Update the OS before installing prerequisites. RUN apt-get update -# Install Ruby prerequisites. +# Install Ruby prerequisites. Necessary to run Chef. RUN apt-get install -y build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev wget ssl-cert libffi6 libffi-dev # Install Chef Solo prerequisites. diff --git a/README.md b/README.md index 38ef902..15af345 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,40 @@ # node-cubrid [![Build Status](https://travis-ci.org/CUBRID/node-cubrid.png)](https://travis-ci.org/CUBRID/node-cubrid) -[![Coverage Status](https://coveralls.io/repos/CUBRID/node-cubrid/badge.png)](https://coveralls.io/r/CUBRID/node-cubrid) + +This is a Node.js driver for [CUBRID](http://www.cubrid.org) open-source relational database. +**node-cubrid** is implemented in 100% JavaScript with no external dependency (except the +development dependencies). Besides the database specific APIs, the module supplies several +*helper* APIs which are useful to sanitize and validate user input values, format and +parametrize SQL statements, etc. **Table of Contents** -* [Introduction](#introduction) * [Key features](#key-features) * [CHANGELOG](#changelog) * [Installation](#installation) * [Request flow in node-cubrid](#request-flow-in-node-cubrid) * [API Documentation](#api-documentation) - * [Creating a CUBRID client](#creating-a-cubrid-client) - * [Establishing a connection](#establishing-a-connection) - * [Connection configuration](#connection-configuration) - * [Setting connection timeout](#setting-connection-timeout) - * [Setting CUBRID Server Parameters](#setting-cubrid-server-parameters) - * [Executing SQL queries](#executing-sql-queries) - * [READ queries](#read-queries) - * [Close Query](#close-query) - * [WRITE queries](#write-queries) - * [Queueing](#queueing) - * [Transactions](#transactions) - * [Closing a connection](#closing-a-connection) - * [Events by EventEmitter](#events-by-eventemitter) + * [Creating a CUBRID client](#creating-a-cubrid-client) + * [Establishing a connection](#establishing-a-connection) + * [Connection configuration](#connection-configuration) + * [Setting connection timeout](#setting-connection-timeout) + * [Setting CUBRID Server Parameters](#setting-cubrid-server-parameters) + * [Executing SQL queries](#executing-sql-queries) + * [READ queries](#read-queries) + * [Close Query](#close-query) + * [WRITE queries](#write-queries) + * [Queueing](#queueing) + * [Transactions](#transactions) + * [Closing a connection](#closing-a-connection) + * [Events by EventEmitter](#events-by-eventemitter) * [More examples](#more-examples) * [Running tests](#running-tests) - * [Running tests in a Docker container](#running-tests-in-a-docker-container) + * [Running tests in a Docker container](#running-tests-in-a-docker-container) * [What's next](#whats-next) * [Authors and Contributors](#authors-and-contributors) * [Special thanks](#special-thanks) -## Introduction - -This is a Node.js driver for [CUBRID](http://www.cubrid.org) open-source relational database. **node-cubrid** is implemented in 100% JavaScript with no external dependency. Besides the database specific APIs, the module supplies several *helper* APIs which are useful to sanitize and validate user input values, format and parameterize SQL statements, etc. - ## Key features - Full compatibility with CUBRID 8.4.1+ releases. @@ -42,43 +42,36 @@ This is a Node.js driver for [CUBRID](http://www.cubrid.org) open-source relatio - Support for queries queueing. - Support for database schema. - Support for database parameters and transactions. -- Support for [LOB](http://www.cubrid.org/manual/92/en/sql/datatype.html#blob-clob-data-types) objects. -- Support for [ENUM](http://www.cubrid.org/manual/92/en/sql/datatype.html#enum-data-type) data types since CUBRID 9+. +- Support for [LOB](http://www.cubrid.org/manual/93/en/sql/datatype.html#blob-clob-data-types) (Binary and Character) objects. +- Support for [ENUM](http://www.cubrid.org/manual/93/en/sql/datatype.html#enum-data-type) data types since CUBRID 9+. - Fully implements the event emitter. -- Extensive tests suite (260K+ assertions). -- User demos: E2E scenarios, web sites. -- ...and many more! +- Extensive tests suite (87% code coverage). +- Full `Promise` support since `v3.0.0`. ## CHANGELOG -You can find the change logs in [CHANGELOG.md](https://github.com/CUBRID/node-cubrid/blob/master/CHANGELOG.md) file. +Refer to https://github.com/CUBRID/node-cubrid/releases tab. ## Installation -Installing and using **node-cubrid** is easy. To install, one has to initiate `npm install` command with `node-cubrid` module name as an argument in the directory where a Node.js application is located. +Since `v3.0.0` the driver requires Node `>=v4`. If you are on an older version of Node, +you can use the previous `node-cubrid` `v2.2.5`. - npm install node-cubrid + npm install node-cubrid -This will install the latest version available at [https://npmjs.org/](https://npmjs.org/). Once installed, the module can be accessed by requiring the `node-cubrid` module: +This will install the latest version available at https:* www.npmjs.com/package/node-cubrid. +Once installed, the module can be accessed by requiring the `node-cubrid` module: - var CUBRID = require('node-cubrid'); + const CUBRID = require('node-cubrid'); The node-cubrid module exports the following properties and functions: -* `ActionQueue`: an object which provides the [`waterfall()`](https://github.com/caolan/async#waterfall) functionality of [async](https://github.com/caolan/async) module. -* `Helpers`: an object which provides a set of helper functions. -* `Result2Array`: an object which provides functions to convert DB result sets into JS arrays. -* `createCUBRIDConnection()` or `createConnection()`: a function which returns a connection object to work with a user defined CUBRID host and database. -* `createDefaultCUBRIDDemodbConnection()`: a function which returns a connection object to work with a local [demodb](http://blog.cubrid.org/wiki_tutorials/entry/getting-started-with-demodb-cubrid-demo-database) database. +- `Helpers`: an object which provides a set of helper functions. +- `createConnection()` (*alias* `createCUBRIDConnection()`): a function which returns a new client connection object to work with a user defined CUBRID host and database. +- `createDefaultCUBRIDDemodbConnection()`: a function which returns a connection object to work with a local [demodb](http://blog.cubrid.org/wiki_tutorials/entry/getting-started-with-demodb-cubrid-demo-database) database. ## Request flow in node-cubrid -The request flow in node-cubrid module looks as illustrated below. - -![Figure 1: Request flow in node-cubrid](http://blog.cubrid.org/files/attach/images/194379/839/471/cubrid_nodejs_events_chain.png) - -Because **node-cubrid** is developed to take the full advantage of JavaScript and Node.js programming, when executing a SQL statement in **node-cubrid**, developers need to listen for an `EVENT_QUERY_DATA_AVAILABLE` and `EVENT_ERROR` events, or provide a callback function which will be called once there is a response from the server. - When the request is sent to the server, CUBRID executes it, and returns the response, which can be either a query result set, or the error code. It is by design that CUBRID does not return any identification about the request sender. In other words, in order to associate the response with a request, the driver has to have only one active request which can be the only owner of this response. For this reason, if a developer wants to execute several queries, they must execute them one after another, i.e. sequentially, NOT in parallel. This is how the communication between the driver and the server is implemented in CUBRID and most other database systems including MySQL. @@ -89,841 +82,1138 @@ If there is a vital need to run queries in parallel, developers can use connecti ### Creating a CUBRID client - // `createCUBRIDConnection()` function accepts either an object or a list of - // connection parameters. The following list of parameters are supported at - // this moment: - // 1. `host`: an IP or a domain name of the CUBRID host (without http:// part). - // Defaults to `localhost`. - // 2. `port`: a port CUBRID is listening at. Defaults to `33000`. - // 3. `user`: the database username. Defaults to `public`. - // 4. `password`: the database user password. Defaults to an empty string. - // 5. `database`: the name of a database to connect to. Default to `demodb`. - // 6. `cacheTimeout`: the timeout value in milliseconds for the query results - // cache. All query results will be cached if `cacheTimeout > 0`. The - // cached results will be returned if the same SQL query is executed within - // the timeout period. Defaults to `0`. - // 7. `connectionTimeout`: the timeout value in milliseconds for the connection. - // If `connectionTimeout = 0`, it will wait until the network socket times out - // itself. Defaults to `0`. - - // All arguments are optional in which case default values will be set. - var client = CUBRID.createCUBRIDConnection(host, port, user, password, database, cacheTimeout, connectionTimeout); - - // Alias function since version 2.1.0. - var client = CUBRID.createConnection(host, port, user, password, database, cacheTimeout, connectionTimeout); - - // Alternatively, an object of parameters can be passed. Since version 2.1.0. - var client = CUBRID.createConnection(paramsObject); + /* + * `createCUBRIDConnection()` function accepts either an object or a list of + * connection parameters. The following list of parameters are supported: + * 1. `hosts`: Can be either: + * - a string representing an IP or a domain name of the CUBRID host + * (without the `http://` part) + * - (since 3.0.0) an array of strings like + * `['host1[:port1]', 'host2[:port2]', ...]`. + * + * When a custom `port` is not specified, the driver will use the + * default `port` specified by the user when creating a connection. + * When a user has not specified the default `port`, it defaults to + * `33000`. + * + * Defaults to `localhost`. + * 2. `port`: a port CUBRID is listening to. Defaults to `33000`. + * 3. `user`: the database username. Defaults to `public`. + * 4. `password`: the database user password. Defaults to an empty string. + * 5. `database`: the name of a database to connect to. Default to `demodb`. + * 7. `connectionTimeout`: the timeout value in milliseconds for the connection. + * If `connectionTimeout = 0`, it will wait until the network socket times out + * itself. Defaults to `0`. + * 8. `maxConnectionRetryCount`: the number of times the connection needs to + * be retried in case of failure. Defaults to `1`. Since `3.0.0`. + * 9. `logger`: a custom logger that implements at least `debug` and `info` + * functions. Defaults to noop (nothing will be logged). For more details + * refer to **Logging** section below. Since `3.0.0`. + */ + + // All arguments are optional in which case default values will be set. + var client = CUBRID.createCUBRIDConnection(host, port, user, password, database, connectionTimeout); + + * Alias function since version 2.1.0. + var client = CUBRID.createConnection(host, port, user, password, database, connectionTimeout); + + // Alternatively, an object of parameters can be passed. Since version 2.1.0. + var client = CUBRID.createConnection(paramsObject); The following example shows how to create a client by providing an object of connection parameters. - var client = CUBRID.createConnection({ - host: host, - port: port, - user: user, - password: password: - database: database, - cacheTimeout: cacheTimeout, - connectionTimeout: connectionTimeout - }); + const client = CUBRID.createConnection({ + host: host, + port: port, + user: user, + password: password: + database: database, + connectionTimeout: connectionTimeout, + maxConnectionRetryCount: maxConnectionRetryCount, + logger: logger + }); ### Establishing a connection - // callback(err) function receives one arguments: the error message if any. - client.connect(callback); + // callback(err) function receives one arguments: the error message if any. + const promise = client.connect(callback); #### Callback style -The code below illustrates a *callback* style when a function is passed as an argument to a `connect()` API which is called after the module receives a response from CUBRID. - - var CUBRID = require('node-cubrid'), - dbConf = { - host: 'localhost', - port: 33000, - user: 'public' - password: '', - database: 'demodb' - }, - client = CUBRID.createCUBRIDConnection(dbConf.host, dbConf.port, dbConf.user, dbConf.password, dbConf.database); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('connection is established'); - - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('connection is closed'); - } - }); - } - }); - -#### Event-based style - -Alternatively, developers can write applications based on an event-based coding style. For example, the above code can be rewritten as: - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - throw err; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('connection is established'); - - client.close(); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('connection is closed'); - }); - -If you prefer the event-based coding style, refer to the [Driver Event model](http://blog.cubrid.org/wiki_apis/entry/cubrid-node-js-api-overview) wiki page to learn more about other events **node-cubrid** emits for certain API calls. +The code below illustrates a *callback* style when a function is passed as an argument +to a `connect()` API which is called after the module receives a response from CUBRID. + + const CUBRID = require('node-cubrid'); + const dbConf = { + host: 'localhost', + port: 33000, + user: 'public' + password: '', + database: 'demodb' + }; + const client = CUBRID.createConnection(dbConf); + + client.connect(function (err) { + if (err) { + throw err; + } else { + console.log('connection is established'); + + client.close(function (err) { + if (err) { + throw err; + } else { + console.log('connection is closed'); + } + }); + } + }); + +#### Promise style + +Alternatively, a `Promise` style is supported. For example, the above code can be rewritten as: + client + .connect() + .then(() => { + console.log('connection is established'); + + return client.close(); + }) + .catch(err => { + throw err; + }); + #### Implicit connection -**node-cubrid** also provides implicit connection feature. When you execute a query on a client without explicitly establishing a connection with `client.connect()`, the driver will automatically establish a connection, then execute your query. +**node-cubrid** performs an implicit connection whenever necessary. When you execute a query +on a client without explicitly establishing a connection by calling `client.connect()`, the +driver will automatically establish a connection before executing your query. #### Connection errors There can be several reasons for a connection to fail: -1. **Connection timeout**: - 1. when the host does not respond within the specified time larger than `0`, you will receive the following error message emitted by **node-cubrid**: +- **Connection timeout**: - { [Error: connect ETIMEDOUT] } + - when the host does not respond within the specified time larger than `0`, + you will receive the following error message: - 2. when no timeout value is set or its value is `0`, the following timeout error is emitted by the underlying network socket. + { [Error: connect ETIMEDOUT] } - { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' } + - when no timeout value is set or its value is `0`, the following timeout + error is emitted by the underlying network socket. -2. **Incorrect hostname**: + { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' } - { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' } +- **Incorrect hostname**: -3. **Incorrect port**: - * When you try to connect to a port listened by an active service other than CUBRID or if a firewall refuses the connection, you will see the following error message: - - { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect' } - - * If the port is not listened by any service, then you will see the **Connection timeout** error as in the first case. - * The last type of error message you would receive if an incorrect port is provided is: + { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' } - { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } +- **Incorrect port**: + + * When you try to connect to a port listened by an active service other than + CUBRID or if a firewall refuses the connection, you will see the following error message: + + { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect' } + + * If the port is not listened by any service, then you will see the **Connection timeout** + error as in the first case. + + * The last type of error message you would receive if an incorrect port is provided is: + + { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } ### Connection configuration #### Setting connection timeout - // Both functions are available since version 2.0.0. - var timeoutInMsec = client.getConnectionTimeout(); - // Set connection timeout in milliseconds. - client.setConnectionTimeout(2000); - - // Alternatively, set the connection timeout value at client creation time. - // Available since version 2.1.0. - var client = CUBRID.createConnection(host, port, user, password, database, cacheTimeout, connectionTimeout); + // Both functions are available since version 2.0.0. + const timeoutInMilliseconds = client.getConnectionTimeout(); + + // Set connection timeout in milliseconds. + client.setConnectionTimeout(2000); + + // Alternatively, set the connection timeout value at client creation time. + // Available since version 2.1.0. + var client = CUBRID.createConnection(host, port, user, password, database, connectionTimeout); -One of the requests we have got for the 2.0 driver release was to implement a connection timeout feature. Simply said - wait for the connection to the database to complete within the specified number of seconds and eventually throw an error if the timeout occurs. +One of the requests we have got for the 2.0 driver release was to implement a connection +timeout feature. Simply said - wait for the connection to the database to complete within +the specified number of seconds and eventually throw an error if the timeout occurs. -Obviously, the key thing here was to set the connection timeout at the Node.js socket connection layer level (and not on the consumer level): +Obviously, the key thing here was to set the connection timeout at the Node.js socket +connection layer level (and not on the consumer level): - self._socket = Net.createConnection(self.initialBrokerPort, self.brokerServer); - self._socket.setNoDelay(true); - self._socket.setTimeout(this._CONNECTION_TIMEOUT); + this._socket = Net.createConnection(hostInfo.port, hostInfo.host); + this._socket.setNoDelay(true); + this._socket.setTimeout(this.getConnectionTimeout()); -In **node-cubrid** by default the connection timeout value is set to `0`, i.e. **node-cubrid** will wait long enough until the underlying network socket times out itself. In this case, according to our observations, the `timeout` event is emitted in about 75 seconds (**purely observational point**). +In **node-cubrid** by default the connection timeout value is set to `0`, i.e. +the driver will wait long enough until the underlying network socket times out itself. +In this case, according to our observations, the `timeout` event is emitted in about +`75` seconds (**purely observational point**). -So, if you want or expect the connection to timeout within the specified time, then manually set the timeout value as shown below. +So, if you want or expect the connection to timeout within the specified time, then +manually set the timeout value as shown below. - var client = new CUBRIDConnection(dbConf.host, dbConf.port, dbConf.user, dbConf.password, dbConf.database); + const client = new CUBRIDConnection(dbConf.host, dbConf.port, dbConf.user, dbConf.password, dbConf.database, /* connectionTimeout */ 2000); - // 2 seconds timeout. - client.setConnectionTimeout(2000); - - client.connect(function (err) { - if (err) { - console.log(err); - } - - client.close(); - }); + // Or at runtime. + client.setConnectionTimeout(2000); + + client.connect(function (err) { + if (err) { + console.log(err); + } + + client.close(); + }); -As you see, the timeout is specified in milliseconds `2,000`, which is 2 seconds. After the 2 seconds, the script will timeout: +As you see, the timeout is specified in milliseconds `2000`, which is 2 seconds. +After 2 seconds, the script will timeout with an error like: - { [Error: connect ETIMEDOUT] } + { [Error: connect ETIMEDOUT] } #### Setting CUBRID Server Parameters - // Both functions are available since version 2.0.0. - client.getDatabaseParameter(paramType); - client.setDatabaseParameter(paramType, paramValue); + // Both functions are available since version 2.0.0. + client.getDatabaseParameter(paramType); + client.setDatabaseParameter(paramType, paramValue); -After connecting to a database, a user can override some *global* session parameters that will control the behavior queries being executed. For example, isolation level of transactions, the auto-commit behavior, etc. +After connecting to a database, a user can override some *global* session parameters +that will control the behavior queries being executed. For example, isolation level +of transactions, the auto-commit behavior, etc. -The complete list of these CUBRID database parameters is defined in the [`Constants.js` ](https://github.com/CUBRID/node-cubrid/blob/master/src/constants/CASConstants.js#L367) file: +The complete list of these CUBRID database parameters is defined in the +[`Constants.js` ](https://github.com/CUBRID/node-cubrid/blob/master/src/constants/CASConstants.js#L371) file: - /** - * Define CUBRID Database parameters constants - */ - exports.CCIDbParam = { - CCI_PARAM_ISOLATION_LEVEL : 1, - CCI_PARAM_LOCK_TIMEOUT : 2, - CCI_PARAM_MAX_STRING_LENGTH : 3, - CCI_PARAM_AUTO_COMMIT : 4 - }; + /** + * Define CUBRID Database parameters constants + */ + exports.CCIDbParam = { + CCI_PARAM_ISOLATION_LEVEL : 1, + CCI_PARAM_LOCK_TIMEOUT : 2, + CCI_PARAM_MAX_STRING_LENGTH : 3, + CCI_PARAM_AUTO_COMMIT : 4 + }; -For each parameter, the CUBRID communication protocol implements a dedicated support for GET and SET operations. Therefore, in order to manipulate them, also a dedicate functionality was needed in the Node.js driver and this is what we did in the 2.0 release. +For each parameter, the CUBRID communication protocol implements a dedicated support for GET +and SET operations. Therefore, in order to manipulate them, also a dedicate functionality was +needed in the driver and this is what we did in the 2.0 release. -Please note one exception - the `CCI_PARAM_MAX_STRING_LENGTH` parameter **cannot** be set programmatically from code as it is a CUBRID Broker parameter and the client can only query its current value. +Please note one exception - the `CCI_PARAM_MAX_STRING_LENGTH` parameter **cannot** be set +programmatically from code as it is a CUBRID Broker parameter and the client can only query +its current value. Let’s see some examples. First, let set the value of the `ISOLATION_LEVEL` parameter: - var CAS = require('./node_modules/node-cubrid/src/constants/CASConstants'); - - client.connect(function (err) { - // handle error, then... - client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { - // handle error - CUBRIDClient.close(function (err) { - // … - }); - }); - }); + const CAS = require('./node_modules/node-cubrid/src/constants/CASConstants'); + + client.connect(function (err) { + // handle error, then... + client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { + // handle error + CUBRIDClient.close(function (err) { + // … + }); + }); + }); + And let’s see how we can retrieve the value of the `LOCK_TIMEOUT` parameter for the current session: - client.connect(function (err) { - client.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_LOCK_TIMEOUT, function (err, value) { - // handle error, then... - console.log('LOCK_TIMEOUT is: %s', value); - - CUBRIDClient.close(function (err) { - // ... - }); - }); - }); + client.connect(function (err) { + client.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_LOCK_TIMEOUT, function (err, value) { + // handle error, then... + console.log('LOCK_TIMEOUT is: %s', value); + + CUBRIDClient.close(function (err) { + // ... + }); + }); + }); The output result is: - LOCK_TIMEOUT is: -1 + LOCK_TIMEOUT is: -1 **Note**: The same value can be obtained also from CUBRID Manager Client: ![Figure 2: CUBRID Manager](http://blog.cubrid.org:8080/files/attach/images/194379/729/617/manager.png) -If you need to change the default values for these parameters, it is highly recommended to do it immediately after `connect ()`. One consequence is that you **must** use an explicit `connect ()` statement in your application, and not the **implicit connect** driver feature (the **implicit connect** feature means that the driver can auto-connect when a query is first executed without the need to issues an explicit `connect()` command). +If you need to change the default values for these parameters, it is highly recommended +to do it immediately after `connect ()`. ### Executing SQL queries #### READ queries - // Callback style. - client.query(sql, callback); - client.query(sql, params, callback); - - // `sql` is a string representation of a READ query. Required. - - // `params` is an array of parameter values or the value itself - // which a user wants to bind instead of `?` placeholders - // in the `sql` query. If no placeholder is found, the `sql` - // will not be modified. This argument is optional. When - // omitted, `sql` will be sent to the server unmodified. This - // `params` argument is available since version 2.1.0. - - // `callback` is a function which will be invoked when the query - // finishes executing. Optional. The `callback` function - // can be omitted in which case only the - // `EVENT_QUERY_DATA_AVAILABLE` event will be - // emitted when the query finishes execution. - - // The `callback(err, result, queryHandle)` function accepts three arguments. - // 1. `err`: an error object if any. - // 2. `result`: a string value of the query result. No type casting as of version 2.1.0. Users need to parse the value into JSON manually. - // 3. `queryHandle`: an integer ID for the query handle. Used to fetch more data. - - // Event style. - client.query(sql); - client.query(sql, params); - - // `callback(result, queryHandle, sql)` function accepts three arguments: - // 1. `result`: a string value of the query result. No type casting as of version 2.1.0. - // 2. `queryHandle`: an integer ID for the query handle. Used to fetch more data. - // 3. `sql`: the SQL query which was executed that matches the `result`. - // `sql` argument is available since version 2.0.0. - client.on(client.EVENT_QUERY_DATA_AVAILABLE, callback); - - // Queries queueing. - client.query(sql); - client.query(sql, params); - - // When multiple queries are executed one after another without - // waiting for a callback or listening for an emmitted event, the queries - // will be queued and executed sequentially. Thus, callbacks and - // appropriate events will be executed/emitted in order. + // Callback style. + client.query(sql, callback); + client.query(sql, params, callback); + + /* + * 1. `sql`: a string representation of a single READ query. Required. + * 2. `params` is an array of parameter values or the value itself + * which a user wants to bind instead of `?` placeholders + * in the `sql` query. If no placeholder is found, the `sql` + * will not be modified. This argument is optional. When + * omitted, `sql` will be sent to the server unmodified. This + * `params` argument is available since version 2.1.0. + * 3. `callback` is a function which will be invoked when the query + * finishes executing. Optional. The `callback` function + * can be omitted in which case users need to handle the + * return value of the `Promise`. + */ + + /* + * The `callback(err, result, queryHandle)` function accepts three arguments. + * 1. `err`: an error object if any. + * 2. `result`: a query result object which has the following properties: + * - `ColumnDataTypes`: an array of strings that represent the column data type. + * - `ColumnNames`: an array of strings that represent the column names. + * - `ColumnValues`: an array of arrays that represent rows of records + * each row having one or more columns. Here each column represents a value + * of that column. + * - `RowsCount`: total number of records that match the provided SQL query. + * **Note** that not all records may have been fetched. + * 3. `queryHandle`: an integer ID for the query handle. Used to fetch more data + * or close the query statement in order to release the memory being kept + * on the CUBRID server side. + */ + + // Promise style. + const promise = client.query(sql); + const promise = client.query(sql, params); + + /* + * A `promise` is resolved with a single `response` object that has the following + * properties described above: + * - result + * - queryHandle + * + * A `promise` is rejected with a single instance of `Error` object. + */ + + /* + * Queries queueing: calling `query()` multiple times will result in queuing + * the queries which will be executed sequentially one after another. + */ + client.query(sql); + client.query(sql, params); + + // Under the hood, `query()` and other functions that accept `params` all + // call `Helpers._sqlFormat()` function to perform the actual formatting. + + // When multiple queries are executed one after another without + // waiting for a callback, the queries + // will be queued and executed sequentially. ##### Callback example -Here is an example which executes a simple `SELECT ` query. +Here is an example which executes a simple `SELECT` query. - var CUBRID = require('node-cubrid'), - // `Result2Array` is a sub-module which provides a set of helper - // functions to convert the query result to array, object, etc. - Result2Array = CUBRID.Result2Array; - - // Connection is established implicitly. - client.query('SELECT * FROM nation', function (err, result, queryHandle) { + const CUBRID = require('node-cubrid'); + + // Connection is established implicitly. + client.query('SELECT * FROM nation', function (err, result, queryHandle) { if (err) { throw err; } else { - var arr = Result2Array.RowsArray(result); + const rows = result.ColumnValues; + const rowsCount = result.RowsCount; - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } } // Fetch more data using queryHandle if necessary. + // Refer to examples below. } }); The following example shows how to set placeholders and bind values in `SELECT` queries. - client.query('SELECT * FROM nation WHERE continent = ?', ['Asia'], function (err, result, queryHandle) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); - } - - // Fetch more data using queryHandle if necessary. - } - }); + client.query('SELECT * FROM nation WHERE continent = ?', ['Asia'], callback); -Alternatively, the `params` value can be literal value. +Alternatively, the `params` value can be a literal value. - client.query('SELECT * FROM nation WHERE continent = ?', 'Asia', callback); + client.query('SELECT * FROM nation WHERE continent = ?', 'Asia', callback); If the `params` value is `undefined` or `null`, it will be converted to SQL `NULL`. - client.query('SELECT * FROM nation WHERE continent IS ?', null, callback); + client.query('SELECT * FROM nation WHERE continent IS ?', null, callback); The `Date` type values will be converted into CUBRID compatible `DATETIME` strings. - client.query('SELECT * FROM game WHERE game_date = ?', [new Date('8/28/2004')], callback); - // The query will be - // `SELECT * FROM game WHERE game_date = '8/28/2004 0:0:0.0'` + client.query('SELECT * FROM game WHERE game_date = ?', [new Date('8/28/2004')], callback); + // The query will be + // `SELECT * FROM game WHERE game_date = '8/28/2004 0:0:0.0'` + // Note that as of CUBRID v9.3.0 it does not support time zones. And finally, everything else will be safely escaped and wrapped in single quotes. -##### Event style example +##### Promise example - // Multiple queries will be queued and executed sequentially. - client.query('SELECT * FROM nation'); - client.query('SELECT * FROM nation WHERE continent = ?', ['Asia']); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle, sql) { - var arr = Result2Array.RowsArray(result); - - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); - } - - // Do something with `sql` like: - switch (sql) { - case SQL_A: - break; - case SQL_B: - break; - default: - } - - // Fetch more data using queryHandle if necessary. - } + const promise = client + .query('SELECT * FROM nation') + .then(response => { + const result = response.result; + const queryHandle = response.queryHandle; + + const rowsCount = result.RowsCount; + const rows = result.ColumnValues; + + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } + } + + // Do something more. + }) + .catch(err => { + // Handle the error. + }); #### Fetch more data - // Callback style. - // `queryHandle`: an integer ID for the query handle obtained from query() function. - // `callback(err, result, queryHandle)` function accepts three arguments. - // 1. `err`: an error object if any. - // 2. `result`: a string value of the query result. No type casting as of version 2.1.0. - // 3. `queryHandle`: an integer ID for the query handle. Used to fetch more data. - client.fetch(queryHandle, callback); - - // Event style. - client.fetch(sql); - // `callback(result, queryHandle)` function accepts two arguments. - client.on(client.EVENT_FETCH_DATA_AVAILABLE, callback); - // `callback(queryHandle)` function accepts one argument. - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, callback); - + /* + * `fetch()` accepts three arguments: + * 1. `queryHandle`: an integer ID for the query handle obtained from `query()` function. + * 2. `all`: a boolean that tells whether to fetch all available records or just the + * next batch. Defaults to `false`. Since `3.0.0`. + * 2. `callback(err, result, queryHandle)` function accepts the same three arguments + * accepted by the `query()` function. + */ + client.fetch(queryHandle, all, callback); + + // Promise style is resolved and rejected similarly like the promise from `query()`. + const promise = client.fetch(queryHandle, all); + ##### Callback example - client.query('SELECT * FROM nation', function (err, result, queryHandle) { + client.query('SELECT * FROM nation', function (err, result, queryHandle) { if (err) { throw err; } else { - var arr = Result2Array.RowsArray(result); + const rows = result.ColumnValues; + const rowsCount = result.RowsCount; - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } } - // Fetch more data using queryHandle if necessary. + // Fetch more data using the `queryHandle`. client.fetch(queryHandle, function (err, result, queryHandle) { - // Do the above logic here again. + // Handle the error and response. + // Note that the fetch does not return all the records + // but only some. So, users need to fetch records in batches. }); } }); -##### Event style example +##### Promise example + + const promise = client + .query('SELECT * FROM nation') + .then(response => { + const result = response.result; + const queryHandle = response.queryHandle; + + const rowsCount = result.RowsCount; + const rows = result.ColumnValues; + + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } + } + + return client.fetch(queryHandle); + }) + .then(response => { + // The same `response` as after `query()`. + }) + .catch(err => { + // Handle the error. + }); + +#### Close Query + +It is vital to always close all the READ queries when they are no longer necessary. +When you query, CUBRID allocates a part of memory to hold the query statement +information necessary to return values on consecutive `fetch()` requests. Unless +the connection with the client is disconnected, CUBRID will keep this information +in memory. When not released during the lifetime of the connection, eventual +OOM (Out Of Memory) problems can occur on the server side. This is why when you +are done with the query results, close the queries. If the connection is disconnected, +CUBRID will automatically close all the query statements to free the memory. + + /* + * `closeQuery()` accepts two arguments: + * 1. `queryHandle`: an integer ID for the query handle obtained from `query()` + * or the last `fetch()`. + * 2. `callback(err)` function that accepts one argument: + * 1. `err`: an error object if any. + */ + client.closeQuery(queryHandle, callback); + +All READ queries **must be** closed explicitly except when you call `queryAll` +in which case the driver will close queries for you because there is no more +data that you may possibly request. - client.query('SELECT * FROM nation'); +##### Callback example - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - var arr = Result2Array.RowsArray(result); + client.query(sql, function (err, result, queryHandle) { + const arr = result.ColumnValues; - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); - } + if (arr.length) { + // Try to fetch more. + } else { + client.closeQuery(queryHandle, function (err) { + // Do something else. + }); + } + }); + +##### Promise example + + // Promise style. + const promise = client + .query(sql) + .then(response => { + // Do something with response. + + return client.closeQuery(response.queryHandle); + }) + .then(() => { - // Fetch more data using queryHandle if necessary. - client.fetch(queryHandle); - } + }) + .catch(err => { + // Handle the error. + }); - client.on(client.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - var arr = Result2Array.RowsArray(result); +#### Query As Objects + +There is a convenient function provided in case you want to retrieve result set +as an array of traditional JSON objects with column names and values as object +properties and their corresponding values. + + /* + * `queryAsObjects()` calls `query()`, therefore it accepts the same + * arguments as `query()`. Available since `3.0.0`. + * 1. `sql` + * 2. `params` + * 3. `callback(err, result, queryHandle)` is different from the callback passed + * to `query()`. It accepts the same number of arguments, but `result` is no + * longer an object but an array that represents rows of record objects. + * 1. `err`: an error object if any. + * 2. `result`: an array of records each representing a single row object + * where keys are columns names and their values are column values. + * 3. `queryHandle`: an integer ID for the query handle. Used to fetch more data + * or close the query statement in order to release the memory being kept + * on the CUBRID server side. + */ + client.queryAsObjects(sql, params, callback); + + // Promise style. + const promise = client.queryAsObjects(sql); + const promise = client.queryAsObjects(sql, params); + +**Note** that the `result` returned by `queryAsObjects` is no longer a result object +but an array that represents rows of record objects. Thus, you cannot access the +column meta information via `result.ColumnDataTypes`, `result.ColumnNames` or +`result.RowsCount`. If such information is necessary, call `getMetaData(queryHandle)` +explained below. + +##### Callback example + +Here is an example which executes a simple `SELECT` query. + + // Connection is established implicitly. + client.queryAsObjects('SELECT * FROM nation', function (err, result, queryHandle) { + if (err) { + throw err; + } else { + // `result` is now an array of row objects. + const rowsCount = result.length; - for (var j = 0, len = arr.length; j < len; ++j) { - console.log(arr[j]); + for (let i = 0; i < rowsCount; ++i) { + const row = rows[i]; + + console.log(row.code); + console.log(row.name); + console.log(row.continent); + console.log(row.capital); + } + + // Do something more. } - - // Continue fetching. - client.fetch(queryHandle); - } - - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - // Close query; - } + }); -#### Close Query +##### Promise example - // `queryHandle`: an integer ID for the query handle obtained from `query()` - // or the last `fetch()` function. - // `callback(err, queryHandle)` function accepts two arguments: - // 1. `err`: an error object if any. - // 2. `queryHandle`: the query handle which has been closed. - client.closeQuery(queryHandle, callback); - - // Event style. - client.closeQuery(queryHandle); - // `callback(queryHandle)` function accepts one argument: - // `queryHandle`: the query handle ID which was just closed. - client.on(client.EVENT_QUERY_CLOSED, callback); - -All READ queries **must be** closed explicitly. + const promise = client + .queryAsObjects('SELECT * FROM nation') + .then(response => { + const result = response.result; + const queryHandle = response.queryHandle; + + // `result` is now an array of row objects. + const rowsCount = result.length; + + for (let i = 0; i < rowsCount; ++i) { + const row = rows[i]; + + console.log(row.code); + console.log(row.name); + console.log(row.continent); + console.log(row.capital); + } + + // Do something more. + }) + .catch(err => { + // Handle the error. + }); +##### Get Query Result Metadata + + /* + * `getMetaData()` accepts two arguments: + * 1. `queryHandle`: that is associated with the required query result, + * obtained from the last `query()`. + * 2. `callback(err, result)` accepts two arguments: + * 1. `err`: an error object if any. + * 2. `result`: the same `result` object that is returned when calling + * `query()` function. It provides the same `ColumnDataTypes`, + * `ColumnNames`, `ColumnValues`, and `RowsCount` properties. + */ + + // Callback style. + client.getMetaData(queryHandle, callback); + + // Promise style. + const promise = client.getMetaData(queryHandle); + +#### Query All + +There is a convenient function provided in case you want to query all records +that match the SQL. + +**Note** that this may potentially result in OOM in your application especially +considering that in Node environment a typical process has a limited memory +around 1.6GB. + +Use this function when you are sure that the result set will fit into your app's +memory. + + /* + * `queryAll()` calls `query()` and then calls `fetch()` multiple times until + * all records are retrieved, and finally calls `closeQuery()` explicitly to + * close the query for you. Thus, it accepts the same arguments as `query()`. + * Available since `3.0.0`. + * 1. `sql` + * 2. `params` + * 3. `callback(err, result)` function is different from the callback you + * pass to `query()` in the way that in `queryAll` it accepts only + * the error and the result object. No `queryHandle` is returned. + */ + client.queryAll(sql, params, callback); + + // Promise style. + const promise = client.queryAll(sql); + const promise = client.queryAll(sql, params); + ##### Callback example - client.query(sql, function (err, result, queryHandle) { - var arr = Result2Array.RowsArray(result); - - if (arr.length) { - // Try to fetch more. - } else { - client.closeQuery(queryHandle, function (err, queryHandle) { - // Do something else. - }); - } - }); - -##### Event style example - - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - client.closeQuery(queryHandle); - } - - client.on(client.EVENT_QUERY_CLOSED, function (queryHandle) { - // Do something here. - } +Here is an example which executes a simple `SELECT` query. -#### WRITE queries + // Connection is established implicitly. + client.queryAll('SELECT * FROM nation', function (err, result) { + if (err) { + throw err; + } else { + // `rows` now include all records that matched the SQL query. + const rows = result.ColumnValues; + const rowsCount = result.RowsCount; + + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } + } + + // No need to fetch anything more. + // No need to close the query as it is already closed by `queryAll()`. + } + }); - // `execute(sql, callback)` function accepts two arguments. - // 1. `sql`: a string which represents a WRITE query or an array - // of strings for batch processing. - // 2. `callback(err)`: a function that accepts one argument: - 1. `err`: an error object if any. - - client.execute("INSERT INTO a VALUES(1, 2, 'val')", function callback(err) {}); - - // `executeWithParams(sql, params, paramDelimiters, callback)` - // function accepts four arguments. - // 1. `sql`: a string which represents a WRITE query. **Note** - // not an array of strings. - // 2. `params`: an array of parameter values or the value itself - // which a user wants to bind instead of `?` placeholders - // in the `sql` query. If no placeholder is found, the `sql` - // will not be modified. - // 3. `paramDelimiters`: an optional array of delimiters which - // must be used to wrap parameter values. If omitted, - // it will try to guess the type and apply a default - // delimiter of that type. - // - `null` is passed as an unwrapped SQL equivalent `NULL`. - // - `number` is not wrapped. - // - `Date` instance is wrapped by a single quote and - // converted into CUBRID's `DATETIME` format such as - // `'mm/dd/yyyy hh:mi:ss.ff am|pm'` omitting the - // timezone information as CUBRID as of version 9 - // does not support timezones. - // - Everything else, including `string`, is wrapped - // by a single quote. - // 4. `callback(err)`: a function that accepts one argument: - 1. `err`: an error object if any. - - // Under the hood, `executeWithParams()` as well as `query()` and - // `queryWithParams()` all call `Helpers._sqlFormat()` function - // to perform the actual formatting. - - var sql = 'INSERT INTO a VALUES(?, ?, ?, ?)', - params = [1, 2, 'val', new Date()], - paramDelimiters = ["", "", "'", "'"]; - - client.executeWithParams(sql, params, paramDelimiters, function callback(err) {}); - // Will send to the server the following formatted SQL: - // `INSERT INTO a VALUES(1, 2, 'val', '02/24/2015 03:09:20.12 pm')` +**Note** once again that there is no need to call `closeQuery()` after `queryAll()` +because `queryAll()` automatically closes the query after all `fetch()` has been +done. + +##### Promise example + + const promise = client + .queryAll('SELECT * FROM nation') + .then(result => { + const rowsCount = result.RowsCount; + // `rows` now include all records that matched the SQL query. + const rows = result.ColumnValues; + + for (let i = 0; i < rowsCount; ++i) { + let columns = rows[i]; + + for (let j = 0, columnsCount = columns.length; j < columnsCount; ++j) { + console.log(columns[j]); + } + } + + // No need to fetch anything more. + // No need to close the query as it is already closed by `queryAll()`. + }) + .catch(err => { + // Handle the error. + }); -After executing WRITE queries there is no need to close the query. +#### Query All As Objects + +In case you want to retrieve all records as object, there is a function just for +that. + + /* + * `queryAllAsObjects()` calls `queryAll()`, therefore it accepts the same + * arguments as `queryAll()`. Available since `3.0.0`. + * 1. `sql` + * 2. `params` + * 3. `callback(err, result)` accepts the same number of arguments as `queryAll()`: + * 1. `err`: an error object if any. + * 2. `result`: an array of records each representing a single row object + * where keys are columns names and their values are column values. + */ + client.queryAllAsObjects(sql, params, callback); + + // Promise style. + const promise = client.queryAllAsObjects(sql); + const promise = client.queryAllAsObjects(sql, params); + +**Note** that just like with `queryAsObjects()`, the `result` returned by +`queryAllAsObjects` is an array that represents rows of record objects. Likewise, +there is no need to call `closeQuery()` after `queryAllAsObjects()` as `queryAll()` +automatically closes the query after all `fetch()` has been done. -#### Queueing +##### Callback example -Since **node-cubrid** version 2.1.0 almost all requests, which initiate a network communication, pass through an internal queue. This includes READ and WRITE queries, close query requests, fetch requests, rollback/commit requests. +Here is an example which executes a simple `SELECT` query. -Thus, in order to put queries into a queue, all you need to do is call query/execute and their equivalent functions one after another. They will be added into the queue as they come in (FIFO). + // Connection is established implicitly. + client.queryAllAsObjects('SELECT * FROM nation', function (err, result) { + if (err) { + throw err; + } else { + // `result` is now an array of all row objects. + const rowsCount = result.length; + + for (let i = 0; i < rowsCount; ++i) { + const row = rows[i]; + + console.log(row.code); + console.log(row.name); + console.log(row.continent); + console.log(row.capital); + } + + // Do something more. + } + }); -Here is an example. +##### Promise example - client.execute('CREATE TABLE tbl_test(id INT)', callback); - client.execute('INSERT INTO tbl_test (id) VALUES (1), (2), (3)', callback); - client.query('SELECT * FROM tbl_test', callback); - client.execute('DROP TABLE tbl_test', callback); + const promise = client + .queryAllAsObjects('SELECT * FROM nation') + .then(result => { + // `result` is now an array of row objects. + const rowsCount = result.length; + + for (let i = 0; i < rowsCount; ++i) { + const row = rows[i]; + + console.log(row.code); + console.log(row.name); + console.log(row.continent); + console.log(row.capital); + } + }) + .catch(err => { + // Handle the error. + }); -Remember that the `callback` is optional in which case you should listen for events. +#### WRITE queries -Alternatively, for backward compatibility we still support `addQuery()` and `addNonQuery()` functions which we introduced in version 2.0.0. + /* + * `execute(sql, params, callback)` function accepts three arguments. + * 1. `sql`: a string which represents a WRITE query or an array + * of strings for batch processing. `sql` must be a string if + * `params` are provided. + * 2. `params` is an array of parameter values or the value itself + * which a user wants to bind instead of `?` placeholders + * in the `sql` query. If no placeholder is found, the `sql` + * will not be modified. This argument is optional. When + * omitted, `sql` will be sent to the server unmodified. + * Available since `3.0.0`. + * 3. `callback(err)`: a function that accepts one argument: + 1. `err`: an error object if any. + + // Callback style. + client.execute(sql, callback); + client.execute(sql, params, callback); + + // Promise style. + const promise = client.execute(sql); + const promise = client.execute(sql, params); + + /* + * A `promise` is resolved with no arguments. + * A `promise` is rejected with a single instance of `Error` object. + */ + + /* + * Queries queueing: calling `execute()` multiple times will result in queuing + * the queries which will be executed sequentially one after another. + */ + client.execute(sql); + client.execute(sql, params); - var SQL_1 = "SELECT COUNT(*) FROM [code]"; - var SQL_2 = "SELECT * FROM [code] WHERE s_name = 'X'"; - var SQL_3 = "SELECT COUNT(*) FROM [code] WHERE f_name LIKE 'M%'"; - var SQL_4 = "DELETE FROM code WHERE s_name = 'ZZZZ'"; +After executing WRITE queries there is no need to close the query. - Helpers.logInfo('Executing [1]: ' + SQL_1); - client.addQuery(SQL_1, function (err, result) { - Helpers.logInfo('Result [1]: ' + Result2Array.RowsArray(result)); - }); +##### Callback example - Helpers.logInfo('Executing [2]: ' + SQL_2); - client.addQuery(SQL_2, function (err, result) { - Helpers.logInfo('Result [2]: ' + Result2Array.RowsArray(result)); - }); +Here is an example which executes a simple `INSERT` query. - Helpers.logInfo('Executing [3]: ' + SQL_3); - client.addQuery(SQL_3, function (err, result) { - Helpers.logInfo('Result [3]: ' + Result2Array.RowsArray(result)); + client.execute('INSERT INTO tbl VALUES(1, 2, 3)', function (err) { + // Handle the error; }); - Helpers.logInfo('Executing [4]: ' + SQL_4); - client.addNonQuery(SQL_4, function (err) { - Helpers.logInfo('Result [4]: ' + err); - client.close(); +The following example shows how to set placeholders and bind values in `INSERT` queries. + + client.execute('INSERT INTO tbl VALUES(?, ?, ?)', [1, 2, 3], function (err) { + // Handle the error; }); -`addQuery()` will simply pass its arguments to the main `query()` function, while `addNonQuery()` will pass its arguments to `execute()` function. Thus, if you want to avoid one more function call, get used to directly calling the `query()` or `execute()` functions. +Alternatively, the `params` value can be a literal value. -##### Check if queue is empty + client.execute('INSERT INTO tbl (name) VALUES(?)', 'cubrid', function (err) { + // Handle the error; + }); - client.isQueueEmpty(); - client.queriesQueueIsEmpty(); +If the `params` value is `undefined` or `null`, it will be converted to SQL `NULL`. -In case you are interested in checking if the queue is empty, call one of the above functions. Returns `true` or `false`. + client.execute('INSERT INTO tbl (name) VALUES(?)', null, function (err) { + // Handle the error; + }); -##### Get queue depth +The `Date` type values will be converted into CUBRID compatible `DATETIME` strings. - client.getQueueDepth(); + client.execute('INSERT INTO tbl (d) VALUES(?)', [new Date('8/28/2004')], callback); + // The query will be + // `INSERT INTO tbl (d) VALUES('8/28/2004 0:0:0.0')` + // Note that as of CUBRID v9.3.0 it does not support time zones. -The above function will return the number of requests currently in the queue. Remember that this number represents all requests, including READ and WRITE, and fetch, and rollback/commit, etc. Briefly all requests which initiate a network communication. +And finally, everything else will be safely escaped and wrapped in single quotes. -### Transactions + batchExecuteNoQuery() + +#### Execute with Typed Parameters + +For cases when implicit type casting is insufficient or the result +is not as expected, data types can be specified by calling `executeWithTypedParams()`. + + /* + * `executeWithTypedParams()` accepts four arguments. + * 1. `sql`: a string which represents a single WRITE query. + * **Note** not an array of strings. + * 2. `params`: an optional array of parameter values which a user + * wants to bind instead of `?` placeholders in the `sql` + * query. If no placeholder is found, the `sql` will not + * be modified. + * 3. `dataTypes`: an optional array of string values where each + * element represents a data type for the corresponding + * value in `params`. The following data types are supported: + * `char`, `varchar`, `nchar`, `string`, `varnchar`, `short`, `int`, + * `bigint`, `float`, `double`, `monetary`, `numeric`, `date`, `time`, + * `datetime`, `timestamp`, `object`, `bit`, `varbit`, `set`, `multiset`, + * `sequence`, `blob`, `clob`, `resultset`. + * `dataTypes` are required if `params` are specified. + * 4. `callback(err)`: a function that accepts one argument: + 1. `err`: an error object if any. + */ + + const sql = 'INSERT INTO a VALUES(?, ?, ?, ?)'; + const params = [1, 23, 'val', new Date()]; + const dataTypes = ['int', 'short', 'varchar', 'datetime']; + + client.executeWithTypedParams(sql, params, paramDelimiters, function callback(err) {}); + + // Promise way. + const promise = client.executeWithTypedParams(sql, params, paramDelimiters); + +**Note** that `executeWithTypedParams()` does not replace `?` placeholders. +The `param` and `dataTypes` are sent to CUBRID directly, and the server handles +explicit type casing. - client.beginTransaction(callback); - client.commit(callback); - client.rollback(callback); - - // All `callback(err)` functions accept one argument: the error message if any. - - client.setAutoCommitMode(boolean, callback); - - // `boolean` is a boolean value which represents the auto_commit - // mode you wish to set the current transaction to. - - // The `callback(err)` function accepts one argument: the error message if any. - -**node-cubrid** fully supports SQL transactions. By default `auto_commit` mode is set to `true` meaning after every WRITE query CUBRID Server will commit the changes to the disk. - -When you start a new transactaction by calling `beginTransaction()`, **node-cubrid** will first commit the previous active transaction if any. This is according to CUBRID spec. Then it will start a new transaction by setting the `auto_commit` mode to `false`. - -**Note:** Unlike in other DBMS vendor drivers, in **node-cubrid** when a transaction is rolled back or committed, the `auto_commit` mode remains unchanged, i.e. `false`. This is according to CUBRID spec. This means that after you commit/rollback the transaction and you no longer need to execute queries in `auto_commit = false` mode, explicitly turn the `auto_commit` mode to `true` by calling `setAutoCommitMode()` function. - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - Helpers.logInfo('Connected...'); - client.batchExecuteNoQuery('create table test_tran(id int)', cb); - }, - function (cb) { - client.beginTransaction(cb); - }, - function (cb) { - client.batchExecuteNoQuery('insert into test_tran values(1)', cb); - }, - function (cb) { - client.query('select * from test_tran', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Should be true: ' + Result2Array.TotalRowsCount(result) === 1); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.rollback(cb); - }, - function (cb) { - client.query('select * from test_tran', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Should be true: ' + Result2Array.TotalRowsCount(result) === 0); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.batchExecuteNoQuery('drop table test_tran', cb); - }, - function (cb) { - client.commit(cb); - }, - function (cb) { - // Explicitly set the auto commit mode to true, once done. - client.setAutoCommitMode(true, cb); - }, - function (cb) { - client.query('select count(*) from db_class where class_name = \'test_tran\'', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Should be true: ' + Result2Array.RowsArray(result)[0][0] === 0); - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); +#### Queueing -### Closing a connection +Since **node-cubrid** version 2.1.0 almost all requests, which initiate a network +communication, pass through an internal queue. This includes READ and WRITE queries, +close query requests, fetch requests, rollback/commit requests. - // callback(err) function accepts one argument: the error message if any. - client.close(callback); - // Alias function since version 2.1.0. - client.end(callback); +Thus, in order to put queries into a queue, all you need to do is call `query()` / `execute()` +and their equivalent functions one after another. They will be added into the queue as +they come in (FIFO). -#### Callback style +Here is an example. - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('connection is closed'); - } - }); + client.execute('CREATE TABLE tbl_test(id INT)', callback); + client.execute('INSERT INTO tbl_test (id) VALUES (1), (2), (3)', callback); + client.query('SELECT * FROM tbl_test', callback); + client.execute('DROP TABLE tbl_test', callback); -#### Event style +Remember that the `callback` is optional in which case you should handle the promises. - client.connect(); - - client.on(client.EVENT_CONNECTED, function () { - console.log('connection is established'); - - client.close(); - }); +##### Check if queue is empty - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('connection is closed'); - }); +In case you are interested in checking if the queue is empty, call the following function. +Returns `true` or `false`. -When a connection is closed by calling `close()` or `end()`, all pending/queued requests will be removed from the internal queue. + client.isQueueEmpty(); -#### Errors on closing the connection +##### Get queue depth -The following errors may be emitted when the application tries to close the connection: +The below function will return the number of requests currently in the queue. +Remember that this number represents all requests, including READ and WRITE, +and fetch, and rollback/commit, etc. Briefly all requests which initiate a +network communication, including those which are currently in-flight. -1. If a connection is already closed, the following error is emitted by **node-cubrid**. - - { [Error: The connection is already closed!] } - -2. If closing a connection was unsuccessful, an error message returned by a database is emitted. - -### Events by EventEmitter - -**node-cubrid** implements, in addition to the standard callbacks model functionality, a rich event model: - -| Event name | Notes | -| ---------------- | --------| -| `EVENT_ERROR` | Emitted when an error is occurs. | -| `EVENT_CONNECTED` | Emitted when a connection is established. | -| `EVENT_ENGINE_VERSION_AVAILABLE` | Emitted when the database version information is returned from the server to a client. | -| `EVENT_BATCH_COMMANDS_COMPLETED` | Emitted when the batch commands execution is completed. | -| `EVENT_QUERY_DATA_AVAILABLE` | Emitted when the data from the query is available to a client. | -| `EVENT_SCHEMA_DATA_AVAILABLE` | Emitted when the database schema information is available to a client. | -| `EVENT_FETCH_DATA_AVAILABLE` | Emitted when more query data is available to a client through successive `fetch()` command(s). | -| `EVENT_FETCH_NO_MORE_DATA_AVAILABLE` | Emitted when no more data is available from the query. | -| `EVENT_BEGIN_TRANSACTION` | Emitted when a transaction is started in `auto_commit = OFF` mode. | -| `EVENT_SET_AUTOCOMMIT_MODE_COMPLETED` | Emitted when the auto-commit mode is changed. | -| `EVENT_COMMIT_COMPLETED` | Emitted when a commit request is completed. | -| `EVENT_ROLLBACK_COMPLETED` | Emitted when a rollback request is completed. | -| `EVENT_QUERY_CLOSED` | Emitted when a query is closed. | -| `EVENT_CONNECTION_CLOSED` | Emitted when a connection is closed. | -[**Table 1: Events emitted by node-cubrid**] + client.getQueueDepth(); -## More examples +### Transactions + +This driver fully supports SQL transactions. By default `auto_commit` mode is set +to `true` meaning after every WRITE query CUBRID Server will commit the changes to the disk. -The driver code release contains many demo examples and test cases which you can find in the following directories: - -- [/demo](https://github.com/CUBRID/node-cubrid/tree/master/demo) -- [/test](https://github.com/CUBRID/node-cubrid/tree/master/test) - -Here is another **node-cubrid** usage example which uses the `ActionQueue` helper. The `ActionQueue.enqueue` function is the same as the [async.waterfall()](https://github.com/caolan/async#waterfall) from the well-known **async** library: - - var CUBRID = require('node-cubrid'), - ActionQueue = CUBRID.ActionQueue, - Helpers = CUBRID.Helpers, - client = CUBRID.createDefaultCUBRIDDemodbConnection(); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.getEngineVersion(cb); - }, - function (engineVersion, cb) { - Helpers.logInfo('Engine version is: ' + engineVersion); - client.query('select * from code', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - - for (var k = 0; k < arr.length; k++) { - Helpers.logInfo(arr[k].toString()); - } - - client.closeQuery(queryHandle, cb); - }, - function (cb) { - Helpers.logInfo('Query closed.'); - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - } - } - ); - -You can also find more tutorials at [http://www.cubrid.org/wiki_apis/entry/cubrid-node-js-tutorials](http://www.cubrid.org/wiki_apis/entry/cubrid-node-js-tutorials). +You can begin, end, commit, and rollback transactions by calling these functions. -## Running tests + client.beginTransaction(callback); + client.endTransaction(callback); + client.commit(callback); + client.rollback(callback); + + // All `callback(err)` functions accept one argument: the error message if any. -To run tests on **node-cubrid** module: +`beginTransaction()` and `endTransaction()` functions simply call the following +`setAutoCommitMode()` by specifying a `false` or `true` arguments respectively. -1. `npm install` all testing framework development dependencies. -2. Make sure: - 1. CUBRID Server 8.4.1+ is installed on `localhost`. - 2. CUBRID Broker is listening on port `33000`. - 3. `demodb` database is running. -3. Alternatively, edit test suite connection configurations at `test/testSetup/test_Setup.js` and change the connection information. -4. `npm test` to start testing. + client.setAutoCommitMode(boolean, callback); + + // `boolean` is a boolean value which represents the auto_commit + // mode you wish to set the current transaction to. + + // The `callback(err)` function accepts one argument: the error message if any. -There are over 268K assertion tests which should all pass on CUBRID 8.4.1+. +`beginTransaction()`, `endTransaction()` and `setAutoCommitMode()` functions are +idempotent, that is you can call them multiple times and the result will be the same. -### Running tests in a Docker container +**Note:** Unlike in other DBMS vendor drivers, in **node-cubrid** when a transaction is +rolled back or committed, the `auto_commit` mode remains unchanged, i.e. `false`. This is +according to CUBRID spec. This means that after you commit/rollback the transaction and +you no longer need to execute queries in `auto_commit = false` mode, explicitly turn the +`auto_commit` mode to `true` by calling `setAutoCommitMode()` function. -For development purpose, we have created a Docker image which can be used in order to -run the tests suit. The image does not include a copy of the node-cubrid source code -as it should be available at run time to be able to run tests against the uncommitted +Moreover, enabling the auto commit mode by calling `setAutoCommitMode()` will not +commit the changes automatically. You need to explicitly `commit()` or `rollback()` the changes. -By following these steps you will install CUBRID 9.1.x inside the container and run -node-cubrid tests. +Here is a promise based example that shows how to start and end a transaction. + + client + .execute('CREATE TABLE test_tran(id INT)') + .then(() => { + return client.beginTransaction(); + }) + .then(() => { + return client.execute('INSERT INTO test_tran VALUES(1)'); + }) + .then(() => { + return client.query('SELECT * FROM test_tran'); + }) + .then(response => { + assert(response.result.RowsCount === 1); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.rollback(); + }) + .then(() => { + // **Note** that the auto commit mode is still OFF + // even after the `rollback()`. + return client.query('SELECT * FROM test_tran'); + }) + .then(response => { + assert(response.result.RowsCount === 0); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + // We are still inside the same transaction with + // auto commit mode OFF. + return client.execute('DROP TABLE test_tran'); + }) + .then(() => { + return client.commit(); + }) + .then(() => { + return client.endTransaction(); + }) + .then(() => { + return client.query("SELECT COUNT(*) FROM db_class WHERE class_name = 'test_tran'"); + }) + .then(response => { + assert(response.result.RowsCount === 0); + + // Closing a connection will automatically close + // all query statements. + return client.close(); + }); -1. Define the environment variable which point to the location of the node-cubrid -repository +### Requesting CUBRID Server information + +There are a few functions that report meta information about the server. + + /* + * `getEngineVersion()` accepts one argument: + * 1. `callback(err, version)` accepts two arguments: + * 1. `err`: an error object if any. + * 2. `version`: CUBRID Database version like `9.2.3.0005`. + */ + + // Callback style. + client.getEngineVersion(callback); + + // Promise style. + const promise = client.getEngineVersion(); + + /* + * `getActiveHost()` accepts one argument: + * 1. `callback(err, host)` accepts two arguments: + * 1. `err`: an error object if any. + * 2. `host`: an object with `host` and `port` properties that + * represents the server which the client is connected to. + */ + + // Callback style. + client.getActiveHost(callback); + + // Promise style. + const promise = client.getActiveHost(); - NODE_CUBRID_SRC=/Users/user/repos/node-cubrid +### Closing a connection -2. Then pull the Docker image: + /* + * `close()` or its alias `end()` functions accept one argument: + * The alias `end()` function is available since 2.1.0. + * 1. `callback(err)` accepts one argument: + * 1. `err`: an error object if any. + */ + + // Callback style. + client.close(callback); + client.end(callback); + + // Promise style. + const promise = client.close(); + const promise = client.end(); - docker pull lighthopper/node-cubrid:0.10-test +#### Callback style -3. Start the container by mounting the node-cubrid directory to `/node-cubrid` -inside the container: + client.close(function (err) { + if (err) { + throw err; + } else { + console.log('connection is closed'); + } + }); - docker run -it --name node-cubrid -v $NODE_CUBRID_SRC:/node-cubrid lighthopper/node-cubrid:0.10-test +#### Promise style -4. This will enter into the bash inside the container. At this point all commands you type -will be executed inside this container. Now install all NPM dependencies. + const promise = client + .connect() + .then(() => { + return client.close(); + }); - npm install +When a connection is closed by calling `close()` or `end()`, all pending/queued +requests will be removed from the internal queue. All in-flight queries will be +requested to be closed. -5. The default CUBRID Database version is 9.1.0. You can override it as follows. Supported version are: `9.1.0`, `9.0.0`, `8.4.4`, `8.4.3`, and `8.4.1`. - - CUBRID_VERSION=8.4.1 +#### Errors on closing the connection -6. Run the following command to prepare the Chef instructions. +The following errors may be emitted when the application tries to close the connection: + +1. If closing a connection was unsuccessful, an error message returned by a database is emitted. - echo '{"cubrid":{"version":"'$CUBRID_VERSION'"},"run_list":["cubrid::demodb"]}' > cubrid_chef.json +## More examples -6. Run Chef to actually install and start up CUBRID Server: +You can also find more tutorials at [http://www.cubrid.org/wiki_apis/entry/cubrid-node-js-tutorials](http://www.cubrid.org/wiki_apis/entry/cubrid-node-js-tutorials). - chef-solo -c test/testSetup/solo.rb -j cubrid_chef.json -r http://sourceforge.net/projects/cubrid/files/CUBRID-Demo-Virtual-Machines/Vagrant/chef-cookbooks.tar.gz/download +## Running tests -7. Now CUBRID is running. Run the node-cubrid tests as follows. +To run tests on **node-cubrid** module: - npm test +1. Make sure you are using Node `v4` or higher. +2. `npm install` all development dependencies. +3. Make sure: + 1. CUBRID Server 8.4.1+ is installed on `localhost`. + 2. CUBRID Broker is listening on port `33000`. + 3. `demodb` database is running. + 4. Alternatively, edit the test suite connection configurations at + `test/testSetup/index.js` and change the connection information. +4. `npm test` to start testing. +4. `npm run coverage` to prepare the code coverage report. -### Build a Docker container +### Running CUBRID in a Docker container -Run the following in order to build an image for node-cubrid testing. +If you do not have CUBRID already running, you can use the publicly available Docker image. +In fact this method is recommended as you can spin up multiple versions of CUBRID on +the same machine and run tests against all of them at once. - docker build -t="lighthopper/node-cubrid:0.10-test" . +Run the following command to start CUBRID 9.2.3.0005 and its `demodb` database +inside a Docker container. -## What's next + docker run -p 33000:33000 --name cubrid lighthopper/cubrid:9.2.3.0005 ./create-start-demodb.sh -We intend to continuosly improve this driver, by adding more features and improving the existing code base. +Refer to https://github.com/kadishmal/cubrid-docker for other versions. -And you are more than welcome to suggest what we should improve or add - please let us know! :) +## What's next +We intend to continuously improve this driver, by adding more features and improving the existing code base. +You are more than welcome to suggest what we should improve or add - please let us know! :) ## Authors and Contributors @@ -936,8 +1226,8 @@ We welcome new contributors and hope you will enjoy using and coding with CUBRID We would like to say thanks to the following people & projects for inspiration, for the code we have (re)used and for doing such a great job for the open-source community! -- [https://github.com/caolan/async](https://github.com/caolan/async) -- [https://github.com/felixge/node-mysql](https://github.com/felixge/node-mysql) -- [https://github.com/jeromeetienne/microcache.js](https://github.com/jeromeetienne/microcache.js) +- [https://github.com/caolan/async](https://github.com/caolan/async) +- [https://github.com/felixge/node-mysql](https://github.com/felixge/node-mysql) +- [https://github.com/jeromeetienne/microcache.js](https://github.com/jeromeetienne/microcache.js) -... Stay tuned for the next great driver releases! :) +... Stay tuned for the next great driver release! :) diff --git a/demo/E2E/E2E_01.js b/demo/E2E/E2E_01.js deleted file mode 100644 index 1e0bb52..0000000 --- a/demo/E2E/E2E_01.js +++ /dev/null @@ -1,67 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(), - Result2Array = require('../../src/resultset/Result2Array'); - -var sql = 'select * from game'; - -client.connect(function (err) { - if (err) { - throw err.message; - } else { - console.log('Connected successfully to ' + client.brokerServer + ':' + client.connectionBrokerPort + '.'); - client.getEngineVersion(function (err, result) { - if (err) { - throw err.message; - } else { - console.log('CUBRID engine version is: ' + result); - console.log('Querying: [' + sql + ']...'); - client.query(sql, function (err, queryResults, queryHandle) { - if (err) { - throw err.message; - } else { - console.log('Query results - Rows count: ' + Result2Array.TotalRowsCount(queryResults)); - console.log('Query results - Column names: ' + Result2Array.ColumnNamesArray(queryResults)); - console.log('Query results - Column data types: ' + Result2Array.ColumnTypesArray(queryResults)); - console.log('Query results - Data [displaying only the first 5 rows]:'); - var arr = Result2Array.RowsArray(queryResults); - for (var j = 0; j < 5; j++) { - console.log(arr[j].toString()); - } - console.log('Fetching more results...'); - client.fetch(queryHandle, function (err, result) { - if (err) { - throw err.message; - } else { - if (result) { - console.log('Fetch results - Data [displaying only the first 5 rows]:'); - var arr = Result2Array.RowsArray(result); - for (var k = 0; k < 5; k++) { - console.log(arr[k].toString()); - } - } else { - console.log('There is no more data to fetch.'); - } - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err.message; - } else { - console.log('Query closed.'); - client.close(function (err) { - if (err) { - throw err.message; - } else { - console.log('Connection closed.'); - console.log('Test passed.'); - } - }) - } - }) - } - }) - } - }) - } - }) - } -}); - - diff --git a/demo/E2E/E2E_02.js b/demo/E2E/E2E_02.js deleted file mode 100644 index 2cf44f5..0000000 --- a/demo/E2E/E2E_02.js +++ /dev/null @@ -1,60 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(), - Result2Array = require('../../src/resultset/Result2Array'); - -var sqlsSetup = ['drop table if exists node_test', - 'create table node_test(id int)', - 'insert into node_test values(1), (22)']; -var sqlQuery = 'select * from node_test'; -var sqlsCleanup = 'drop table node_test'; - -client.connect(function (err) { - if (err) { - throw err.message; - } else { - console.log('Connected to ' + client.brokerServer + ':' + client.connectionBrokerPort + '.'); - console.log('Creating test data...'); - client.batchExecuteNoQuery(sqlsSetup, function (err) { - if (err) { - throw err.message; - } else { - console.log('Querying: [' + sqlQuery + ']'); - client.query(sqlQuery, function (err, queryResults, queryHandle) { - if (err) { - throw err.message; - } else { - console.log('Query results - Rows count: ' + Result2Array.TotalRowsCount(queryResults)); - console.log('Query results - Column names: ' + Result2Array.ColumnNamesArray(queryResults)); - console.log('Query results - Column data types: ' + Result2Array.ColumnTypesArray(queryResults)); - console.log('Query results:'); - var arr = Result2Array.RowsArray(queryResults); - for (var j = 0; j < arr.length; j++) { - console.log('Row ' + j + ': ' + arr[j].toString()); - } - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err.message; - } else { - client.batchExecuteNoQuery(sqlsCleanup, function (err) { - if (err) { - throw err.message; - } else { - console.log('Cleanup done.'); - client.close(function (err) { - if (err) { - throw err.message; - } else { - console.log('Connection closed.'); - console.log('Test passed.'); - } - }) - } - }) - } - }) - } - }) - } - }) - } -}); - diff --git a/demo/E2E/E2E_03.js b/demo/E2E/E2E_03.js deleted file mode 100644 index e77f381..0000000 --- a/demo/E2E/E2E_03.js +++ /dev/null @@ -1,81 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(), - ActionQueue = require('../../src/utils/ActionQueue'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var sql = 'select * from game where rownum < 500'; -var returnedQueryHandle; -var fetchResult; - -ActionQueue.enqueue( - [ - function (cb) { - client.connect(cb); - console.log('Connected successfully to ' + client.brokerServer + ':' + client.connectionBrokerPort + '.'); - }, - - function (cb) { - console.log('Executing query: [' + sql + ']...'); - client.query(sql, cb); - }, - - function (queryResults, queryHandle, cb) { - console.log('Query results - Rows count: ' + Result2Array.TotalRowsCount(queryResults)); - console.log('Query results - Column names: ' + Result2Array.ColumnNamesArray(queryResults)); - console.log('Query results - Column data types: ' + Result2Array.ColumnTypesArray(queryResults)); - console.log('Query results - Data [displaying only the first 5 rows]:'); - var arr = Result2Array.RowsArray(queryResults); - for (var j = 0; j < 5; j++) { - console.log(arr[j].toString()); - } - returnedQueryHandle = queryHandle; - console.log('Fetching more results...'); - - ActionQueue.while( - function () { - return fetchResult !== null; - }, - - function (callback) { - client.fetch(returnedQueryHandle, function (err, result) { - if (result !== null) { - console.log('Fetch more results - Data [displaying only the first 5 rows]:'); - var arr = Result2Array.RowsArray(result); - for (var k = 0; k < 5; k++) { - console.log(arr[k].toString()); - } - } - fetchResult = result; - callback.call(err); - }) - }, - - function (err) { - if (err) { - throw err.message; - } else { - cb.call(err); - } - } - ) - }, - - function (cb) { - client.closeQuery(returnedQueryHandle, cb); - }, - - function (cb) { - client.close(cb); - } - ], - - function (err) { - if (err == null) { - setTimeout(function () { - console.log('Test passed.'); - }, 1000); - } else { - throw err.message; - } - } -); diff --git a/demo/Server/DemoServer.js b/demo/Server/DemoServer.js deleted file mode 100644 index f663bca..0000000 --- a/demo/Server/DemoServer.js +++ /dev/null @@ -1,79 +0,0 @@ -var http = require('http'), - Result2Array = require('../../src/resultset/Result2Array'), - client = require('../../index.js').createDefaultCUBRIDDemodbConnection(); - -// Note: Open http://localhost:8888 to test this - -function resultToHtmlTable(result) { - var ret = ''; - - ret += '

Table `code` content

'; - ret += ' '; - - var arr = Result2Array.RowsArray(result); - for (var i = 0; i < arr.length; i++) { - ret += ' '; - for (var j = 0; j < arr[i].length; j++) { - ret += ' '; - } - ret += ' '; - } - ret += '
'; - ret += ' ' + arr[i][j]; - ret += '
'; - - return ret; -} - -http.createServer(function (request, response) { - if (request.url == '/') { - client.connect(function (err) { - if (err) { - response.end(err.message); - } else { - client.query('select * from code', function (err, result, queryHandle) { - if (err) { - response.end(err.message); - } else { - var output = ''; - output += ''; - output += ' '; - output += ' CUBRID Node.js Driver test'; - output += ' '; - output += ' '; - output += ' '; - output += resultToHtmlTable(result); - output += ' '; - output += ''; - client.closeQuery(queryHandle, function (err) { - if (err) { - response.end(err.message); - } else { - client.close(function (err) { - if (err) { - response.end(err.message); - } - }); - response.writeHead(200, {'Content-Type' : 'text/html'}); - response.end(output); - } - }) - } - }) - } - }) - } else { - response.writeHead(404, {'Content-Type' : 'text/plain'}); - response.end('Error: Unexpected request!'); - } -}).listen(8888, 'localhost'); - -// Prevent server from closing on uncaught error -process.on('uncaughtException', function (err) { - console.log('Exception: ' + err.message); -}); - diff --git a/demo/Web site (1) - Basic/app.js b/demo/Web site (1) - Basic/app.js deleted file mode 100644 index 1905bc9..0000000 --- a/demo/Web site (1) - Basic/app.js +++ /dev/null @@ -1,61 +0,0 @@ -var fs = require('fs'); -var db_helper = require("./db_helper.js"); - -var http = require('http').createServer(function handler(req, res) { - fs.readFile(__dirname + '/index.html', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading index.html!'); - } else { - res.writeHead(200); - res.end(data); - } - }); -}).listen(8888); - -var io = require('c:/Program Files (x86)/nodejs/node_modules/socket.io').listen(http); - -io.sockets.on('connection', function (client) { - console.log('Client connected.'); - - // Populate data on first page load - db_helper.get_employees(function (employees, columns, rowsCount) { - client.emit('populate', employees, columns, rowsCount); - }); - - client.on('refresh', function () { - console.log('Repopulate employees on client...'); - db_helper.get_employees(function (employees, columns, rowsCount) { - console.log('Sent [populate] event...'); - client.emit('populate', employees, columns, rowsCount); - }); - }); - - client.on('add employee', function (data) { - console.log('Adding employee...'); - db_helper.add_employee(data, function () { - console.log('Repopulate employees on client...'); - setTimeout(function () { - db_helper.get_employees(function (employees, columns, rowsCount) { - console.log('Sent [populate] event...'); - client.emit('populate', employees, columns, rowsCount); - }); - }, 1000); - }) - }); - - client.on('delete employee', function (data) { - console.log('Deleting employee(s)...'); - db_helper.delete_employee(data, function () { - console.log('Repopulate employees on client...'); - setTimeout(function () { - db_helper.get_employees(function (employees, columns, rowsCount) { - console.log('Sent [populate] event...'); - client.emit('populate', employees, columns, rowsCount); - }); - }, 1000); - }) - }); - -}); - diff --git a/demo/Web site (1) - Basic/db_helper.js b/demo/Web site (1) - Basic/db_helper.js deleted file mode 100644 index 2bc5229..0000000 --- a/demo/Web site (1) - Basic/db_helper.js +++ /dev/null @@ -1,100 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(); -var Result2Array = require('../../src/resultset/Result2Array'); - -exports.add_employee = function (data, callback) { - var sql = "insert into employees (f_name, salary) values ('" + data.name + "'," + data.salary + ")"; - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Adding employee: ' + data.name + ' with salary: ' + data.salary); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - } - }); - - callback(); - } - }); - } - }); -}; - -exports.delete_employee = function (data, callback) { - var sql = "delete from employees where id in (" + data.toString() + ")"; - - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Deleting employees: ' + data.toString()); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - } - }); - - callback(); - } - }); - } - }); -}; - -exports.get_employees = function (callback) { - var sql = "select * from employees order by id asc"; - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Querying: ' + sql); - client.query(sql, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - console.log(err.message); - } else { - console.log('Query closed.'); - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - } - }); - } - }); - - var emp = Result2Array.RowsArray(result); - var cols = Result2Array.ColumnNamesArray(result); - var cnt = Result2Array.TotalRowsCount(result); - // Callback function returns employees array - callback(emp, cols, cnt); - } - }); - } - }); -}; - diff --git a/demo/Web site (1) - Basic/favicon.ico b/demo/Web site (1) - Basic/favicon.ico deleted file mode 100644 index e585a787e1b1e5e796b846a3c212d9c86705b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&ZBSHI7(SRy{~Va9)KJ7PT(Blnq(DZrAC2RTjbl~Q znnS|S4?tP793^z1AZQ5u0LA!NQDg;L6P6Vb1$LL^={@)EUDy?H@3Nz3=HYzY_kEuC zym#-p?}afpHifynGiu&!`&7n!_{dwF7tnetttn{AP582#@RzYwv~J%pK|6gfdxEQv zzqGM+8Gh)BeZ1i~7NHt{EKxHY(Z!8pG5)f-{wIXC2P2@F2^@#JqQ^J3yJ9>S0b{{h zgm#1o{t`!8=WaX8N2jK9;TTM1Fsaty{f=NPyT+{Gdr9y5=20hFG4?-1RhAM}hoW#P zCjk#S^yoA9qIXCypi-|#bdw%?o4SzFJWK$Ru8CBpfqvv{2tdLD2BqILG^#4_$Cg?f zoy=B%{Y?19f)ha0RlxAD583OM3%)5YPea4;auh5r!|#zbHvT_y|C5AY3BvfUgUHo%ukT+Tu^Xu?;rVHWPhgFL9Ki@{<|_ zCIQcU2)KmpF~>~cD-m&ys!wb2Mj|jJlKjJfxXTm^aX8vcy#{0#11S`5!f~MG zuA`nKb`6wYe+A$>8)$DES(h_X(|(r{M@PFHFI(Gxt^l{SwrkRiG0N*Cz|R?P!YYDv z&U`DJO|&qoNqTbo%MUB$y13MSmv%i8{@dzOPB~=BceY_>Jwv80Mvj}yY?XJm!>@^9 zK_kP_?l_n6I!eU#7t^`vPv_`DiXpo@-ceVV*d=p)+CP5>NHIK#JPeynfVK`v`khvN zYYY@mrf#oG_BS4hpevK1|vR80uCF7}V0sx|fO@b02!lchP2O#=nLZ8)%I!&mkS=ZK80n>j2yv~Z4 zP5sOwV1}jVMRW&(A8Tysvqh1D4~t!px<;rxn2G(+R=>yrOh8> z{{xr?2VfpDSutcZT5Zm5s1`JN?JntS^EKFUnlvJS=RO(%+eAmhbztS+qx3D>F-=xV z*@NP+i^x-qwm@d!+>Y0 z1mu`X-y`fjpjOhSZxVJ4u)p6DpEEtrL(WS@xJ~(=NMFc*9`L1%?;1zrDWt=#E%Q2d zoDuWQKA>L02J!wY==uM+)=@@zcEj{yxPL(hC7p4v?gIjqBk+p_E@*%=cjR$8W8Kq9 zd;Jq=rgKa}!$n}A&lxuPKJ>U^)7!ut58#!#BD`o^Ss|ZmG9D4{0E$`kJ?jhjcvAl9 z-S?#1W_s@YyhxwocpCbAzmXJ!r#o=|DePa$_xiVh(h_O* - - - - CUBRID Node.js Demo - - - - - - - -

CUBRID node.js demo (1)

- -

Employees data management

-
-
Create new employee
-
- -
- Name: - -     - Salary: - -
-
- -
-
-
List of employees - -

-
    -
    - - -
    -
    -Status: - -

    -
    -Options: Simulate 10 sec. wait response time for queries - -
    - - - - diff --git a/demo/Web site (1) - Basic/readme.txt b/demo/Web site (1) - Basic/readme.txt deleted file mode 100644 index b0daafe..0000000 --- a/demo/Web site (1) - Basic/readme.txt +++ /dev/null @@ -1,14 +0,0 @@ -Adapted from: -https://github.com/aluksidadi/Nodejs-Socketio-Mysql-Demo - -Setup: -======================================================================= -- Run setup.sql in CUBRID, to prepare the demo table and the initial data - - -How to run: -======================================================================= -- Run app.js with node -- Open http://localhost:8888 in your browser - - diff --git a/demo/Web site (1) - Basic/setup.sql b/demo/Web site (1) - Basic/setup.sql deleted file mode 100644 index dae87d1..0000000 --- a/demo/Web site (1) - Basic/setup.sql +++ /dev/null @@ -1,13 +0,0 @@ --- Make sure you run this script in the demodb database, with the user 'public'! - -DROP TABLE IF EXISTS employees; - -CREATE TABLE employees( - id INT NOT NULL AUTO_INCREMENT, - f_name VARCHAR(40) NOT NULL DEFAULT 'unknown', - salary INT NOT NULL DEFAULT 100000, - PRIMARY KEY (id) -); - -INSERT INTO employees(f_name, salary) VALUES ('John Tank', 50000), ('Raja Singh', 15000), ('Joe Smith', 10000); - diff --git a/demo/Web site (2) - Paging/app.js b/demo/Web site (2) - Paging/app.js deleted file mode 100644 index 1271c63..0000000 --- a/demo/Web site (2) - Paging/app.js +++ /dev/null @@ -1,95 +0,0 @@ -var fs = require('fs'); -var db_helper = require("./db_helper.js"); - -var delay = (Math.random() * 100) + 200; // "Artificial" operations delay, to simulate a higher network response time -var page_size = 10; - -var http = require('http').createServer(function (req, res) { - switch (req.url) { - case '/': - fs.readFile(__dirname + '/index.html', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading index.html!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/html'}); - res.end(data); - } - }); - break; - case '/cubrid.png': - fs.readFile(__dirname + '/cubrid.png', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading cubrid.png!'); - } else { - res.writeHead(200, {'Content-Type' : 'image/png'}); - res.end(data); - } - }); - break; - default: - res.writeHead(404); - return res.end('Error loading: ' + res.url + '!'); - break; - } -}).listen(8888); - -//TODO Update this with your own socket.io installation path -var io = require('c:/Program Files (x86)/nodejs/node_modules/socket.io').listen(http); -//var io = require('socket.io'); - -function populateClient(client, startFrom, selectCount) { - db_helper.get_employees(startFrom, selectCount, function (employees, columns, rowsCount) { - console.log('Sent [populate] event to client, with ' + selectCount + ' rows from start position ' + startFrom + '.'); - client.emit('populate', employees, columns, rowsCount); - }); -} - -io.sockets.on('connection', function (client) { - console.log('Client connected.'); - - // Populate data on first page load - db_helper.setup(function () { - populateClient(client, 1, page_size); // First 10 rows - }); - - client.on('page', function (startFrom, selectCount) { - console.log('Got [page] request from client.'); - setTimeout(function () { - populateClient(client, startFrom, selectCount); - }, delay); - }); - - client.on('add employee', function (data) { - console.log('Got [add employee] request from client.'); - db_helper.add_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size); - }, delay); - }) - }); - - client.on('delete employee', function (data) { - console.log('Got [delete employee] request from client.'); - db_helper.delete_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size); - }, delay); - }) - }); - - client.on('update employee', function (data) { - console.log('Got [update employee] request from client.'); - db_helper.update_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size); - }, delay); - }) - }); - -}); - -io.sockets.on('disconnect', function () { - console.log('Client disconnected.'); -}); diff --git a/demo/Web site (2) - Paging/cubrid.png b/demo/Web site (2) - Paging/cubrid.png deleted file mode 100644 index ae3bab1d10ab5f37bb6a6842499937c62916e454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1QJO^K~z{r#g=PK zQ)d{*-Vt{gax7>%wnQ38i~=Mcv)P`oQVrAW`e=n@RBjm7^B87 zQnh#?f{@SzyhKs(0tRU4D|K`SK5GfV^D1mf&c6u7QpB8!P@#7 zXetAC&IHQl1XV(PV5S~;QL7pv<|$}dScmST&w$#^z%nvlCDRgGcT-lHsVDAzuL>e2 zfVLHls2_h4X3bx~<)48SWWH{ssI{L0`Sja#54f2NRMEQQr>GFB0oqpTpi8epW7;X0 zPe%jD1FFgOY0|@OiV&&*_|AFordemvIMolZ1z1kzYeq==L@bHvE@glK&e8e;=?qC< z91()O8F0bwaKr8K2IO+lh)LJ2B@IGQ9=thID*|XNz$NN|0&>27R8Sm<_W&;e2e=p= zf*H+yNXYsfpJ!JfDethLF|__}gH}Lj$vzL=bWJG0aRWVh16ZE|eb0lkQgeFg(bcRV zfE=Q0`;bfsCFn5pf=w(HHD$M`u_eeZI3*a|np+cq5HfJAQ@OdC=~VP*fCI=O2K7Xs z2lOTz*cUs&Chr1E{|#*FUVA1B@g(et{5@Bo5$I`d!K-DtJAVX%1w-M2XK=oNi$sMG)T z_QU9W29xv8P`NBHIm`h)cJ$!EfF542lO}}zvW3X003hu#Q|kdc-~y|Zw9kQZ8uhI& zsZaFjV2{2TD&uT0V-|_-`c!PTRz%F0s*`YzmPpI&VCAHJb{x6`6u&AX=hG;7W(3Uw z>za(Be<~Hrr3!$1$f+g>3eI(y07?Xa>C#U5Ze`+7`ZWC5dqBBY!cBpaMNT!9p>#kQ zfCulIf=#^#qXrKYAOJO?ftpYXUTQlLbMSWu&}UH1zeGGc z_tUB#!@=9zz)R4Xh~gM)KG;v(0E;a}SointxY8~+iW}hC|M%ZHICty7i P00000NkvXXu0mjfMj;8T diff --git a/demo/Web site (2) - Paging/db_helper.js b/demo/Web site (2) - Paging/db_helper.js deleted file mode 100644 index 5594f4e..0000000 --- a/demo/Web site (2) - Paging/db_helper.js +++ /dev/null @@ -1,207 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(); -var Result2Array = require('../../src/resultset/Result2Array'); - -exports.setup = function (callback) { - var empNames = [ - 'John Doe', - 'Don Mae', - 'Missy Glenn', - 'John Tank', - 'Alec Willson', - 'Donna Doe', - 'Dana Jo', - 'Darling Mo', - 'Master Danny', - 'Senior Dan', - 'Maia Moore', - 'Secret Agent', - 'Dancing Queen', - 'Funny Guy', - 'Daniel Thor', - 'Doctor King', - 'Super Man', - 'Major John Ark', - 'Smiley Man', - 'Bud Thommas', - 'Ala Viking', - 'Beauty Beast', - 'Eleanor Karat' - ]; - - var sqls = []; - sqls.push('drop table if exists employees'); - sqls.push('create table employees( \ - id int not null auto_increment, \ - f_name varchar(40) not null, \ - salary int not null, \ - primary key (id))'); - for (var i = 0; i < empNames.length; i++) { - sqls.push("insert into employees(f_name,salary) values('" + empNames[i] + "'," + Math.random() * 10000 + ")"); - } - console.log(sqls); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Setup employees...'); - client.batchExecuteNoQuery(sqls, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.add_employee = function (data, callback) { - var sql = "insert into employees (f_name, salary) values ('" + data.name + "'," + data.salary + ")"; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Adding employee: ' + data.name + ' with salary: ' + data.salary); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.delete_employee = function (data, callback) { - var sql = "delete from employees where id in (" + data.toString() + ")"; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Deleting employees: ' + data.toString()); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.update_employee = function (data, callback) { - var sql = "update employees set f_name='" + data.name + "', salary=" + data.salary + " where id=" + data.id; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Updating employee: ' + data.toString()); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.get_employees = function (startFrom, selectCount, callback) { - var sql = "select * from employees where rownum between " + startFrom + " and " + (startFrom + selectCount - 1); - console.log(sql); - - var data = null; - var cols = null; - var totalRows = 0; - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Querying: ' + sql); - client.query(sql, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - data = Result2Array.RowsArray(result); - cols = Result2Array.ColumnNamesArray(result); - client.closeQuery(queryHandle, function (err) { - if (err) { - console.log(err.message); - } else { - console.log('Query closed.'); - var sqlCount = "select count(*) from employees"; - console.log(sqlCount); - client.query(sqlCount, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - totalRows = Result2Array.RowsArray(result)[0][0]; - client.closeQuery(queryHandle, function (err) { - if (err) { - console.log(err.message); - } else { - console.log('Query closed.'); - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(data, cols, totalRows); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/demo/Web site (2) - Paging/favicon.ico b/demo/Web site (2) - Paging/favicon.ico deleted file mode 100644 index e585a787e1b1e5e796b846a3c212d9c86705b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&ZBSHI7(SRy{~Va9)KJ7PT(Blnq(DZrAC2RTjbl~Q znnS|S4?tP793^z1AZQ5u0LA!NQDg;L6P6Vb1$LL^={@)EUDy?H@3Nz3=HYzY_kEuC zym#-p?}afpHifynGiu&!`&7n!_{dwF7tnetttn{AP582#@RzYwv~J%pK|6gfdxEQv zzqGM+8Gh)BeZ1i~7NHt{EKxHY(Z!8pG5)f-{wIXC2P2@F2^@#JqQ^J3yJ9>S0b{{h zgm#1o{t`!8=WaX8N2jK9;TTM1Fsaty{f=NPyT+{Gdr9y5=20hFG4?-1RhAM}hoW#P zCjk#S^yoA9qIXCypi-|#bdw%?o4SzFJWK$Ru8CBpfqvv{2tdLD2BqILG^#4_$Cg?f zoy=B%{Y?19f)ha0RlxAD583OM3%)5YPea4;auh5r!|#zbHvT_y|C5AY3BvfUgUHo%ukT+Tu^Xu?;rVHWPhgFL9Ki@{<|_ zCIQcU2)KmpF~>~cD-m&ys!wb2Mj|jJlKjJfxXTm^aX8vcy#{0#11S`5!f~MG zuA`nKb`6wYe+A$>8)$DES(h_X(|(r{M@PFHFI(Gxt^l{SwrkRiG0N*Cz|R?P!YYDv z&U`DJO|&qoNqTbo%MUB$y13MSmv%i8{@dzOPB~=BceY_>Jwv80Mvj}yY?XJm!>@^9 zK_kP_?l_n6I!eU#7t^`vPv_`DiXpo@-ceVV*d=p)+CP5>NHIK#JPeynfVK`v`khvN zYYY@mrf#oG_BS4hpevK1|vR80uCF7}V0sx|fO@b02!lchP2O#=nLZ8)%I!&mkS=ZK80n>j2yv~Z4 zP5sOwV1}jVMRW&(A8Tysvqh1D4~t!px<;rxn2G(+R=>yrOh8> z{{xr?2VfpDSutcZT5Zm5s1`JN?JntS^EKFUnlvJS=RO(%+eAmhbztS+qx3D>F-=xV z*@NP+i^x-qwm@d!+>Y0 z1mu`X-y`fjpjOhSZxVJ4u)p6DpEEtrL(WS@xJ~(=NMFc*9`L1%?;1zrDWt=#E%Q2d zoDuWQKA>L02J!wY==uM+)=@@zcEj{yxPL(hC7p4v?gIjqBk+p_E@*%=cjR$8W8Kq9 zd;Jq=rgKa}!$n}A&lxuPKJ>U^)7!ut58#!#BD`o^Ss|ZmG9D4{0E$`kJ?jhjcvAl9 z-S?#1W_s@YyhxwocpCbAzmXJ!r#o=|DePa$_xiVh(h_O* - - - -CUBRID Node.js Demo - - - - - - - - -

    - - CUBRID node.js demo (2) -

    - -

    Employees data management

    -
    -
    Create new employee
    -
    - -
    - Id: - -     - Name: - -     - Salary: - -
    -
    - -
    - - -
    -
    -
    - List of employees   - Displaying rows from -

    - to -

    - (out of a total of -

    - rows.) -

    -
    -

    - -
    -
    - -
    -
    - - - - -
    -
    -
    -
    -
    - Status: - -

    -
    -
    -
    - - - - diff --git a/demo/Web site (2) - Paging/readme.txt b/demo/Web site (2) - Paging/readme.txt deleted file mode 100644 index a65f6ef..0000000 --- a/demo/Web site (2) - Paging/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -Adapted from: -https://github.com/aluksidadi/Nodejs-Socketio-Mysql-Demo - -How to run: -======================================================================= -- Run app.js with node -- Open http://localhost:8888 in your browser - - diff --git a/demo/Web site (3) - Filter/app.js b/demo/Web site (3) - Filter/app.js deleted file mode 100644 index 284e6cc..0000000 --- a/demo/Web site (3) - Filter/app.js +++ /dev/null @@ -1,112 +0,0 @@ -var fs = require('fs'); -var db_helper = require("./db_helper.js"); - -var delay = (Math.random() * 100) + 200; // Introduce a delay, to simulate a higher network response time -var page_size = 10; // Rows displayed per page - -var http = require('http').createServer(function handler(req, res) { - switch (req.url) { - case '/': - fs.readFile(__dirname + '/index.html', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading index.html!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/html'}); - res.end(data); - } - }); - break; - case '/cubrid.png': - fs.readFile(__dirname + '/cubrid.png', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading cubrid.png!'); - } else { - res.writeHead(200, {'Content-Type' : 'image/png'}); - res.end(data); - } - }); - break; - case '/site.css': - fs.readFile(__dirname + '/site.css', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading site.css!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/css'}); - res.end(data); - } - }); - break; - default: - res.writeHead(404); - return res.end('Error loading: ' + res.url + '!'); - break; - } -}).listen(8888); - -//TODO Update this with your own socket.io installation path -var io = require('c:/Program Files (x86)/nodejs/node_modules/socket.io').listen(http); -//var io = require('socket.io'); - -function populateClient(client, startFrom, selectCount, filter) { - db_helper.get_employees(startFrom, selectCount, filter, function (employees, columns, rowsCount) { - console.log('Sent [populate] event to client, with ' + selectCount + ' rows from start position ' + startFrom + '.'); - client.emit('populate', employees, columns, rowsCount); - }); -} - -io.sockets.on('connection', function (client) { - console.log('Client connected.'); - - client.on('setup', function () { - console.log('Initial setup needed...'); - db_helper.setup(function () { - populateClient(client, 1, page_size, ''); - }); - }); - - client.on('refresh', function (filter) { - populateClient(client, 1, page_size, filter); // First [page_size] rows - }); - - client.on('page', function (startFrom, selectCount, filter) { - console.log('Got [page] request from client.'); - setTimeout(function () { - populateClient(client, startFrom, selectCount, filter); - }, delay); - }); - - client.on('add employee', function (data, filter) { - console.log('Got [add employee] request from client.'); - db_helper.add_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - - client.on('delete employee', function (data, filter) { - console.log('Got [delete employee] request from client.'); - db_helper.delete_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - - client.on('update employee', function (data, filter) { - console.log('Got [update employee] request from client.'); - db_helper.update_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - -}); - -io.sockets.on('disconnect', function () { - console.log('Client disconnected.'); -}); diff --git a/demo/Web site (3) - Filter/cubrid.png b/demo/Web site (3) - Filter/cubrid.png deleted file mode 100644 index ae3bab1d10ab5f37bb6a6842499937c62916e454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1QJO^K~z{r#g=PK zQ)d{*-Vt{gax7>%wnQ38i~=Mcv)P`oQVrAW`e=n@RBjm7^B87 zQnh#?f{@SzyhKs(0tRU4D|K`SK5GfV^D1mf&c6u7QpB8!P@#7 zXetAC&IHQl1XV(PV5S~;QL7pv<|$}dScmST&w$#^z%nvlCDRgGcT-lHsVDAzuL>e2 zfVLHls2_h4X3bx~<)48SWWH{ssI{L0`Sja#54f2NRMEQQr>GFB0oqpTpi8epW7;X0 zPe%jD1FFgOY0|@OiV&&*_|AFordemvIMolZ1z1kzYeq==L@bHvE@glK&e8e;=?qC< z91()O8F0bwaKr8K2IO+lh)LJ2B@IGQ9=thID*|XNz$NN|0&>27R8Sm<_W&;e2e=p= zf*H+yNXYsfpJ!JfDethLF|__}gH}Lj$vzL=bWJG0aRWVh16ZE|eb0lkQgeFg(bcRV zfE=Q0`;bfsCFn5pf=w(HHD$M`u_eeZI3*a|np+cq5HfJAQ@OdC=~VP*fCI=O2K7Xs z2lOTz*cUs&Chr1E{|#*FUVA1B@g(et{5@Bo5$I`d!K-DtJAVX%1w-M2XK=oNi$sMG)T z_QU9W29xv8P`NBHIm`h)cJ$!EfF542lO}}zvW3X003hu#Q|kdc-~y|Zw9kQZ8uhI& zsZaFjV2{2TD&uT0V-|_-`c!PTRz%F0s*`YzmPpI&VCAHJb{x6`6u&AX=hG;7W(3Uw z>za(Be<~Hrr3!$1$f+g>3eI(y07?Xa>C#U5Ze`+7`ZWC5dqBBY!cBpaMNT!9p>#kQ zfCulIf=#^#qXrKYAOJO?ftpYXUTQlLbMSWu&}UH1zeGGc z_tUB#!@=9zz)R4Xh~gM)KG;v(0E;a}SointxY8~+iW}hC|M%ZHICty7i P00000NkvXXu0mjfMj;8T diff --git a/demo/Web site (3) - Filter/db_helper.js b/demo/Web site (3) - Filter/db_helper.js deleted file mode 100644 index 9e8a38f..0000000 --- a/demo/Web site (3) - Filter/db_helper.js +++ /dev/null @@ -1,216 +0,0 @@ -var client = require('../../index.js').createDefaultCUBRIDDemodbConnection(); -var Result2Array = require('../../src/resultset/Result2Array'); - -exports.setup = function (callback) { - var empNames = [ - 'John Doe', - 'Don Mae', - 'Missy Glenn', - 'John Tank', - 'Alec Willson', - 'Donna Doe', - 'Dana Joe', - 'Darling Mo', - 'Master Commander', - 'Senior Dan', - 'Maia Moore', - 'Secret Agent', - 'Dancing Queen', - 'Funny Guy', - 'Daniel Thor', - 'Doctor King', - 'Super Man', - 'Major John Ark', - 'Smiley Man', - 'Bud Thommas', - 'Alan Viking', - 'Beauty Beast', - 'Eleanor Karat' - ]; - - var sqls = []; - sqls.push('drop table if exists employees'); - sqls.push('create table employees( \ - id int not null auto_increment, \ - f_name varchar(40) not null, \ - salary int not null, \ - primary key (id))'); - for (var i = 0; i < empNames.length; i++) { - sqls.push("insert into employees(f_name,salary) values('" + empNames[i] + "'," + Math.random() * 10000 + ")"); - } - console.log(sqls); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Setup employees...'); - client.batchExecuteNoQuery(sqls, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.add_employee = function (data, callback) { - var sql = "insert into employees (f_name, salary) values ('" + data.name + "'," + data.salary + ")"; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Adding employee: ' + data.name + ' with salary: ' + data.salary); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.delete_employee = function (data, callback) { - var sql = "delete from employees where id in (" + data.toString() + ")"; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Deleting employees: ' + data.toString()); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.update_employee = function (data, callback) { - var sql = "update employees set f_name='" + data.name + "', salary=" + data.salary + " where id=" + data.id; - console.log(sql); - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Updating employee: ' + data.toString()); - client.batchExecuteNoQuery(sql, function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(); - } - }); - } - }); - } - }); -}; - -exports.get_employees = function (startFrom, selectCount, filter, callback) { - var sql = "select * from employees"; - if (filter != '') { - sql += " where f_name like '" + filter + "'"; - } - sql += " order by f_name asc"; - sql += " for orderby_num() between " + startFrom + " and " + (startFrom + selectCount - 1); - console.log(sql); - - var data = null; - var cols = null; - var totalRows = 0; - - client.connect(function (err) { - if (err) { - throw err; - } else { - console.log('Connected.'); - console.log('Querying: ' + sql); - client.query(sql, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - data = Result2Array.RowsArray(result); - cols = Result2Array.ColumnNamesArray(result); - client.closeQuery(queryHandle, function (err) { - if (err) { - console.log(err.message); - } else { - console.log('Query closed.'); - var sqlCount = "select count(*) from employees"; - if (filter != '') { - sqlCount += " where (f_name like '" + filter + "')"; - } - console.log(sqlCount); - client.query(sqlCount, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - totalRows = Result2Array.RowsArray(result)[0][0]; - console.log('Found ' + totalRows + ' rows.'); - client.closeQuery(queryHandle, function (err) { - if (err) { - console.log(err.message); - } else { - console.log('Query closed.'); - client.close(function (err) { - if (err) { - throw err; - } else { - console.log('Connection closed.'); - callback(data, cols, totalRows); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/demo/Web site (3) - Filter/favicon.ico b/demo/Web site (3) - Filter/favicon.ico deleted file mode 100644 index e585a787e1b1e5e796b846a3c212d9c86705b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&ZBSHI7(SRy{~Va9)KJ7PT(Blnq(DZrAC2RTjbl~Q znnS|S4?tP793^z1AZQ5u0LA!NQDg;L6P6Vb1$LL^={@)EUDy?H@3Nz3=HYzY_kEuC zym#-p?}afpHifynGiu&!`&7n!_{dwF7tnetttn{AP582#@RzYwv~J%pK|6gfdxEQv zzqGM+8Gh)BeZ1i~7NHt{EKxHY(Z!8pG5)f-{wIXC2P2@F2^@#JqQ^J3yJ9>S0b{{h zgm#1o{t`!8=WaX8N2jK9;TTM1Fsaty{f=NPyT+{Gdr9y5=20hFG4?-1RhAM}hoW#P zCjk#S^yoA9qIXCypi-|#bdw%?o4SzFJWK$Ru8CBpfqvv{2tdLD2BqILG^#4_$Cg?f zoy=B%{Y?19f)ha0RlxAD583OM3%)5YPea4;auh5r!|#zbHvT_y|C5AY3BvfUgUHo%ukT+Tu^Xu?;rVHWPhgFL9Ki@{<|_ zCIQcU2)KmpF~>~cD-m&ys!wb2Mj|jJlKjJfxXTm^aX8vcy#{0#11S`5!f~MG zuA`nKb`6wYe+A$>8)$DES(h_X(|(r{M@PFHFI(Gxt^l{SwrkRiG0N*Cz|R?P!YYDv z&U`DJO|&qoNqTbo%MUB$y13MSmv%i8{@dzOPB~=BceY_>Jwv80Mvj}yY?XJm!>@^9 zK_kP_?l_n6I!eU#7t^`vPv_`DiXpo@-ceVV*d=p)+CP5>NHIK#JPeynfVK`v`khvN zYYY@mrf#oG_BS4hpevK1|vR80uCF7}V0sx|fO@b02!lchP2O#=nLZ8)%I!&mkS=ZK80n>j2yv~Z4 zP5sOwV1}jVMRW&(A8Tysvqh1D4~t!px<;rxn2G(+R=>yrOh8> z{{xr?2VfpDSutcZT5Zm5s1`JN?JntS^EKFUnlvJS=RO(%+eAmhbztS+qx3D>F-=xV z*@NP+i^x-qwm@d!+>Y0 z1mu`X-y`fjpjOhSZxVJ4u)p6DpEEtrL(WS@xJ~(=NMFc*9`L1%?;1zrDWt=#E%Q2d zoDuWQKA>L02J!wY==uM+)=@@zcEj{yxPL(hC7p4v?gIjqBk+p_E@*%=cjR$8W8Kq9 zd;Jq=rgKa}!$n}A&lxuPKJ>U^)7!ut58#!#BD`o^Ss|ZmG9D4{0E$`kJ?jhjcvAl9 z-S?#1W_s@YyhxwocpCbAzmXJ!r#o=|DePa$_xiVh(h_O* - - - -CUBRID Node.js Demo - - - - - - - -

    - - CUBRID node.js demo (3) -

    - -

    Employees data management

    -
    -
    Create new/Update employee
    -
    - -
    - Id: - -     - Name: - -     - Salary: - -
    -
    - -
    - - -
    -
    -
    - List of employees   - Displaying rows from -

    - to -

    - (out of a total of -

    - rows.) -

    -
    -
    - Search employees by name: - - - -
    -

    - -
    -
    - -
    -
    - - - - - -
    -
    -
    -
    -
    - Status: - -

    -
    -
    -
    - - - - - diff --git a/demo/Web site (3) - Filter/readme.txt b/demo/Web site (3) - Filter/readme.txt deleted file mode 100644 index a65f6ef..0000000 --- a/demo/Web site (3) - Filter/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -Adapted from: -https://github.com/aluksidadi/Nodejs-Socketio-Mysql-Demo - -How to run: -======================================================================= -- Run app.js with node -- Open http://localhost:8888 in your browser - - diff --git a/demo/Web site (3) - Filter/site.css b/demo/Web site (3) - Filter/site.css deleted file mode 100644 index 4448ec4..0000000 --- a/demo/Web site (3) - Filter/site.css +++ /dev/null @@ -1,23 +0,0 @@ -html, body { - font: normal 0.9em arial, helvetica; -} - -label { - width: 80px; - float: left; -} - -#table_employees tr:hover { - font-weight: bold; - color: navy; -} - -.highlight { - background: #FFFFCC; -} - -.button { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} diff --git a/demo/Web site (4) - Events/app.js b/demo/Web site (4) - Events/app.js deleted file mode 100644 index 550898c..0000000 --- a/demo/Web site (4) - Events/app.js +++ /dev/null @@ -1,122 +0,0 @@ -var fs = require('fs'); -var db_helper = require("./db_helper.js"); - -var delay = (Math.random() * 200) + 100; // Introduce a delay, to simulate a higher network response time -var page_size = 10; // Rows displayed per page - -var httpServer = require('http').createServer(function handler(req, res) { - switch (req.url) { - case '/': - fs.readFile(__dirname + '/index.html', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading index.html!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/html'}); - res.end(data); - } - }); - break; - case '/cubrid.png': - fs.readFile(__dirname + '/cubrid.png', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading cubrid.png!'); - } else { - res.writeHead(200, {'Content-Type' : 'image/png'}); - res.end(data); - } - }); - break; - case '/site.css': - fs.readFile(__dirname + '/site.css', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading site.css!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/css'}); - res.end(data); - } - }); - break; - default: - res.writeHead(404); - return res.end('Error loading: ' + res.url + '!'); - break; - } -}).listen(8888); - -httpServer.on('close', function () { - console.log("Server closed."); -}); - -//TODO Update this with your own socket.io installation path -var io = require('c:/Program Files (x86)/nodejs/node_modules/socket.io').listen(httpServer); -//var io = require('socket.io'); - -function populateClient(client, startFrom, selectCount, filter) { - db_helper.get_employees(startFrom, selectCount, filter, function (employees, columns, rowsCount) { - console.log('Sent [populate] event to client, with ' + selectCount + ' rows from start position ' + startFrom + '.'); - client.emit('populate', employees, columns, rowsCount); - }); -} - -io.sockets.on('connection', function (client) { - console.log('Client connected.'); - - client.on('setup', function () { - console.log('Initial setup needed...'); - db_helper.setup(function () { - populateClient(client, 1, page_size, ''); - }); - }); - - client.on('cleanup', function () { - console.log('Cleanup...'); - db_helper.cleanup(function () { - }); - }); - - client.on('refresh', function (filter) { - populateClient(client, 1, page_size, filter); // First [page_size] rows - }); - - client.on('page', function (startFrom, selectCount, filter) { - console.log('Got [page] request from client.'); - setTimeout(function () { - populateClient(client, startFrom, selectCount, filter); - }, delay); - }); - - client.on('add employee', function (data, filter) { - console.log('Got [add employee] request from client.'); - db_helper.add_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - - client.on('delete employee', function (data, filter) { - console.log('Got [delete employee] request from client.'); - db_helper.delete_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - - client.on('update employee', function (data, filter) { - console.log('Got [update employee] request from client.'); - db_helper.update_employee(data, function () { - setTimeout(function () { - populateClient(client, 1, page_size, filter); - }, delay); - }) - }); - -}); - -io.sockets.on('disconnect', function () { - console.log('Client disconnected.'); -}); diff --git a/demo/Web site (4) - Events/cubrid.png b/demo/Web site (4) - Events/cubrid.png deleted file mode 100644 index ae3bab1d10ab5f37bb6a6842499937c62916e454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1QJO^K~z{r#g=PK zQ)d{*-Vt{gax7>%wnQ38i~=Mcv)P`oQVrAW`e=n@RBjm7^B87 zQnh#?f{@SzyhKs(0tRU4D|K`SK5GfV^D1mf&c6u7QpB8!P@#7 zXetAC&IHQl1XV(PV5S~;QL7pv<|$}dScmST&w$#^z%nvlCDRgGcT-lHsVDAzuL>e2 zfVLHls2_h4X3bx~<)48SWWH{ssI{L0`Sja#54f2NRMEQQr>GFB0oqpTpi8epW7;X0 zPe%jD1FFgOY0|@OiV&&*_|AFordemvIMolZ1z1kzYeq==L@bHvE@glK&e8e;=?qC< z91()O8F0bwaKr8K2IO+lh)LJ2B@IGQ9=thID*|XNz$NN|0&>27R8Sm<_W&;e2e=p= zf*H+yNXYsfpJ!JfDethLF|__}gH}Lj$vzL=bWJG0aRWVh16ZE|eb0lkQgeFg(bcRV zfE=Q0`;bfsCFn5pf=w(HHD$M`u_eeZI3*a|np+cq5HfJAQ@OdC=~VP*fCI=O2K7Xs z2lOTz*cUs&Chr1E{|#*FUVA1B@g(et{5@Bo5$I`d!K-DtJAVX%1w-M2XK=oNi$sMG)T z_QU9W29xv8P`NBHIm`h)cJ$!EfF542lO}}zvW3X003hu#Q|kdc-~y|Zw9kQZ8uhI& zsZaFjV2{2TD&uT0V-|_-`c!PTRz%F0s*`YzmPpI&VCAHJb{x6`6u&AX=hG;7W(3Uw z>za(Be<~Hrr3!$1$f+g>3eI(y07?Xa>C#U5Ze`+7`ZWC5dqBBY!cBpaMNT!9p>#kQ zfCulIf=#^#qXrKYAOJO?ftpYXUTQlLbMSWu&}UH1zeGGc z_tUB#!@=9zz)R4Xh~gM)KG;v(0E;a}SointxY8~+iW}hC|M%ZHICty7i P00000NkvXXu0mjfMj;8T diff --git a/demo/Web site (4) - Events/db_helper.js b/demo/Web site (4) - Events/db_helper.js deleted file mode 100644 index 3cc18d9..0000000 --- a/demo/Web site (4) - Events/db_helper.js +++ /dev/null @@ -1,247 +0,0 @@ -var Result2Array = require('../../src/resultset/Result2Array'); - -exports.setup = function (callback) { - var empNames = [ - 'John Doe', - 'Don Mae', - 'Missy Glenn', - 'John Tank', - 'Alec Willson', - 'Donna Doe', - 'Dana Joe', - 'Darling Mo', - 'Master Commander', - 'Senior Dan', - 'Maia Moore', - 'Secret Agent', - 'Dancing Queen', - 'Funny Guy', - 'Daniel Thor', - 'Doctor King', - 'Super Man', - 'Major John Ark', - 'Smiley Man', - 'Bud Thommas', - 'Alan Viking', - 'Beauty Beast', - 'Eleanor Karat' - ]; - - var sqls = []; - sqls.push('drop table if exists employees'); - sqls.push('create table employees( \ - id int not null auto_increment, \ - f_name varchar(40) not null, \ - salary int not null, \ - primary key (id))'); - for (var i = 0; i < empNames.length; i++) { - sqls.push("insert into employees(f_name,salary) values('" + empNames[i] + "'," + Math.random() * 10000 + ")"); - } - - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Setup employees...'); - console.log(sqls); - client.batchExecuteNoQuery(sqls, null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(); - }); -}; - -exports.cleanup = function (callback) { - var sql = "drop table if exists employees"; - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Cleanup...'); - console.log(sql); - client.batchExecuteNoQuery(sql, null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(); - }); -}; - -exports.add_employee = function (data, callback) { - var sql = "insert into employees (f_name, salary) values ('" + data.name + "'," + data.salary + ")"; - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Adding employee: ' + data.name + ' with salary: ' + data.salary); - console.log(sql); - client.batchExecuteNoQuery(sql, null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(); - }); -}; - -exports.delete_employee = function (data, callback) { - var sql = "delete from employees where id in (" + data.toString() + ")"; - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Deleting employee(s): ' + data.toString()); - console.log(sql); - client.batchExecuteNoQuery(sql, null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(); - }); -}; - -exports.update_employee = function (data, callback) { - var sql = "update employees set f_name='" + data.name + "', salary=" + data.salary + " where id=" + data.id; - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Updating employee: ' + data.toString()); - console.log(sql); - client.batchExecuteNoQuery(sql, null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(); - }); -}; - -exports.get_employees = function (startFrom, selectCount, filter, callback) { - var sql = "select * from employees"; - if (filter != '') { - sql += " where f_name like '" + filter + "'"; - } - sql += " order by f_name asc"; - sql += " for orderby_num() between " + startFrom + " and " + (startFrom + selectCount - 1); - - var sqlCount = "select count(*) from employees"; - if (filter != '') { - sqlCount += " where (f_name like '" + filter + "')"; - } - - var data = null; - var cols = null; - var totalRows = 0; - - var firstQueryCompleted = false; - var firstQueryClosed = false; - - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - - client.connect(null); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Querying data...'); - console.log(sql); - client.query(sql, function () { - }); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - if (!firstQueryCompleted) { //first query - console.log('First query data available...'); - firstQueryCompleted = true; - data = Result2Array.RowsArray(result); - cols = Result2Array.ColumnNamesArray(result); - console.log('Closing first query...'); - client.closeQuery(queryHandle, function () { - }); - } else { //second query - console.log('Second query data available...'); - totalRows = Result2Array.RowsArray(result)[0][0]; - console.log('Found ' + totalRows + ' rows.'); - console.log('Closing second query...'); - client.closeQuery(queryHandle, function () { - }); - } - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - if (!firstQueryClosed) { - firstQueryClosed = true; - console.log('First query closed.'); - console.log('Executing COUNT query...'); - console.log(sqlCount); - client.query(sqlCount, function () { - }); - } else { - console.log('Second query closed.'); - console.log('Closing connection...'); - client.close(function () { - }); - } - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - callback(data, cols, totalRows); - }); -}; - - diff --git a/demo/Web site (4) - Events/favicon.ico b/demo/Web site (4) - Events/favicon.ico deleted file mode 100644 index e585a787e1b1e5e796b846a3c212d9c86705b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&ZBSHI7(SRy{~Va9)KJ7PT(Blnq(DZrAC2RTjbl~Q znnS|S4?tP793^z1AZQ5u0LA!NQDg;L6P6Vb1$LL^={@)EUDy?H@3Nz3=HYzY_kEuC zym#-p?}afpHifynGiu&!`&7n!_{dwF7tnetttn{AP582#@RzYwv~J%pK|6gfdxEQv zzqGM+8Gh)BeZ1i~7NHt{EKxHY(Z!8pG5)f-{wIXC2P2@F2^@#JqQ^J3yJ9>S0b{{h zgm#1o{t`!8=WaX8N2jK9;TTM1Fsaty{f=NPyT+{Gdr9y5=20hFG4?-1RhAM}hoW#P zCjk#S^yoA9qIXCypi-|#bdw%?o4SzFJWK$Ru8CBpfqvv{2tdLD2BqILG^#4_$Cg?f zoy=B%{Y?19f)ha0RlxAD583OM3%)5YPea4;auh5r!|#zbHvT_y|C5AY3BvfUgUHo%ukT+Tu^Xu?;rVHWPhgFL9Ki@{<|_ zCIQcU2)KmpF~>~cD-m&ys!wb2Mj|jJlKjJfxXTm^aX8vcy#{0#11S`5!f~MG zuA`nKb`6wYe+A$>8)$DES(h_X(|(r{M@PFHFI(Gxt^l{SwrkRiG0N*Cz|R?P!YYDv z&U`DJO|&qoNqTbo%MUB$y13MSmv%i8{@dzOPB~=BceY_>Jwv80Mvj}yY?XJm!>@^9 zK_kP_?l_n6I!eU#7t^`vPv_`DiXpo@-ceVV*d=p)+CP5>NHIK#JPeynfVK`v`khvN zYYY@mrf#oG_BS4hpevK1|vR80uCF7}V0sx|fO@b02!lchP2O#=nLZ8)%I!&mkS=ZK80n>j2yv~Z4 zP5sOwV1}jVMRW&(A8Tysvqh1D4~t!px<;rxn2G(+R=>yrOh8> z{{xr?2VfpDSutcZT5Zm5s1`JN?JntS^EKFUnlvJS=RO(%+eAmhbztS+qx3D>F-=xV z*@NP+i^x-qwm@d!+>Y0 z1mu`X-y`fjpjOhSZxVJ4u)p6DpEEtrL(WS@xJ~(=NMFc*9`L1%?;1zrDWt=#E%Q2d zoDuWQKA>L02J!wY==uM+)=@@zcEj{yxPL(hC7p4v?gIjqBk+p_E@*%=cjR$8W8Kq9 zd;Jq=rgKa}!$n}A&lxuPKJ>U^)7!ut58#!#BD`o^Ss|ZmG9D4{0E$`kJ?jhjcvAl9 z-S?#1W_s@YyhxwocpCbAzmXJ!r#o=|DePa$_xiVh(h_O* - - - -CUBRID node.js - Web site demo (4) - - - - - - - -

    - - CUBRID node.js - Web site demo (4) -

    - -

    Employees data management

    -
    -
    Create new/Update employee
    -
    - -
    - Id: - -     - Name: - -     - Salary: - -
    -
    - -
    - - -
    -
    -
    - List of employees   - Displaying rows from -

    - to -

    - (out of a total of -

    - rows.) -

    -
    -
    - Search employees by name: - - - -
    -

    - -
    -
    - -
    -
    - - - - - -
    -
    -
    -
    -
    - Status: - -

    -
    -
    -
    - - - - - diff --git a/demo/Web site (4) - Events/readme.txt b/demo/Web site (4) - Events/readme.txt deleted file mode 100644 index a65f6ef..0000000 --- a/demo/Web site (4) - Events/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -Adapted from: -https://github.com/aluksidadi/Nodejs-Socketio-Mysql-Demo - -How to run: -======================================================================= -- Run app.js with node -- Open http://localhost:8888 in your browser - - diff --git a/demo/Web site (4) - Events/site.css b/demo/Web site (4) - Events/site.css deleted file mode 100644 index 1ff2c00..0000000 --- a/demo/Web site (4) - Events/site.css +++ /dev/null @@ -1,24 +0,0 @@ -html, body { - font: normal 0.9em arial, helvetica; -} - -label { - width: 80px; - float: left; -} - -#table_employees tr:hover { - font-weight: bold; - color: navy; - font-style: italic; -} - -.highlight { - background: #FFFFCC; -} - -.button { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} diff --git a/demo/Web site (5) - Database/app.js b/demo/Web site (5) - Database/app.js deleted file mode 100644 index 36d5320..0000000 --- a/demo/Web site (5) - Database/app.js +++ /dev/null @@ -1,75 +0,0 @@ -var fs = require('fs'); -var db_helper = require("./db_helper.js"); - -var httpServer = require('http').createServer(function handler(req, res) { - switch (req.url) { - case '/': - fs.readFile(__dirname + '/index.html', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading index.html!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/html'}); - res.end(data); - } - }); - break; - case '/cubrid.png': - fs.readFile(__dirname + '/cubrid.png', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading cubrid.png!'); - } else { - res.writeHead(200, {'Content-Type' : 'image/png'}); - res.end(data); - } - }); - break; - case '/site.css': - fs.readFile(__dirname + '/site.css', function (err, data) { - if (err) { - res.writeHead(500); - return res.end('Error loading site.css!'); - } else { - res.writeHead(200, {'Content-Type' : 'text/css'}); - res.end(data); - } - }); - break; - default: - res.writeHead(404); - return res.end('Error loading: ' + res.url + '!'); - break; - } -}).listen(8888); - -httpServer.on('close', function () { - console.log("Server closed."); -}); - -//TODO Update this with your own socket.io installation path -var io = require('c:/Program Files (x86)/nodejs/node_modules/socket.io').listen(httpServer); -//var io = require('socket.io'); - -io.sockets.on('connection', function (client) { - console.log('Client connected.'); - - client.on('execute', function (sql) { - console.log('Got [populate] request from client.'); - db_helper.getQueryData(sql, function (data, columnNames) { - console.log('Send [populate] event to client...'); - if (columnNames == -1) { - var errMsg = data.message; - client.emit('sqlerror', errMsg); - } else { - client.emit('populate', data, columnNames); - } - }); - }); -}); - -io.sockets.on('disconnect', function () { - console.log('Client disconnected.'); -}); - - diff --git a/demo/Web site (5) - Database/cubrid.png b/demo/Web site (5) - Database/cubrid.png deleted file mode 100644 index ae3bab1d10ab5f37bb6a6842499937c62916e454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1QJO^K~z{r#g=PK zQ)d{*-Vt{gax7>%wnQ38i~=Mcv)P`oQVrAW`e=n@RBjm7^B87 zQnh#?f{@SzyhKs(0tRU4D|K`SK5GfV^D1mf&c6u7QpB8!P@#7 zXetAC&IHQl1XV(PV5S~;QL7pv<|$}dScmST&w$#^z%nvlCDRgGcT-lHsVDAzuL>e2 zfVLHls2_h4X3bx~<)48SWWH{ssI{L0`Sja#54f2NRMEQQr>GFB0oqpTpi8epW7;X0 zPe%jD1FFgOY0|@OiV&&*_|AFordemvIMolZ1z1kzYeq==L@bHvE@glK&e8e;=?qC< z91()O8F0bwaKr8K2IO+lh)LJ2B@IGQ9=thID*|XNz$NN|0&>27R8Sm<_W&;e2e=p= zf*H+yNXYsfpJ!JfDethLF|__}gH}Lj$vzL=bWJG0aRWVh16ZE|eb0lkQgeFg(bcRV zfE=Q0`;bfsCFn5pf=w(HHD$M`u_eeZI3*a|np+cq5HfJAQ@OdC=~VP*fCI=O2K7Xs z2lOTz*cUs&Chr1E{|#*FUVA1B@g(et{5@Bo5$I`d!K-DtJAVX%1w-M2XK=oNi$sMG)T z_QU9W29xv8P`NBHIm`h)cJ$!EfF542lO}}zvW3X003hu#Q|kdc-~y|Zw9kQZ8uhI& zsZaFjV2{2TD&uT0V-|_-`c!PTRz%F0s*`YzmPpI&VCAHJb{x6`6u&AX=hG;7W(3Uw z>za(Be<~Hrr3!$1$f+g>3eI(y07?Xa>C#U5Ze`+7`ZWC5dqBBY!cBpaMNT!9p>#kQ zfCulIf=#^#qXrKYAOJO?ftpYXUTQlLbMSWu&}UH1zeGGc z_tUB#!@=9zz)R4Xh~gM)KG;v(0E;a}SointxY8~+iW}hC|M%ZHICty7i P00000NkvXXu0mjfMj;8T diff --git a/demo/Web site (5) - Database/db_helper.js b/demo/Web site (5) - Database/db_helper.js deleted file mode 100644 index 898101c..0000000 --- a/demo/Web site (5) - Database/db_helper.js +++ /dev/null @@ -1,45 +0,0 @@ -var Result2Array = require('../../src/resultset/Result2Array'); - -exports.getQueryData = function (sql, callback) { - var client = require('../../index').createDefaultCUBRIDDemodbConnection(); - var data = null; - var cols = null; - var error = null; - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - console.log('Error: ' + err.message); - error = err; - client.close(); - }); - - client.on(client.EVENT_CONNECTED, function () { - console.log('Connected.'); - console.log('Executing SQL: ' + sql); - client.query(sql); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - data = Result2Array.RowsArray(result); - cols = Result2Array.ColumnNamesArray(result); - console.log('Closing first query...'); - client.closeQuery(queryHandle, null); - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - console.log('Query closed.'); - client.close(); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - console.log('Connection closed.'); - if (error) { - callback(error, -1); - } else { - callback(data, cols); - } - }); -}; - - diff --git a/demo/Web site (5) - Database/favicon.ico b/demo/Web site (5) - Database/favicon.ico deleted file mode 100644 index e585a787e1b1e5e796b846a3c212d9c86705b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&ZBSHI7(SRy{~Va9)KJ7PT(Blnq(DZrAC2RTjbl~Q znnS|S4?tP793^z1AZQ5u0LA!NQDg;L6P6Vb1$LL^={@)EUDy?H@3Nz3=HYzY_kEuC zym#-p?}afpHifynGiu&!`&7n!_{dwF7tnetttn{AP582#@RzYwv~J%pK|6gfdxEQv zzqGM+8Gh)BeZ1i~7NHt{EKxHY(Z!8pG5)f-{wIXC2P2@F2^@#JqQ^J3yJ9>S0b{{h zgm#1o{t`!8=WaX8N2jK9;TTM1Fsaty{f=NPyT+{Gdr9y5=20hFG4?-1RhAM}hoW#P zCjk#S^yoA9qIXCypi-|#bdw%?o4SzFJWK$Ru8CBpfqvv{2tdLD2BqILG^#4_$Cg?f zoy=B%{Y?19f)ha0RlxAD583OM3%)5YPea4;auh5r!|#zbHvT_y|C5AY3BvfUgUHo%ukT+Tu^Xu?;rVHWPhgFL9Ki@{<|_ zCIQcU2)KmpF~>~cD-m&ys!wb2Mj|jJlKjJfxXTm^aX8vcy#{0#11S`5!f~MG zuA`nKb`6wYe+A$>8)$DES(h_X(|(r{M@PFHFI(Gxt^l{SwrkRiG0N*Cz|R?P!YYDv z&U`DJO|&qoNqTbo%MUB$y13MSmv%i8{@dzOPB~=BceY_>Jwv80Mvj}yY?XJm!>@^9 zK_kP_?l_n6I!eU#7t^`vPv_`DiXpo@-ceVV*d=p)+CP5>NHIK#JPeynfVK`v`khvN zYYY@mrf#oG_BS4hpevK1|vR80uCF7}V0sx|fO@b02!lchP2O#=nLZ8)%I!&mkS=ZK80n>j2yv~Z4 zP5sOwV1}jVMRW&(A8Tysvqh1D4~t!px<;rxn2G(+R=>yrOh8> z{{xr?2VfpDSutcZT5Zm5s1`JN?JntS^EKFUnlvJS=RO(%+eAmhbztS+qx3D>F-=xV z*@NP+i^x-qwm@d!+>Y0 z1mu`X-y`fjpjOhSZxVJ4u)p6DpEEtrL(WS@xJ~(=NMFc*9`L1%?;1zrDWt=#E%Q2d zoDuWQKA>L02J!wY==uM+)=@@zcEj{yxPL(hC7p4v?gIjqBk+p_E@*%=cjR$8W8Kq9 zd;Jq=rgKa}!$n}A&lxuPKJ>U^)7!ut58#!#BD`o^Ss|ZmG9D4{0E$`kJ?jhjcvAl9 z-S?#1W_s@YyhxwocpCbAzmXJ!r#o=|DePa$_xiVh(h_O* - - - - CUBRID node.js - Web site demo (5) - - - - - - - -

    - - CUBRID node.js - Web site demo (5) -

    - -

    Simple query browser

    -
    -
    - -
    - SQL: - - -
    -
    - -
    -
    - Returned data:   -
    -

    -
    -
    -
    - Status: - -

    -
    -
    -
    - - - - - diff --git a/demo/Web site (5) - Database/readme.txt b/demo/Web site (5) - Database/readme.txt deleted file mode 100644 index a65f6ef..0000000 --- a/demo/Web site (5) - Database/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -Adapted from: -https://github.com/aluksidadi/Nodejs-Socketio-Mysql-Demo - -How to run: -======================================================================= -- Run app.js with node -- Open http://localhost:8888 in your browser - - diff --git a/demo/Web site (5) - Database/site.css b/demo/Web site (5) - Database/site.css deleted file mode 100644 index 1ff2c00..0000000 --- a/demo/Web site (5) - Database/site.css +++ /dev/null @@ -1,24 +0,0 @@ -html, body { - font: normal 0.9em arial, helvetica; -} - -label { - width: 80px; - float: left; -} - -#table_employees tr:hover { - font-weight: bold; - color: navy; - font-style: italic; -} - -.highlight { - background: #FFFFCC; -} - -.button { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} diff --git a/index.js b/index.js index de0cfad..3dfba78 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,28 @@ -module.exports = process.env.CODE_COV - ? require('./src-cov/cubrid') - : require('./src/cubrid'); +const CUBRIDConnection = require('./src/CUBRIDConnection'); +const Helpers = require('./src/utils/Helpers'); + +/** + * Helper functions + * @type {*} + */ +exports.Helpers = Helpers; + +/** + * Creates a new CUBRID connection. This function creates a new instance of + * CUBRIDConnection, however doesn't establish actual connection with the + * broker. + * + * @alias createClient, createConnection + * @param hosts + * @param port + * @param user + * @param password + * @param database + * @param connectionTimeout + * @param maxConnectionRetryCount + * @param logger + * @return {CUBRIDConnection} + */ +exports.createConnection = exports.createCUBRIDConnection = function (hosts, port, user, password, database, connectionTimeout, maxConnectionRetryCount, logger) { + return new CUBRIDConnection(hosts, port, user, password, database, connectionTimeout, maxConnectionRetryCount, logger); +}; diff --git a/package.json b/package.json index 58f89f0..7d026a7 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,13 @@ { "name": "node-cubrid", - "version": "2.2.5", + "version": "3.0.0", "description": "This is a Node.js driver for CUBRID RDBMS. It is developed in 100% JavaScript and does not require specific platform compilation.", "author": "CUBRID (http://www.cubrid.org/)", "repository": { "type": "git", "url": "git://github.com/cubrid/node-cubrid.git" }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/cubrid/node-cubrid/raw/master/LICENSE" - } - ], + "license": "MIT", "main": "index.js", "keywords": [ "native", @@ -25,18 +20,18 @@ "module" ], "engines": { - "node": "*" + "node": ">=4" }, "scripts": { - "clean": "rm -rf src-cov", - "instrument": "npm run clean && jscoverage src src-cov", - "cover": "npm run instrument && CODE_COV=1 NODE_ENV=test ./node_modules/.bin/nodeunit --reporter=lcov test | node test/testSetup/fix_lcov.js | ./node_modules/.bin/coveralls", - "test": "./node_modules/.bin/nodeunit test" + "clean": "rm -rf coverage", + "coverage": "./node_modules/istanbul/lib/cli.js cover node_modules/mocha/bin/_mocha -- -R spec test", + "lint": "./node_modules/eslint/bin/eslint.js .", + "test": "npm run lint && ./node_modules/mocha/bin/mocha test" }, "devDependencies": { - "async": "~0.8.0", - "coveralls": "~2.10.0", - "generic-pool": "~2.0.4", - "nodeunit": "~0.9.0" + "chai": "3.5.0", + "eslint": "3.6.1", + "istanbul": "0.4.5", + "mocha": "3.0.2" } } diff --git a/src/CUBRIDConnection.js b/src/CUBRIDConnection.js index 8693061..e2cc807 100644 --- a/src/CUBRIDConnection.js +++ b/src/CUBRIDConnection.js @@ -1,176 +1,129 @@ -var Net = require('net'), - EventEmitter = require('events').EventEmitter, - Util = require('util'), - - ErrorMessages = require('./constants/ErrorMessages'), - DATA_TYPES = require('./constants/DataTypes'), - CASConstants = require('./constants/CASConstants'), - - ActionQueue = require('./utils/ActionQueue'), - Helpers = require('./utils/Helpers'), - Cache = require('./utils/Cache'), - - Query = require('./query/Query'), - Queue = require('./query/Queue'), - - PacketReader = require('./packets/PacketReader'), - PacketWriter = require('./packets/PacketWriter'), - ClientInfoExchangePacket = require('./packets/ClientInfoExchangePacket'), - OpenDatabasePacket = require('./packets/OpenDatabasePacket'), - GetEngineVersionPacket = require('./packets/GetEngineVersionPacket'), - ExecuteQueryPacket = require('./packets/ExecuteQueryPacket'), - GetSchemaPacket = require('./packets/GetSchemaPacket.js'), - CloseQueryPacket = require('./packets/CloseQueryPacket'), - BatchExecuteNoQueryPacket = require('./packets/BatchExecuteNoQueryPacket'), - CloseDatabasePacket = require('./packets/CloseDatabasePacket'), - FetchPacket = require('./packets/FetchPacket'), - SetAutoCommitModePacket = require('./packets/SetAutoCommitModePacket'), - RollbackPacket = require('./packets/RollbackPacket'), - CommitPacket = require('./packets/CommitPacket'), - LOBReadPacket = require('./packets/LOBReadPacket'), - LOBNewPacket = require('./packets/LOBNewPacket'), - LOBWritePacket = require('./packets/LOBWritePacket'), - SetDbParameterPacket = require('./packets/SetDbParameterPacket'), - GetDbParameterPacket = require('./packets/GetDbParameterPacket'), - PrepareExecuteOldProtocolPacket = require('./packets/PrepareExecuteOldProtocolPacket'); - -if (typeof Buffer.concat !== 'function') { - // `Buffer.concat` is available since node 0.8.x. - // If it's not available, define it. This source code is taken - // from node's core source. - Buffer.concat = function(list, length) { - if (!Array.isArray(list)) { - throw new TypeError('Usage: Buffer.concat(list, [length])'); - } - - if (list.length === 0) { - return new Buffer(0); - } else if (list.length === 1) { - return list[0]; - } - - if (typeof length !== 'number') { - length = 0; - for (var i = 0; i < list.length; i++) { - var buf = list[i]; - length += buf.length; - } - } - - var buffer = new Buffer(length); - var pos = 0; - for (var i = 0; i < list.length; i++) { - var buf = list[i]; - buf.copy(buffer, pos); - pos += buf.length; - } - return buffer; - }; -} - -module.exports = CUBRIDConnection; - -// Support custom events -Util.inherits(CUBRIDConnection, EventEmitter); +'use strict'; + +const Net = require('net'); +const EventEmitter = require('events').EventEmitter; +const Util = require('util'); + +const ErrorMessages = require('./constants/ErrorMessages'); +const DATA_TYPES = require('./constants/DataTypes'); +const CASConstants = require('./constants/CASConstants'); + +const Helpers = require('./utils/Helpers'); +const NoopLogger = require('./NoopLogger'); +const Query = require('./query/Query'); +const Queue = require('./query/Queue'); +const PacketReader = require('./packets/PacketReader'); +const PacketWriter = require('./packets/PacketWriter'); +const ClientInfoExchangePacket = require('./packets/ClientInfoExchangePacket'); +const OpenDatabasePacket = require('./packets/OpenDatabasePacket'); +const GetEngineVersionPacket = require('./packets/GetEngineVersionPacket'); +const ExecuteQueryPacket = require('./packets/ExecuteQueryPacket'); +const GetSchemaPacket = require('./packets/GetSchemaPacket.js'); +const CloseQueryPacket = require('./packets/CloseQueryPacket'); +const BatchExecuteNoQueryPacket = require('./packets/BatchExecuteNoQueryPacket'); +const CloseDatabasePacket = require('./packets/CloseDatabasePacket'); +const FetchPacket = require('./packets/FetchPacket'); +const RollbackPacket = require('./packets/RollbackPacket'); +const CommitPacket = require('./packets/CommitPacket'); +const LOBReadPacket = require('./packets/LOBReadPacket'); +const LOBNewPacket = require('./packets/LOBNewPacket'); +const LOBWritePacket = require('./packets/LOBWritePacket'); +const SetDbParameterPacket = require('./packets/SetDbParameterPacket'); +const GetDbParameterPacket = require('./packets/GetDbParameterPacket'); +const PrepareExecutePacket = require('./packets/PrepareExecutePacket'); /** * Create a new CUBRID connection instance - * @param brokerServer - * @param brokerPort + * @param hosts + * @param port * @param user * @param password * @param database - * @param cacheTimeout * @param connectionTimeout + * @param maxConnectionRetryCount + * @param logger * @constructor */ -function CUBRIDConnection(brokerServer, brokerPort, user, password, database, cacheTimeout, connectionTimeout) { +function CUBRIDConnection(hosts, port, user, password, database, connectionTimeout, maxConnectionRetryCount, logger) { // Using EventEmitter.call on an object will do the setup of instance methods / properties // (not inherited) of an EventEmitter. // It is similar in purpose to super(...) in Java or base(...) in C#, but it is not implicit in Javascript. // Because of this, we must manually call it ourselves: EventEmitter.call(this); - // Allow to pass connection parameters as an object. - if (typeof brokerServer === 'object') { - brokerPort = brokerServer.port; - user = brokerServer.user; - password = brokerServer.password; - database = brokerServer.database; - cacheTimeout = brokerServer.cacheTimeout; - connectionTimeout = brokerServer.connectionTimeout; - brokerServer = brokerServer.host; + // Allow to pass the connection parameters as an object. + if (typeof hosts === 'object' && !Array.isArray(hosts)) { + port = hosts.port; + user = hosts.user; + password = hosts.password; + database = hosts.database; + connectionTimeout = hosts.connectionTimeout; + maxConnectionRetryCount = hosts.maxConnectionRetryCount; + logger = hosts.logger; + // Allow users to specify a single host via `host` + // or multiple hosts as `hosts` array. + hosts = hosts.host || hosts.hosts; } - // `cacheTimeout` is provided in milliseconds, but the `Cache` class requires seconds. - this._queryCache = cacheTimeout && cacheTimeout > 0 ? new Cache(cacheTimeout / 1000) : null; + if (!Array.isArray(hosts)) { + hosts = [hosts]; + } // Connection parameters - this.brokerServer = brokerServer || 'localhost'; - this.initialBrokerPort = brokerPort || 33000; this.connectionBrokerPort = -1; + this.connectionRetryCount = 0; + this.maxConnectionRetryCount = maxConnectionRetryCount || 1; + this.currentHostIndex = 0; + const defaultPort = port || 33000; + + this.hosts = hosts.map(hostPort => { + !hostPort && (hostPort = 'localhost'); + + // Allow to provide custom ports for each host. + let ix = hostPort.indexOf(':'); + let host; + let port; + + if (ix > -1) { + host = hostPort.substr(0, ix); + port = hostPort.substr(ix); + } else { + // If port is not specified with the hostname, + // use the default port. + host = hostPort; + port = defaultPort; + } + + return { + host, + port, + }; + }); + this.user = user || 'public'; this.password = password || ''; this.database = database || 'demodb'; // Connection timeout in milliseconds. - this._CONNECTION_TIMEOUT = connectionTimeout || 0; + this.connectionTimeout = connectionTimeout || 0; + this.logger = typeof logger === 'object' ? logger : new NoopLogger(); // Session public variables - this.autoCommitMode = null; // Will be initialized on connect + this.autoCommitMode = true; this.sessionId = 0; // Execution semaphore variables; prevent double-connect-attempts, overlapping-queries etc. this.connectionOpened = false; this.connectionPending = false; - // Driver events - this.EVENT_ERROR = 'error'; - this.EVENT_CONNECTED = 'connect'; - this.EVENT_ENGINE_VERSION_AVAILABLE = 'engine version'; - this.EVENT_BATCH_COMMANDS_COMPLETED = 'batch execute done'; - this.EVENT_QUERY_DATA_AVAILABLE = 'query data'; - this.EVENT_SCHEMA_DATA_AVAILABLE = 'schema data'; - this.EVENT_FETCH_DATA_AVAILABLE = 'fetch'; - this.EVENT_FETCH_NO_MORE_DATA_AVAILABLE = 'fetch done'; - this.EVENT_BEGIN_TRANSACTION = 'begin transaction'; - this.EVENT_SET_AUTOCOMMIT_MODE_COMPLETED = 'set autocommit mode'; - this.EVENT_COMMIT_COMPLETED = 'commit'; - this.EVENT_ROLLBACK_COMPLETED = 'rollback'; - this.EVENT_QUERY_CLOSED = 'close query'; - this.EVENT_CONNECTION_CLOSED = 'close'; - this.EVENT_CONNECTION_DISCONNECTED = 'disconnect'; - this.EVENT_LOB_READ_COMPLETED = 'LOB read completed'; - this.EVENT_LOB_NEW_COMPLETED = 'LOB new completed'; - this.EVENT_LOB_WRITE_COMPLETED = 'LOB write completed'; - this.EVENT_SET_DB_PARAMETER_COMPLETED = 'set db parameter completed'; - this.EVENT_GET_DB_PARAMETER_COMPLETED = 'get db parameter completed'; - // Auto-commit constants this.AUTOCOMMIT_ON = true; this.AUTOCOMMIT_OFF = !this.AUTOCOMMIT_ON; - // Database schema variables - this.SCHEMA_TABLE = CASConstants.CUBRIDSchemaType.CCI_SCH_CLASS; - this.SCHEMA_VIEW = CASConstants.CUBRIDSchemaType.CCI_SCH_VCLASS; - this.SCHEMA_ATTRIBUTE = CASConstants.CUBRIDSchemaType.CCI_SCH_ATTRIBUTE; - this.SCHEMA_CONSTRAINT = CASConstants.CUBRIDSchemaType.CCI_SCH_CONSTRAIT; - this.SCHEMA_PRIMARY_KEY = CASConstants.CUBRIDSchemaType.CCI_SCH_PRIMARY_KEY; - this.SCHEMA_IMPORTED_KEYS = CASConstants.CUBRIDSchemaType.CCI_SCH_IMPORTED_KEYS; - this.SCHEMA_EXPORTED_KEYS = CASConstants.CUBRIDSchemaType.CCI_SCH_EXPORTED_KEYS; - this.SCHEMA_CLASS_PRIVILEGE = CASConstants.CUBRIDSchemaType.CCI_SCH_CLASS_PRIVILEGE; - - // LOB types variables - this.LOB_TYPE_BLOB = CASConstants.CUBRIDDataType.CCI_U_TYPE_BLOB; - this.LOB_TYPE_CLOB = CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB; - this._CASInfo = [0, 0xFF, 0xFF, 0xFF]; - this._queriesPacketList = []; + this._queryResultSets = {}; this._INVALID_RESPONSE_LENGTH = -1; this._LOB_MAX_IO_LENGTH = 128 * 1024; - // Database engine version - this._DB_ENGINE_VER = ''; - // Enforce query execution using the old protocol. // One would enforce the old protocol when trying to connect // to CUBRID SHARD Broker version 8.4.3 and 9.1.0. @@ -178,63 +131,114 @@ function CUBRIDConnection(brokerServer, brokerPort, user, password, database, ca // users can use the default newer protocol. this._ENFORCE_OLD_QUERY_PROTOCOL = false; + // SQL queries queue. this._queue = new Queue(); - - // Used for standard callbacks 'err' parameter - this._NO_ERROR = null; } +// Support custom events +Util.inherits(CUBRIDConnection, EventEmitter); + /** * Get broker connection port - * @param callback * @private */ -CUBRIDConnection.prototype._doGetBrokerPort = function (callback) { - var clientInfoExchangePacket = new ClientInfoExchangePacket(), - packetWriter = new PacketWriter(clientInfoExchangePacket.getBufferLength()), - self = this, - socket = this._socket = Net.createConnection(this.initialBrokerPort, this.brokerServer); +function _doGetBrokerPort() { + this.logger.debug(`_doGetBrokerPort: connectionRetryCount = ${this.connectionRetryCount}.`); + + return new Promise((resolve, reject) => { + const clientInfoExchangePacket = new ClientInfoExchangePacket(); + const packetWriter = new PacketWriter(clientInfoExchangePacket.getBufferLength()); + + const hostInfo = this.hosts[this.currentHostIndex]; + + const socket = this._socket = Net.createConnection(hostInfo.port, hostInfo.host); - socket.setNoDelay(true); - socket.setTimeout(this._CONNECTION_TIMEOUT); + socket.setNoDelay(true); + socket.setTimeout(this.getConnectionTimeout()); + + clientInfoExchangePacket.write(packetWriter); + + let callback = (err) => { + if (err) { + this.logger.debug(`_doGetBrokerPort error`, err.message); + + // If connection has failed, we need to try to connect to the next + // broker. + if (err.message.indexOf(ErrorMessages.ERROR_CONNECTION_TIMEOUT) > -1 || + err.message.indexOf('ECONNREFUSED') > -1) { + // Check if we have any more hosts left to try connecting. + if (++this.currentHostIndex < this.hosts.length) { + // Try the next host. + return resolve(_doGetBrokerPort.call(this)); + } - clientInfoExchangePacket.write(packetWriter); + // We have already tried all hosts. + // Try again from the beginning `maxConnectionRetryCount` times. + if (++this.connectionRetryCount <= this.maxConnectionRetryCount) { + this.currentHostIndex = 0; - this._setSocketTimeoutErrorListeners(callback); + return resolve(_doGetBrokerPort.call(this)); + } + } - socket.once('data', function (data) { - // Clear connection timeout - this.setTimeout(0); - this.removeAllListeners('timeout') - .removeAllListeners('data'); + return reject(err); + } - var packetReader = new PacketReader(); - packetReader.write(data); - clientInfoExchangePacket.parse(packetReader); + // Reset the retry counter on successful connection. + this.connectionRetryCount = 0; + this.logger.debug(`_doGetBrokerPort: connected to ${hostInfo.host}:${hostInfo.port}.`); - var newPort = clientInfoExchangePacket.newConnectionPort; + resolve(); + }; - self.connectionBrokerPort = newPort; + _setSocketTimeoutErrorListeners.call(this, callback); - if (newPort != 0) { - socket.end(); - } + socket.once('data', (data) => { + // Clear connection timeout + socket.setTimeout(0); + socket + .removeAllListeners('timeout') + .removeAllListeners('data'); - if (newPort > -1) { - callback(); - } else { + const packetReader = new PacketReader(); + + packetReader.write(data); + + clientInfoExchangePacket.parse(packetReader); + + const newPort = clientInfoExchangePacket.newConnectionPort; + + this.logger.debug(`_doGetBrokerPort: newPort = ${newPort}`); + + this.connectionBrokerPort = newPort; + + if (newPort !== 0) { + // If the new port is not `0`, i.e. it has changed, we need + // to close the current socket. The new socket will be open + // in `_doDatabaseLogin()`. + // If it is `0`, we will keep using this same socket. + socket.end(); + } + + if (newPort > -1) { + return callback(); + } + + // If the `newPort` value is negative, it means + // an error has occurred. callback(new Error(ErrorMessages.ERROR_NEW_BROKER_PORT)); - } + }); + + socket.write(packetWriter._buffer); }); +} - socket.write(packetWriter._buffer); -}; +function _setSocketTimeoutErrorListeners(callback) { + const socket = this._socket; -CUBRIDConnection.prototype._setSocketTimeoutErrorListeners = function (callback) { - var self = this, - socket = this._socket; + this.logger.debug('_setSocketTimeoutErrorListeners'); - socket.on('timeout', function () { + socket.on('timeout', () => { // The `timeout` event listener is a one time only event. // Refer to http://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback. @@ -249,14 +253,15 @@ CUBRIDConnection.prototype._setSocketTimeoutErrorListeners = function (callback) // which we don't want. socket.destroy(); - self.connectionOpened = false; + this.connectionOpened = false; callback(new Error(ErrorMessages.ERROR_CONNECTION_TIMEOUT)); }); this._socketCurrentEventCallback = callback; - socket.on('error', function (err) { + socket.on('error', (err) => { + this.logger.debug('socket error', err); // As of node 0.10.15 there is a known open bug in Node.js // (https://github.com/joyent/node/issues/5851) // which escalates the stream write error to the network socket, @@ -267,151 +272,199 @@ CUBRIDConnection.prototype._setSocketTimeoutErrorListeners = function (callback) // handled by node-cubrid. if (!err.isHandledByNodeCubrid) { err.isHandledByNodeCubrid = true; - this.setTimeout(0); - this.removeAllListeners('timeout') + socket.setTimeout(0); + socket.removeAllListeners('timeout') .removeAllListeners('data'); // When `error` event is emitted, the socket client gets automatically // closed. So, no need to close it manually. - self.connectionOpened = false; + this.connectionOpened = false; - if (typeof self._socketCurrentEventCallback === 'function') { - self._socketCurrentEventCallback(err); - self._socketCurrentEventCallback = null; + const callback = this._socketCurrentEventCallback; + this._socketCurrentEventCallback = undefined; + + if (typeof callback === 'function') { + callback(err); } else { throw err; } } }); - socket.on('end', function () { - self.connectionOpened = false; + socket.on('close', () => { + this.logger.debug('socket close'); + this.connectionOpened = false; // Since node-cubrid supports reconnecting to the disconnected // server, we do not consider socket disconnection by server // as a fatal error. However, if anybody is listening for the // disconnect event, we are eager to notify them. - if (self.listeners(self.EVENT_CONNECTION_DISCONNECTED).length > 0) { - self.emit(self.EVENT_CONNECTION_DISCONNECTED); - } + this.emit('disconnect'); }); -}; +} /** * Login to a database - * @param callback * @private */ -CUBRIDConnection.prototype._doDatabaseLogin = function (callback) { - var socket; +function _doDatabaseLogin() { + this.logger.debug(`_doDatabaseLogin: connectionBrokerPort = ${this.connectionBrokerPort}`); - if (this.connectionBrokerPort) { - socket = this._socket = Net.createConnection(this.connectionBrokerPort, this.brokerServer); + return new Promise((resolve, reject) => { + let socket; - socket.setNoDelay(true); - socket.setTimeout(this._CONNECTION_TIMEOUT); + let callback = (err) => { + // Clear connection timeout + socket.setTimeout(0); + socket.removeAllListeners('timeout'); - this._setSocketTimeoutErrorListeners(callback); - } else { - socket = this._socket; - } + if (err) { + return reject(err); + } - var openDatabasePacket = new OpenDatabasePacket({ - database : this.database, - user : this.user, - password : this.password, - casInfo : this._CASInfo - }), - packetWriter = new PacketWriter(openDatabasePacket.getBufferLength()); + resolve(); + }; - openDatabasePacket.write(packetWriter); + if (this.connectionBrokerPort) { + // The broker port has changed, so we need to create + // a new socket connection. + socket = this._socket = Net.createConnection(this.connectionBrokerPort, this.host); - socket.on('data', this._receiveBytes({ - parserFunction: this._parseDatabaseLoginBuffer, - dataPacket: openDatabasePacket - }, callback)); + socket.setNoDelay(true); + socket.setTimeout(this.getConnectionTimeout()); - socket.write(packetWriter._buffer); -}; + _setSocketTimeoutErrorListeners.call(this, callback); + } else { + // The broker port has not been changed. We can reuse the socket. + socket = this._socket; + } + + let openDatabasePacket = new OpenDatabasePacket({ + database: this.database, + user: this.user, + password: this.password, + logger: this.logger + }); + const packetWriter = new PacketWriter(openDatabasePacket.getBufferLength()); + + openDatabasePacket.write(packetWriter); + + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseDatabaseLoginBuffer.bind(this), + dataPacket: openDatabasePacket + }, callback)); + + socket.write(packetWriter._buffer); + }); +} /** * Get the server database engine version - * @param callback */ -CUBRIDConnection.prototype._getEngineVersion = function (callback) { - var getEngineVersionPacket = new GetEngineVersionPacket({ - casInfo : this._CASInfo - }), - packetWriter = new PacketWriter(getEngineVersionPacket.getBufferLength()), - socket = this._socket; +function _getEngineVersion() { + this.logger.debug('_getEngineVersion'); - getEngineVersionPacket.write(packetWriter); + return new Promise((resolve, reject) => { + let getEngineVersionPacket = new GetEngineVersionPacket({ + casInfo : this._CASInfo + }); + const packetWriter = new PacketWriter(getEngineVersionPacket.getBufferLength()); + const socket = this._socket; - this._socketCurrentEventCallback = callback; + getEngineVersionPacket.write(packetWriter); - socket.on('data', this._receiveBytes({ - parserFunction: this._parseEngineVersionBuffer, - dataPacket: getEngineVersionPacket - }, callback)); + let callback = (err, engineVersion) => { + if (err) { + return reject(err); + } - socket.write(packetWriter._buffer); -}; + resolve(engineVersion); + }; + + this._socketCurrentEventCallback = callback; + + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseEngineVersionBuffer.bind(this), + dataPacket: getEngineVersionPacket + }, callback)); + + socket.write(packetWriter._buffer); + }); +} /** * Connect to database * @param callback */ -CUBRIDConnection.prototype.connect = function (callback) { - var self = this, - err = this._NO_ERROR; +CUBRIDConnection.prototype.getActiveHost = function (callback) { + return this + .connect() + .then(() => { + const host = Object.freeze(this.hosts[this.currentHostIndex]); + + if (typeof callback === 'function') { + return callback(undefined, host); + } - if (this.connectionOpened === true) { - err = new Error(ErrorMessages.ERROR_CONNECTION_ALREADY_OPENED); - Helpers._emitEvent(this, err, this.EVENT_ERROR); + return Promise.resolve(host); + }) + .catch(err => { + if (typeof callback === 'function') { + return callback(err); + } + + throw err; + }); +}; +/** + * Connect to database + * @param callback + */ +CUBRIDConnection.prototype.connect = function (callback) { + this.logger.debug(`connect with timeout = ${this.connectionTimeout} ms.`); + + return new Promise((resolve, reject) => { + if (this.connectionOpened) { + if (typeof callback === 'function') { + return callback(); + } - if (typeof(callback) === 'function') { - callback(err); + return resolve(); } - return; - } + if (this.connectionPending) { + let err = new Error(ErrorMessages.ERROR_CONNECTION_ALREADY_PENDING); - if (this.connectionPending === true) { - err = new Error(ErrorMessages.ERROR_CONNECTION_ALREADY_PENDING); - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + if (typeof callback === 'function') { + return callback(err); + } - if (typeof(callback) === 'function') { - callback(err); + return reject(err); } - return; - } + this.connectionPending = true; - this.connectionPending = true; + let cb = (err) => { + // Reset query execution status + this.connectionPending = false; + this.connectionOpened = typeof err === 'undefined'; - ActionQueue.enqueue([ - this._doGetBrokerPort.bind(this), - this._doDatabaseLogin.bind(this), - this._getEngineVersion.bind(this) - ], function (err) { - // Reset query execution status - self.connectionPending = false; - self.connectionOpened = !(typeof err !== 'undefined' && err !== null); - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTED); + if (typeof callback === 'function') { + return callback(err); + } - if (typeof(callback) === 'function') { - callback(err); - } + if (err) { + return reject(err); } - ); -}; -CUBRIDConnection.prototype._implyConnect = function(cb) { - if (this.connectionOpened) { - process.nextTick(cb); - } else { - this.connect(cb); - } + resolve(); + }; + + _doGetBrokerPort.call(this) + .then(_doDatabaseLogin.bind(this)) + .then(cb) + .catch(cb); + }); }; /** @@ -419,19 +472,23 @@ CUBRIDConnection.prototype._implyConnect = function(cb) { * @param callback */ CUBRIDConnection.prototype.getEngineVersion = function (callback) { - var self = this; - - Helpers._emitEvent(this, this._NO_ERROR, this.EVENT_ERROR, this.EVENT_ENGINE_VERSION_AVAILABLE, this._DB_ENGINE_VER); + return this + .connect() + .then(_getEngineVersion.bind(this)) + .then(version => { + if (typeof callback === 'function') { + return callback(undefined, version); + } - if (typeof(callback) === 'function') { - // Support asynchronous call for backward compatibility. - process.nextTick(function () { - callback(self._NO_ERROR, self._DB_ENGINE_VER); - }); - } + return Promise.resolve(version); + }) + .catch(err => { + if (typeof callback === 'function') { + return callback(err); + } - // Support synchronous call. - return this._DB_ENGINE_VER; + throw err; + }); }; /** @@ -440,154 +497,178 @@ CUBRIDConnection.prototype.getEngineVersion = function (callback) { * @param callback */ CUBRIDConnection.prototype.batchExecuteNoQuery = function (sqls, callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.push(done => { + this.logger.debug('batchExecuteNoQuery', sqls); + + this.connect() + .then(() => { + return _batchExecuteNoQuery.call(this, sqls); + }) + .then(() => { + done(); + + if (typeof callback === 'function') { + return callback(); + } + + resolve(); + }) + .catch(err => { + done(); + + if (typeof callback === 'function') { + return callback(err); + } - this._queue.push(function (done) { - self._batchExecuteNoQuery(sqls, function (err) { - query.callback(err); - done(); + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._batchExecuteNoQuery = function (sqls, callback) { - var err = this._NO_ERROR, - self = this; +function _batchExecuteNoQuery(sqls) { + if (!Array.isArray(sqls)) { + sqls = [sqls] + } + + if (!sqls.length) { + return; + } + + return new Promise((resolve, reject) => { + const batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket({ + autoCommit: this.autoCommitMode, + casInfo: this._CASInfo, + logger: this.logger, + protocolVersion: this.brokerInfo.protocolVersion, + sqls, + }); + const packetWriter = new PacketWriter(batchExecuteNoQueryPacket.getBufferLength()); + const socket = this._socket; - if (Array.isArray(sqls)) { - if (!sqls.length) { - // No commands to execute - Helpers._emitEvent(this, err, this.EVENT_ERROR, this.EVENT_BATCH_COMMANDS_COMPLETED); + batchExecuteNoQueryPacket.write(packetWriter); - if (typeof(callback) === 'function') { - callback(err); + let callback = (err) => { + // Propagate the error. + if (err) { + return reject(err); } - return; - } - } else { - sqls = [sqls]; - } + resolve(); + }; - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket({ - SQLs : sqls, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(batchExecuteNoQueryPacket.getBufferLength()), - socket = self._socket; - - batchExecuteNoQueryPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parseBatchExecuteBuffer, - dataPacket: batchExecuteNoQueryPacket - }, cb)); + this._socketCurrentEventCallback = callback; - socket.write(packetWriter._buffer); - } - ], function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BATCH_COMMANDS_COMPLETED); + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseBatchExecuteBuffer.bind(this), + dataPacket: batchExecuteNoQueryPacket + }, callback)); - if (typeof(callback) === 'function') { - callback(err); - } + socket.write(packetWriter._buffer); }); -}; +} -// ## client.execute(sql, callback); +// ## client.execute(sql, params, callback); // `sql` is a string which represents a WRITE query or an array of strings // for batch processing. // `callback(err)` function accepts one argument: an error object if any. -CUBRIDConnection.prototype.execute = function (sql, callback) { - if (this._ENFORCE_OLD_QUERY_PROTOCOL === true) { - return this.executeWithTypedParams(sql, null, null, callback); - } else { - return this.batchExecuteNoQuery(sql, callback); - } -}; +CUBRIDConnection.prototype.execute = function execute(sql, params, callback) { + const query = new Query(sql, params, callback); -/** - * Execute sql statement with parameters - * @param sql - * @param arrParamsValues - * @param arrDelimiters - * @param callback - * @return {*} - */ -CUBRIDConnection.prototype.executeWithParams = function (sql, arrParamsValues, arrDelimiters, callback) { - var formattedSQL = Helpers._sqlFormat(sql, arrParamsValues, arrDelimiters); - Helpers.logInfo('Formatted sql is: ' + formattedSQL); + this.logger.info('execute', query.sql); + + if (this.shouldUseOldQueryProtocol()) { + return this.executeWithTypedParams(query.sql, undefined, undefined, query.callback); + } - return this.execute(formattedSQL, callback); + return this.batchExecuteNoQuery(query.sql, query.callback); }; /** * Execute sql statement with typed parameters * @param sql - * @param arrParamsValues - * @param arrParamsDataTypes + * @param params + * @param dataTypes * @param callback * @return {*} */ -CUBRIDConnection.prototype.executeWithTypedParams = function (sql, arrParamsValues, arrParamsDataTypes, callback) { - var self = this, - query = new Query(null, callback); - - this._queue.push(function (done) { - self._executeWithTypedParams(sql, arrParamsValues, arrParamsDataTypes, function (err) { - query.callback(err); - done(); +CUBRIDConnection.prototype.executeWithTypedParams = function (sql, params, dataTypes, callback) { + return new Promise((resolve, reject) => { + this._queue.push(done => { + this.logger.debug('executeWithTypedParams', sql, params, dataTypes); + + this.connect() + .then(() => { + return prepareExecute.call(this, sql, params, dataTypes); + }) + .then(() => { + done(); + + if (typeof callback === 'function') { + return callback(); + } + + resolve(); + }) + .catch(err => { + done(); + + if (typeof callback === 'function') { + return callback(err); + } + + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._executeWithTypedParams = function (sql, arrParamsValues, arrParamsDataTypes, callback) { - var self = this; - - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var prepareExecuteOldProtocolPacket = new PrepareExecuteOldProtocolPacket({ - sql : sql, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER, - paramValues : arrParamsValues, - paramTypes : arrParamsDataTypes - }), - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), - socket = self._socket; - - prepareExecuteOldProtocolPacket.writePrepare(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parsePrepareBufferForOldProtocol, - dropDataPacket: true, - dataPacket: prepareExecuteOldProtocolPacket - }, cb)); +function prepareExecute(sql, paramValues, paramTypes) { + this.logger.debug('prepareExecute', sql, paramValues, paramTypes); - socket.write(packetWriter._buffer); + return new Promise((resolve, reject) => { + if (Array.isArray(sql)) { + return reject(new Error(ErrorMessages.ERROR_MULTIPLE_QUERIES)); } - ], function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BATCH_COMMANDS_COMPLETED); - if (typeof(callback) === 'function') { - callback(err); - } + const prepareExecutePacket = new PrepareExecutePacket({ + autoCommit: this.autoCommitMode, + casInfo: this._CASInfo, + logger: this.logger, + paramTypes, + paramValues, + protocolVersion: this.brokerInfo.protocolVersion, + sql, + }); + const packetWriter = new PacketWriter(prepareExecutePacket.getPrepareBufferLength()); + const socket = this._socket; + + prepareExecutePacket.writePrepare(packetWriter); + + let callback = (err, result, queryHandle) => { + if (err) { + return reject(err); + } + + resolve(result ? { + queryHandle, + result, + } : undefined); + }; + + this._socketCurrentEventCallback = callback; + + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parsePrepareBufferForOldProtocol.bind(this), + dataPacket: prepareExecutePacket + }, callback)); + + socket.write(packetWriter._buffer); }); -}; +} -CUBRIDConnection.prototype._receiveBytes = function (options, cb) { +function _receiveBytes(options, cb) { this._callback = cb; this._parserOptions = options; this._parserFunction = options.parserFunction; @@ -595,11 +676,11 @@ CUBRIDConnection.prototype._receiveBytes = function (options, cb) { this._buffArr = []; this._expectedResponseLength = this._INVALID_RESPONSE_LENGTH; - return this._receiveFirstBytes.bind(this); -}; + return _receiveFirstBytes.bind(this); +} -CUBRIDConnection.prototype._receiveFirstBytes = function (data) { - var socket = this._socket; +function _receiveFirstBytes(data) { + const socket = this._socket; // Clear timeout if any. socket.setTimeout(0); @@ -610,7 +691,7 @@ CUBRIDConnection.prototype._receiveFirstBytes = function (data) { if (this._expectedResponseLength === this._INVALID_RESPONSE_LENGTH && this._totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = this._buffArr.length, + let l = this._buffArr.length, buff; socket.pause(); @@ -630,248 +711,176 @@ CUBRIDConnection.prototype._receiveFirstBytes = function (data) { this._expectedResponseLength = Helpers._getExpectedResponseLength(buff); if (this._totalBuffLength < this._expectedResponseLength) { - socket.on('data', this._receiveRemainingBytes.bind(this)); + socket.on('data', _receiveRemainingBytes.bind(this)); socket.resume(); } else { socket.resume(); - this._parseBuffer(); + _parseBuffer.call(this); } } -}; +} -CUBRIDConnection.prototype._receiveRemainingBytes = function (data) { +function _receiveRemainingBytes(data) { this._totalBuffLength += data.length; this._buffArr.push(data); // If we have received all the expected data, start parsing it. if (this._totalBuffLength === this._expectedResponseLength) { - this._parseBuffer(); + _parseBuffer.call(this); } -}; +} -CUBRIDConnection.prototype._parseBuffer = function () { +function _parseBuffer() { this._socket.removeAllListeners('data'); - var packetReader = new PacketReader(); + let packetReader = new PacketReader(); packetReader.write(Buffer.concat(this._buffArr, this._totalBuffLength)); this._parserFunction(packetReader); -}; - -CUBRIDConnection.prototype._parseBufferForNewProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parse(packetReader).resultSet, - errorCode = dataPacket.errorCode, - err; +} - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - this._queriesPacketList.push(dataPacket); +function _parseBufferForNewProtocol(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - if (this._queryCache !== null) { - this._queryCache.getSet(this._parserOptions.sql, result); - } + if (error) { + return this._callback(error); } - this._callback(err, result, dataPacket.queryHandle); -}; + const queryHandle = dataPacket.queryHandle; -CUBRIDConnection.prototype._parsePrepareBufferForOldProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + this._queryResultSets[queryHandle] = dataPacket; + + this._callback(undefined, dataPacket.resultSet, queryHandle); +} - dataPacket.parsePrepare(packetReader); +function _parsePrepareBufferForOldProtocol(packetReader) { + const dataPacket = this._parserOptions.dataPacket; - var errorCode = dataPacket.errorCode; + const error = dataPacket.parsePrepare(packetReader); - if (errorCode !== 0) { - cb(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); - } else { - this._parseExecuteForOldProtocol(); + if (error) { + return this._callback(error); } -}; -CUBRIDConnection.prototype._parseExecuteForOldProtocol = function () { - var dataPacket = this._parserOptions.dataPacket, - packetWriter = new PacketWriter(dataPacket.getExecuteBufferLength()), - socket = this._socket; + _parseExecuteForOldProtocol.call(this); +} + +function _parseExecuteForOldProtocol() { + const dataPacket = this._parserOptions.dataPacket; + const packetWriter = new PacketWriter(dataPacket.getExecuteBufferLength()); + const socket = this._socket; dataPacket.writeExecute(packetWriter); this._socketCurrentEventCallback = this._callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseExecuteBufferForOldProtocol, + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseExecuteBufferForOldProtocol.bind(this), dropDataPacket: this._parserOptions.dropDataPacket, dataPacket: dataPacket }, this._callback)); socket.write(packetWriter._buffer); -}; - -CUBRIDConnection.prototype._parseExecuteBufferForOldProtocol = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parseExecute(packetReader).resultSet, - errorCode = dataPacket.errorCode; +} - if (errorCode !== 0) { - this._callback(new Error(errorCode + ':' + dataPacket.errorMsg)); - } else { - if (!this._parserOptions.dropDataPacket) { - this._queriesPacketList.push(dataPacket); - } +function _parseExecuteBufferForOldProtocol(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parseExecute(packetReader); - this._callback(null, result, dataPacket.queryHandle); + if (error) { + return this._callback(error); } -}; -CUBRIDConnection.prototype._parseFetchBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parse(packetReader, this._queriesPacketList[this._parserOptions.i]).resultSet, - errorCode = dataPacket.errorCode, - err; + const queryHandle = dataPacket.queryHandle; - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); + if (dataPacket.resultSet) { + this._queryResultSets[queryHandle] = dataPacket; } - this._callback(err, result); -}; - -CUBRIDConnection.prototype._parseBatchExecuteBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; - - dataPacket.parse(packetReader); + this._callback(undefined, dataPacket.resultSet, queryHandle); +} - var errorCode = dataPacket.errorCode, - err; +function _parseFetchBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader, this._queryResultSets[this._parserOptions.queryHandle]); - // If there is a gloal error, get the error message - // from dataPacket.errorMsg. - if (errorCode !== 0 && dataPacket.errorMsg) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - // Otherwise, check the individual responses of each query in the batch - // and see if there is an error. - err = []; + this._callback(error, dataPacket.resultSet); +} - for (var i = 0; i < dataPacket.arrResultsCode.length; ++i) { - if (dataPacket.arrResultsCode[i] < 0) { - err.push(new Error(dataPacket.arrResultsCode[i] + ':' + dataPacket.arrResultsMsg[i])); - } - } +function _parseBatchExecuteBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + // CAS error. + let error = dataPacket.parse(packetReader); - if (!err.length) { - err = null; + if (!error) { + // Individual SQL errors. + if (dataPacket.errors.length) { + error = dataPacket.errors; } } - this._callback(err); -}; - -CUBRIDConnection.prototype._parseDatabaseLoginBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; - - dataPacket.parse(packetReader); - this._CASInfo = dataPacket.casInfo; + this._callback(error); +} - var errorCode = dataPacket.errorCode, - err; +function _parseDatabaseLoginBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { + if (!error) { + this._CASInfo = dataPacket.casInfo; this.sessionId = dataPacket.sessionId; + this.brokerInfo = dataPacket.brokerInfo; this.autoCommitMode = this.AUTOCOMMIT_ON; } - this._callback(err); -}; - -CUBRIDConnection.prototype._parseEngineVersionBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; - - dataPacket.parse(packetReader); - - var errorCode = dataPacket.errorCode, - err; - - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } else { - this._DB_ENGINE_VER = dataPacket.engineVersion; - } - - this._callback(err); -}; - -CUBRIDConnection.prototype._parseCloseQueryBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; + this._callback(error); +} - dataPacket.parse(packetReader); +function _parseEngineVersionBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - var errorCode = dataPacket.errorCode, - err; + this._callback(error, dataPacket.engineVersion); +} - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } +function _parseCloseQueryBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - this._callback(err); -}; + this._callback(error); +} -CUBRIDConnection.prototype._parseCloseBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; +function _parseCloseBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - dataPacket.parse(packetReader); // Close internal socket connection. this._socket.destroy(); - var errorCode = dataPacket.errorCode, - err; - - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } - - this._callback(err); -}; - -CUBRIDConnection.prototype._parseCommitBuffer = - CUBRIDConnection.prototype._parseRollbackBuffer = - CUBRIDConnection.prototype._parseSetDatabaseParameterBuffer = - - CUBRIDConnection.prototype._parseGetDatabaseParameterBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; - - dataPacket.parse(packetReader); - - var errorCode = dataPacket.errorCode, - err; - - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } - - this._callback(err); - }; + this._callback(error); +} -CUBRIDConnection.prototype._parseGetSchemaBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket; +function _parseResponseCodeBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); - dataPacket.parseRequestSchema(packetReader); + this._callback(error); +} - var errorCode = dataPacket.errorCode; +function _parseGetSchemaBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parseRequestSchema(packetReader); - if (errorCode !== 0) { - this._callback(new Error(errorCode + ':' + dataPacket.errorMsg), dataPacket); - } else { - this._parseWriteFetchSchema(); + if (error) { + return this._callback(error); } -}; + + _parseWriteFetchSchema.call(this); +} -CUBRIDConnection.prototype._parseWriteFetchSchema = function () { - var dataPacket = this._parserOptions.dataPacket, +function _parseWriteFetchSchema() { + let dataPacket = this._parserOptions.dataPacket, packetWriter = new PacketWriter(dataPacket.getFetchSchemaBufferLength()), socket = this._socket; @@ -879,370 +888,465 @@ CUBRIDConnection.prototype._parseWriteFetchSchema = function () { this._socketCurrentEventCallback = this._callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseFetchSchemaBuffer, + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseFetchSchemaBuffer.bind(this), dataPacket: dataPacket }, this._callback)); socket.write(packetWriter._buffer); -}; +} -CUBRIDConnection.prototype._parseFetchSchemaBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - result = dataPacket.parseFetchSchema(packetReader).schemaInfo, - errorCode = dataPacket.errorCode, - err; +function _parseFetchSchemaBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parseFetchSchema(packetReader); - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } + this._callback(error, dataPacket.schemaInfo); +} - this._callback(err, result); -}; +function _parseLobNewBuffer(packetReader) { + const dataPacket = this._parserOptions.dataPacket; + const error = dataPacket.parse(packetReader); -CUBRIDConnection.prototype._parseLobNewBuffer = function (packetReader) { - var dataPacket = this._parserOptions.dataPacket, - logObject = dataPacket.parse(packetReader).result, - errorCode = dataPacket.errorCode, - err; + this._callback(error, dataPacket.result); +} - if (errorCode !== 0) { - err = new Error(errorCode + ':' + dataPacket.errorMsg); - } +CUBRIDConnection.prototype.queryAll = function (sql, params, callback) { + const query = new Query(sql, params, callback); - this._callback(err, logObject); -}; + return this + .query(query.sql) + .then(response => { + const result = response.result; -CUBRIDConnection.prototype.query = function (sql, params, callback) { - var self = this, - query = new Query(sql, params, callback); + return this + .fetch(response.queryHandle, /* fetch all */true) + .then(res => { + const extraValues = res.result && res.result.ColumnValues || undefined; - this._queue.push(function (done) { - self._query(query.sql, function (err, result, queryHandle) { - query.callback(err, result, queryHandle); - done(); - }); - }); -}; + if (extraValues) { + const len = extraValues.length; + let values = result.ColumnValues; -/** - * Execute query and retrieve rows results - * @param sql - * @param callback - */ -CUBRIDConnection.prototype._query = function (sql, callback) { - if (this._ENFORCE_OLD_QUERY_PROTOCOL) { - return this._queryOldProtocol(sql, null, null, callback); - } else { - return this._queryNewProtocol(sql, callback); - } -}; + for (let i = 0; i < len; ++i) { + values.push(extraValues[i]); + } + } -CUBRIDConnection.prototype._queryNewProtocol = function (sql, callback) { - var self = this; - - ActionQueue.enqueue([ - function (cb) { - self._implyConnect(cb); - }, - function (cb) { - // Check if data is already in cache - if (self._queryCache !== null && self._queryCache.contains(sql)) { - cb(null, self._queryCache.get(sql)); - } else { - var executeQueryPacket = new ExecuteQueryPacket({ - sql : sql, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(executeQueryPacket.getBufferLength()), - socket = self._socket; - - executeQueryPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - // `_receiveBytes()` will return a function which will process the - // incoming data. - socket.on('data', self._receiveBytes({ - sql: sql, - parserFunction: self._parseBufferForNewProtocol, - dataPacket: executeQueryPacket - }, cb)); + // Auto close the query statement because we have already + // retrieved all the values. + return this.closeQuery(res.queryHandle); + }) + .then(() => { + if (typeof query.callback === 'function') { + // Return only the result without the query handle. + return query.callback(undefined, result); + } - socket.write(packetWriter._buffer); - } - } - ], function (err, result, handle) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_DATA_AVAILABLE, result, handle, sql); + return Promise.resolve(result); + }); + }) + .catch(err => { + if (typeof query.callback === 'function') { + return query.callback(err); + } - if (typeof(callback) === 'function') { - callback(err, result, handle); - } - }); + throw err; + }); }; -/** - * Execute query and retrieve rows results, using the older 8.4.x query protocol - * @param sql - * @param arrParamsValues - * @param arrParamsDataTypes - * @param callback - */ -CUBRIDConnection.prototype._queryOldProtocol = function (sql, arrParamsValues, arrParamsDataTypes, callback) { - var self = this; - - ActionQueue.enqueue([ - function (cb) { - self._implyConnect(cb); - }, - function (cb) { - var prepareExecuteOldProtocolPacket = new PrepareExecuteOldProtocolPacket({ - sql : sql, - casInfo : self._CASInfo, - autoCommitMode : self.autoCommitMode, - dbVersion : self._DB_ENGINE_VER, - paramValues : arrParamsValues, - paramTypes : arrParamsDataTypes - }), - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()), - socket = self._socket; - - prepareExecuteOldProtocolPacket.writePrepare(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parsePrepareBufferForOldProtocol, - dataPacket: prepareExecuteOldProtocolPacket - }, cb)); +CUBRIDConnection.prototype.queryAllAsObjects = function (sql, params, callback) { + const query = new Query(sql, params, callback); - socket.write(packetWriter._buffer); - } - ], function (err, result, handle) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_DATA_AVAILABLE, result, handle, sql); + return this + .queryAll(query.sql) + .then(result => { + result = getObjects(result); - if (typeof(callback) === 'function') { - callback(err, result, handle); - } - }); + if (typeof query.callback === 'function') { + // Return only the result without the query handle. + return query.callback(undefined, result); + } + + return Promise.resolve(result); + }) + .catch(err => { + if (typeof query.callback === 'function') { + return query.callback(err); + } + + throw err; + }); }; -/** - * Execute query with parameters - * @param sql - * @param arrParamsValues - * @param arrDelimiters - * @param callback - * @return {*} - */ -CUBRIDConnection.prototype.queryWithParams = function (sql, arrParamsValues, arrDelimiters, callback) { - var formattedSQL = Helpers._sqlFormat(sql, arrParamsValues, arrDelimiters); - Helpers.logInfo('Formatted sql is: ' + formattedSQL); +function getObjects(result) { + const columnNames = result.ColumnNames; + const columnValues = result.ColumnValues; + const rowsCount = result.ColumnValues.length; + const colCount = columnNames.length; + + let arr = new Array(rowsCount); + + for (let i = 0; i < rowsCount; ++i) { + let row = arr[i] = {}; + + let columns = columnValues[i]; + + for (let j = 0; j < colCount; ++j) { + row[columnNames[j]] = columns[j]; + } + } + + return arr; +} - return this.query(formattedSQL, callback); +CUBRIDConnection.prototype.queryAsObjects = function (sql, params, callback) { + const query = new Query(sql, params, callback); + + return this + .query(query.sql) + .then(response => { + let result = getObjects(response.result); + + if (typeof query.callback === 'function') { + // Return only the result without the query handle. + return query.callback(undefined, result, response.queryHandle); + } + + return Promise.resolve({ + queryHandle: response.queryHandle, + result, + }); + }) + .catch(err => { + if (typeof query.callback === 'function') { + return query.callback(err); + } + + throw err; + }); }; -/** - * Execute query with typed parameters - * @param sql - * @param arrParamsValues - * @param arrParamsDataTypes - * @param callback - * @return {*} - */ -CUBRIDConnection.prototype.queryWithTypedParams = function (sql, arrParamsValues, arrParamsDataTypes, callback) { - return this._queryOldProtocol(sql, arrParamsValues, arrParamsDataTypes, callback); +CUBRIDConnection.prototype.query = function (sql, params, callback) { + return new Promise((resolve, reject) => { + this._queue.push(done => { + const query = new Query(sql, params, callback); + + this.logger.info('query', query.sql); + + this.connect() + .then(() => { + if (this.shouldUseOldQueryProtocol()) { + return prepareExecute.call(this, query.sql); + } + + return _queryNewProtocol.call(this, query.sql); + }) + .then(response => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, response.result, response.queryHandle); + } + + resolve(response); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } + + return reject(err); + }); + }); + }); }; +function _queryNewProtocol(sql) { + this.logger.debug('_queryNewProtocol'); + + return new Promise((resolve, reject) => { + const executeQueryPacket = new ExecuteQueryPacket({ + autoCommit: this.autoCommitMode, + casInfo: this._CASInfo, + logger: this.logger, + protocolVersion: this.brokerInfo.protocolVersion, + sql, + }); + const packetWriter = new PacketWriter(executeQueryPacket.getBufferLength()); + const socket = this._socket; + + executeQueryPacket.write(packetWriter); + + let callback = (err, result, queryHandle) => { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }; + + this._socketCurrentEventCallback = callback; + + // `_receiveBytes()` will return a function which will process the + // incoming data. + socket.on('data', _receiveBytes.call(this, { + sql: sql, + parserFunction: _parseBufferForNewProtocol.bind(this), + dataPacket: executeQueryPacket + }, callback)); + + socket.write(packetWriter._buffer); + }); +} + /** * Fetch query next rows results * @param queryHandle * @param callback */ -CUBRIDConnection.prototype.fetch = function (queryHandle, callback) { - var self = this, - query = new Query(null, callback); - - this._queue.unshift(function (done) { - self._fetch(queryHandle, function (err, result, queryHandle) { - query.callback(err, result, queryHandle); - done(); +CUBRIDConnection.prototype.fetch = function (queryHandle, all, callback) { + return new Promise((resolve, reject) => { + this._queue.unshift(done => { + if (typeof all === 'function') { + callback = all; + all = false; + } + + const query = new Query(callback); + + this.logger.info(`fetch: queryHandle = ${queryHandle}`); + + this.connect() + .then(() => { + return _fetch.call(this, queryHandle, all); + }) + .then(response => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, response.result, response.queryHandle); + } + + resolve(response); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } + + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._fetch = function (queryHandle, callback) { - var self = this, - err = this._NO_ERROR, - foundQueryHandle = false; +function _fetch(queryHandle, all) { + return new Promise((resolve, reject) => { + const packet = this._queryResultSets[queryHandle]; + let results = null; - for (var i = 0; i < this._queriesPacketList.length; i++) { - if (this._queriesPacketList[i].queryHandle === queryHandle) { - foundQueryHandle = true; - break; + if (!packet) { + return reject(new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY)); } - } - if (!foundQueryHandle) { - err = new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY); + let fetchSome = (err, result) => { + if (err) { + return reject(err); + } - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + if (result) { + // If we could fetch some data, add them to the existing list. + if (results) { + let values = results.ColumnValues; + const extraValues = result.ColumnValues; - if (typeof(callback) === 'function') { - callback(err, null, null); - } - } else { - if (this._queriesPacketList[i].currentTupleCount === this._queriesPacketList[i].totalTupleCount) { - Helpers._emitEvent(this, err, this.EVENT_ERROR, this.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, queryHandle); + for (let i = 0, len = extraValues.length; i < len; ++i) { + values.push(extraValues[i]); + } + } else { + results = result; + } + } - if (typeof(callback) === 'function') { - callback(err, null, queryHandle); + // If there is no more data left to fetch, return what we could retrieve. + // Or we have received the first batch of results and the user + // has not requested to retrieve all values, then return what + // we have. + if (packet.currentTupleCount === packet.totalTupleCount || results && !all) { + return resolve({ + queryHandle, + result: results, + }); } - } else { - var fetchPacket = new FetchPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(fetchPacket.getBufferLength()), - socket = this._socket; - fetchPacket.write(packetWriter, this._queriesPacketList[i]); + const fetchPacket = new FetchPacket({ + casInfo: this._CASInfo, + logger: this.logger, + }); + const packetWriter = new PacketWriter(fetchPacket.getBufferLength()); + const socket = this._socket; - this._socketCurrentEventCallback = callback; + fetchPacket.write(packetWriter, packet); - socket.on('data', this._receiveBytes({ - i: i, - parserFunction: this._parseFetchBuffer, + socket.on('data', _receiveBytes.call(this, { + queryHandle, + parserFunction: _parseFetchBuffer.bind(this), dataPacket: fetchPacket - }, function (err, result) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_FETCH_DATA_AVAILABLE, result, queryHandle); - - if (typeof(callback) === 'function') { - callback(err, result, queryHandle); - } - })); + }, fetchSome)); socket.write(packetWriter._buffer); - } - } -}; + }; + + this._socketCurrentEventCallback = fetchSome; + + fetchSome(undefined, null); + }); +} /** - * Close query + * Close query. It is important to close every query because CUBRID Broker + * (CAS actually that was assigned to this connection by the Broker) will + * keep the memory occupied by the query. The query statement resources + * will get closed automatically only on disconnection. Until then the + * query resources will be kept in memory. If not released on time, OOM + * (Out Of Memory) issue can be caused on the server side. * @param queryHandle * @param callback */ CUBRIDConnection.prototype.closeQuery = function (queryHandle, callback) { - var self = this, - query = new Query(queryHandle, callback); + return new Promise((resolve, reject) => { + this._queue.unshift(done => { + this.logger.debug('closeQuery', queryHandle); + + this.connect() + .then(() => { + return _closeQuery.call(this, queryHandle); + }) + .then(() => { + done(); + + if (typeof callback === 'function') { + return callback(); + } + + resolve(); + }) + .catch(err => { + done(); + + if (typeof callback === 'function') { + return callback(err); + } - this._queue.unshift(function (done) { - self._closeQuery(queryHandle, function (err) { - query.callback(err, queryHandle); - done(); + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._closeQuery = function (queryHandle, callback) { - var self = this, - err = this._NO_ERROR, - foundQueryHandle = false; +function _closeQuery(queryHandle) { + return new Promise((resolve, reject) => { + let queryResultSets = this._queryResultSets; - for (var i = 0; i < this._queriesPacketList.length; ++i) { - if (this._queriesPacketList[i].queryHandle === queryHandle) { - foundQueryHandle = i; - break; + if (!queryResultSets[queryHandle]) { + return reject(new Error(`${ErrorMessages.ERROR_NO_ACTIVE_QUERY}: ${queryHandle}`)); } - } - if (foundQueryHandle === false) { - err = new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY + ": " + queryHandle); + let closeQueryPacket = new CloseQueryPacket({ + casInfo: this._CASInfo, + reqHandle: queryHandle, + }); + const packetWriter = new PacketWriter(closeQueryPacket.getBufferLength()); + const socket = this._socket; - if (typeof(callback) === 'function') { - callback(err); + closeQueryPacket.write(packetWriter); + + function onResponse(err) { + // Remove the event we've previously bound to. + socket.removeListener('end', onConnectionReset); + + if (err) { + return reject(err); + } + + // Remove the referenced query packet from the hash. + delete queryResultSets[queryHandle]; + + resolve(); } - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - } else { - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var closeQueryPacket = new CloseQueryPacket({ - casInfo : self._CASInfo, - reqHandle : queryHandle, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(closeQueryPacket.getBufferLength()), - socket = self._socket; - - closeQueryPacket.write(packetWriter); - - function onResponse(err) { - // Remove the event we've previously bound to. - socket.removeListener('end', onConnectionReset); - - if (!err) { - // Remove the referenced query packet from the hash. - self._queriesPacketList.splice(foundQueryHandle, 1); - } + function onConnectionReset() { + // CUBRID Broker may occasionally reset the connection between the client and the + // CAS that the Broker has assigned to this client. Refer to + // https://github.com/CUBRID/node-cubrid/issues/15 for details. According to + // CUBRID CCI native driver implementation function qe_send_close_handle_msg(), + // we can consider the connection closed operation as a successful request. + // This is true because internally CUBRID Broker manages a pool of CAS + // (CUBRID Application Server) processes. When a client connects, the Broker + // assigns/connect it to one of the CAS. Then the client sends some query requests + // to this CAS. After the client receives a response, it may decide to do some + // other application logic before it closes the query handle. Once the client is + // done with the response, it may try to close the query handle. + // In between these receive response and close query, CUBRID Broker may reassign + // the CAS to another client. Notice the client-Broker connection is not broken. + // When the actual close query request arrives to the Broker, it finds out that + // the CAS referred by the client is reassigned, it sends CONNECTION RESET to the + // client. node-cubrid should listen it and consider such event as if the close + // query request was successful. + socket.removeAllListeners('data'); + // Execute `onResponse` without an error. + onResponse(); + } - cb(err); - } + function onError(err) { + socket.removeAllListeners('data'); - function onConnectionReset() { - // CUBRID Broker may occasionally reset the connection between the client and the - // CAS that the Broker has assigned to this client. Refer to - // https://github.com/CUBRID/node-cubrid/issues/15 for details. According to - // CUBRID CCI native driver implementation function qe_send_close_handle_msg(), - // we can consider the connection closed operation as a successful request. - // This is true because internally CUBRID Broker manages a pool of CAS - // (CUBRID Application Server) processes. When a client connects, the Broker - // assigns/connect it to one of the CAS. Then the client sends some query requests - // to this CAS. After the client receives a response, it may decide to do some - // other application logic before it closes the query handle. Once the client is - // done with the response, it may try to close the query handle. - // In between these receive response and close query, CUBRID Broker may reassign - // the CAS to another client. Notice the client-Broker connection is not broken. - // When the actual close query request arrives to the Broker, it finds out that - // the CAS referred by the client is reassigned, it sends CONNECTION RESET to the - // client. node-cubrid should listen it and consider such event as if the close - // query request was successful. - socket.removeAllListeners('data'); - // Execute `onResponse` without an error. - onResponse(); - } + // `ECONNRESET` should also be considered as a connection + // reset. + onResponse(err.code == 'ECONNRESET' ? undefined : err); + } - function onError(err) { - socket.removeAllListeners('data'); + this._socketCurrentEventCallback = onError; - // `ECONNRESET` should also be considered as a connection - // reset. - onResponse(err.code == 'ECONNRESET' ? null : err); - } + socket.on('data', _receiveBytes.call(this, { + queryHandle: queryHandle, + parserFunction: _parseCloseQueryBuffer.bind(this), + dataPacket: closeQueryPacket + }, onResponse)); - self._socketCurrentEventCallback = onError; + socket.on('end', onConnectionReset); - socket.on('data', self._receiveBytes({ - queryHandle: queryHandle, - parserFunction: self._parseCloseQueryBuffer, - dataPacket: closeQueryPacket - }, onResponse)); + socket.write(packetWriter._buffer); + }); +} - socket.on('end', onConnectionReset); +CUBRIDConnection.prototype.getMetaData = function (queryHandle, callback) { + return new Promise((resolve, reject) => { + const queryResultSet = this._queryResultSets[queryHandle]; - socket.write(packetWriter._buffer); - } - ], function (err) { - if (typeof(callback) === 'function') { - callback(err, queryHandle); + if (!queryResultSet) { + let err = new Error(ErrorMessages.ERROR_NO_ACTIVE_QUERY); + + if (typeof callback === 'function') { + return callback(err); } - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_QUERY_CLOSED, queryHandle); - }); - } + return reject(err); + } + + if (typeof callback === 'function') { + return callback(undefined, queryResultSet.resultSet); + } + + resolve(queryResultSet.resultSet); + }); }; /** @@ -1254,70 +1358,87 @@ CUBRIDConnection.prototype.close = close; CUBRIDConnection.prototype.end = close; function close(callback) { - var self = this; - - if (!this.connectionOpened) { - // If the connection has already been closed, no need to emit - // the error. After all this is what the client wants - to - // close the connection. - if (typeof(callback) === 'function') { - callback(); + return new Promise((resolve, reject) => { + this.logger.debug('close'); + + if (!this.connectionOpened) { + // If the connection has already been closed, no need to emit + // the error. After all this is what the client wants - to + // close the connection. + if (typeof callback === 'function') { + return callback(); + } + + return resolve(); } - return; - } + // Remove all pending requests. + this._queue.empty(); - // Remove all pending requests. - this._queue.empty(); - - ActionQueue.enqueue([ - function (cb) { - ActionQueue.while( - function () { - return (self._queriesPacketList[0] !== null && self._queriesPacketList[0] !== undefined); - }, - function (cb) { - self.closeQuery(self._queriesPacketList[0].queryHandle, cb); - }, - function (err) { - // Log non-blocking error - if (typeof err !== 'undefined' && err !== null) { - Helpers.logError(ErrorMessages.ERROR_ON_CLOSE_QUERY_HANDLE + err); - } + let promise = Promise.resolve(); + + // Close open queries. + const queryHandles = Object.keys(this._queryResultSets); + + queryHandles.forEach(queryHandle => { + promise = promise.then(() => { + return this.closeQuery(queryHandle); + }); + }); + + let closeConnection = () => { + return new Promise((resolve, reject) => { + let closeDatabasePacket = new CloseDatabasePacket({ + casInfo: this._CASInfo, + }); + const packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()); + const socket = this._socket; + + closeDatabasePacket.write(packetWriter); - cb(); + let callback = (err) => { + // Propagate the error. + if (err) { + return reject(err); } - ); - }, - function (cb) { - var closeDatabasePacket = new CloseDatabasePacket({ - casInfo : self._CASInfo, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()), - socket = self._socket; - - closeDatabasePacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', self._receiveBytes({ - parserFunction: self._parseCloseBuffer, - dataPacket: closeDatabasePacket - }, cb)); - socket.write(packetWriter._buffer); - } - ], function (err) { - // Reset connection status - self.connectionPending = false; - self.connectionOpened = false; + resolve(); + }; - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_CONNECTION_CLOSED); + // `_socketCurrentEventCallback` is called only when + // an unexpected error is thrown on the socket layer. + this._socketCurrentEventCallback = callback; - if (typeof(callback) === 'function') { - callback(err); - } + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseCloseBuffer.bind(this), + dataPacket: closeDatabasePacket + }, callback)); + + socket.write(packetWriter._buffer); + }); + }; + + // Close the connection. + promise + .then(closeConnection) + .then(() => { + // Reset connection status + this.connectionPending = false; + this.connectionOpened = false; + + if (typeof(callback) === 'function') { + return callback(); + } + + resolve(); + }) + .catch(err => { + if (typeof(callback) === 'function') { + return callback(err); + } + + reject(err); + }); }); } /** @@ -1325,20 +1446,15 @@ function close(callback) { * @param callback */ CUBRIDConnection.prototype.beginTransaction = function (callback) { - var self = this; - - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - _toggleAutoCommitMode(self, self.AUTOCOMMIT_OFF, cb); - } - ], function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_BEGIN_TRANSACTION); + return this.setAutoCommitMode(this.AUTOCOMMIT_OFF, callback); +}; - if (typeof(callback) === 'function') { - callback(err); - } - }); +/** + * End transaction + * @param callback + */ +CUBRIDConnection.prototype.endTransaction = function (callback) { + return this.setAutoCommitMode(this.AUTOCOMMIT_ON, callback); }; /** @@ -1347,13 +1463,15 @@ CUBRIDConnection.prototype.beginTransaction = function (callback) { * @param callback */ CUBRIDConnection.prototype.setAutoCommitMode = function (autoCommitMode, callback) { - var self = this; + return new Promise(resolve => { + // Accept any truthful value. + this.autoCommitMode = !!autoCommitMode; - _toggleAutoCommitMode(this, autoCommitMode, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SET_AUTOCOMMIT_MODE_COMPLETED); - if (typeof(callback) === 'function') { - callback(err); + if (typeof callback === 'function') { + return callback(); } + + return resolve(); }); }; @@ -1369,133 +1487,118 @@ CUBRIDConnection.prototype.getAutoCommitMode = function () { * @param callback */ CUBRIDConnection.prototype.rollback = function (callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.unshift(done => { + _rollback + .call(this) + .then(() => { + done(); + + if (typeof callback === 'function') { + return callback(); + } + + return resolve(); + }) + .catch(err => { + done(); - this._queue.unshift(function (done) { - self._rollback(function (err) { - query.callback(err); - done(); + if (typeof callback === 'function') { + return callback(err); + } + + reject(err); + }); }); }); }; -CUBRIDConnection.prototype._rollback = function (callback) { - var self = this, - err = this._NO_ERROR; +function _rollback() { + return new Promise((resolve, reject) => { + if (this.autoCommitMode) { + return reject(new Error(ErrorMessages.ERROR_NO_ROLLBACK)); + } - if (this.autoCommitMode === false) { - var rollbackPacket = new RollbackPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(rollbackPacket.getBufferLength()), - socket = this._socket; + const rollbackPacket = new RollbackPacket({ + casInfo: this._CASInfo, + }); + const packetWriter = new PacketWriter(rollbackPacket.getBufferLength()); + const socket = this._socket; rollbackPacket.write(packetWriter); + let callback = (err) => { + if (err) { + return reject(err); + } + + resolve(); + }; + this._socketCurrentEventCallback = callback; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseRollbackBuffer, + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseResponseCodeBuffer.bind(this), dataPacket: rollbackPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_ROLLBACK_COMPLETED); - - if (typeof(callback) === 'function') { - callback(err); - } - })); + }, callback)); socket.write(packetWriter._buffer); - } else { - err = new Error(ErrorMessages.ERROR_NO_ROLLBACK); - - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - - if (typeof(callback) === 'function') { - callback(err); - } - } -}; + }); +} /** * Commit transaction * @param callback */ CUBRIDConnection.prototype.commit = function (callback) { - var self = this, - query = new Query(null, callback); - - this._queue.unshift(function (done) { - self._commit(function (err) { - query.callback(err); - done(); - }); - }); -}; - -CUBRIDConnection.prototype._commit = function (callback) { - var self = this, - err = this._NO_ERROR; - - if (this.autoCommitMode === false) { - var commitPacket = new CommitPacket({ - casInfo : this._CASInfo, - db_version : this._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(commitPacket.getBufferLength()), - socket = this._socket; - - commitPacket.write(packetWriter); + return new Promise((resolve, reject) => { + // `commit` request should be higher priority so that + // we can free the memory on the server side as soon + // as we can. + this._queue.unshift(done => { + this.logger.debug('commit'); + + let cb = (err) => { + done(); + + if (typeof callback === 'function') { + return callback(err); + } - this._socketCurrentEventCallback = callback; + if (err) { + return reject(err); + } - socket.on('data', this._receiveBytes({ - parserFunction: this._parseCommitBuffer, - dataPacket: commitPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_COMMIT_COMPLETED); + resolve(); + }; - if (typeof(callback) === 'function') { - callback(err); + if (!this.connectionOpened) { + return cb(new Error(ErrorMessages.ERROR_CLOSED_CONNECTION_COMMIT)); } - })); - socket.write(packetWriter._buffer); - } else { - err = new Error(ErrorMessages.ERROR_NO_COMMIT); + if (this.autoCommitMode) { + return cb(new Error(ErrorMessages.ERROR_AUTO_COMMIT_ENABLED_COMMIT)); + } - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); + const commitPacket = new CommitPacket({ + casInfo: this._CASInfo, + }); + const packetWriter = new PacketWriter(commitPacket.getBufferLength()); + const socket = this._socket; - if (typeof(callback) === 'function') { - callback(err); - } - } -}; + commitPacket.write(packetWriter); -/** - * Set Auto-commit mode - * @param self - * @param autoCommitMode - * @param callback - * @private - */ -function _toggleAutoCommitMode(self, autoCommitMode, callback) { - var err = self._NO_ERROR; - - if (!Helpers._validateInputBoolean(autoCommitMode)) { - err = new Error(ErrorMessages.ERROR_INPUT_VALIDATION); + this._socketCurrentEventCallback = cb; - Helpers._emitEvent(self, err, self.EVENT_ERROR, null); - } else { - self.autoCommitMode = autoCommitMode; - } + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseResponseCodeBuffer.bind(this), + dataPacket: commitPacket + }, cb)); - if (typeof(callback) === 'function') { - callback(err); - } -} + socket.write(packetWriter._buffer); + }); + }); +}; /** * Get database schema information @@ -1504,51 +1607,77 @@ function _toggleAutoCommitMode(self, autoCommitMode, callback) { * @param callback */ CUBRIDConnection.prototype.getSchema = function (schemaType, tableNameFilter, callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.push(done => { + if (typeof tableNameFilter === 'function') { + callback = tableNameFilter; + tableNameFilter = undefined; + } + + const query = new Query(callback); - this._queue.push(function (done) { - self._getSchema(schemaType, tableNameFilter, function (err, result) { - query.callback(err, result); - done(); + this.logger.debug(`getSchema: schemaType = ${schemaType}; tableNameFilter = ${tableNameFilter}.`); + + this.connect() + .then(() => { + return _getSchema.call(this, schemaType, tableNameFilter); + }) + .then(response => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, response); + } + + resolve(response); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } + + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._getSchema = function (schemaType, tableNameFilter, callback) { - var self = this; +function _getSchema(schemaType, tableNameFilter) { + this.logger.debug('_getSchema', schemaType, tableNameFilter); - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var getSchemaPacket = new GetSchemaPacket({ - casInfo : self._CASInfo, - schemaType : schemaType, - tableNamePattern : tableNameFilter, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(getSchemaPacket.getRequestSchemaBufferLength()), - socket = self._socket; + return new Promise((resolve, reject) => { + const getSchemaPacket = new GetSchemaPacket({ + casInfo: this._CASInfo, + protocolVersion: this.brokerInfo.protocolVersion, + schemaType: schemaType, + shardId: this.shardId, + tableNamePattern: tableNameFilter, + }); + const packetWriter = new PacketWriter(getSchemaPacket.getRequestSchemaBufferLength()); + const socket = this._socket; - getSchemaPacket.writeRequestSchema(packetWriter); + getSchemaPacket.writeRequestSchema(packetWriter); - self._socketCurrentEventCallback = cb; + let callback = (err, result) => { + if (err) { + return reject(err); + } - socket.on('data', self._receiveBytes({ - parserFunction: self._parseGetSchemaBuffer, - dataPacket: getSchemaPacket - }, cb)); + resolve(result); + }; - socket.write(packetWriter._buffer); - } - ], function (err, result) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SCHEMA_DATA_AVAILABLE, result); + this._socketCurrentEventCallback = callback; - if (typeof(callback) === 'function') { - callback(err, result); - } + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseGetSchemaBuffer.bind(this), + dataPacket: getSchemaPacket + }, callback)); + + socket.write(packetWriter._buffer); }); -}; +} /** * Create a new LOB object @@ -1556,318 +1685,369 @@ CUBRIDConnection.prototype._getSchema = function (schemaType, tableNameFilter, c * @param callback */ CUBRIDConnection.prototype.lobNew = function (lobType, callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.push(done => { + const query = new Query(callback); + + this.logger.debug(`lobNew: lobType = ${lobType}.`); + + this.connect() + .then(() => { + return _lobNew.call(this, lobType); + }) + .then(lobObject => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, lobObject); + } + + resolve(lobObject); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } - this._queue.push(function (done) { - self._lobNew(lobType, function (err, lobObject) { - query.callback(err, lobObject); - done(); + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._lobNew = function (lobType, callback) { - var self = this; +function _lobNew(lobType) { + this.logger.debug('_lobNew', lobType); - ActionQueue.enqueue([ - this._implyConnect.bind(this), - function (cb) { - var lobNewPacket = new LOBNewPacket({ - casInfo : self._CASInfo, - lobType : lobType, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobNewPacket.getBufferLength()), - socket = self._socket; + return new Promise((resolve, reject) => { + const lobNewPacket = new LOBNewPacket({ + casInfo: this._CASInfo, + lobType, + }); + const packetWriter = new PacketWriter(lobNewPacket.getBufferLength()); + const socket = this._socket; - lobNewPacket.write(packetWriter); + lobNewPacket.write(packetWriter); - self._socketCurrentEventCallback = cb; + let callback = (err, result) => { + if (err) { + return reject(err); + } - socket.on('data', self._receiveBytes({ - parserFunction: self._parseLobNewBuffer, - dataPacket: lobNewPacket - }, cb)); + resolve(result); + }; - socket.write(packetWriter._buffer); - } - ], - function (err, lobObject) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_NEW_COMPLETED, lobObject); + this._socketCurrentEventCallback = callback; - if (typeof(callback) === 'function') { - callback(err, lobObject); - } - }); -}; + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseLobNewBuffer.bind(this), + dataPacket: lobNewPacket + }, callback)); + + socket.write(packetWriter._buffer); + }); +} /** * Write data to a LOB object * @param lobObject - * @param position + * @param offset * @param dataBuffer * @param callback */ -CUBRIDConnection.prototype.lobWrite = function (lobObject, position, dataBuffer, callback) { - var self = this, - query = new Query(null, callback); - - this._queue.push(function (done) { - self._lobWrite(lobObject, position, dataBuffer, function (err, lobObject, totalWriteLen) { - query.callback(err, lobObject, totalWriteLen); - done(); +CUBRIDConnection.prototype.lobWrite = function (lobObject, offset, data, callback) { + return new Promise((resolve, reject) => { + this._queue.push(done => { + const query = new Query(callback); + + this.logger.debug('lobNew'); + + this.connect() + .then(() => { + return _lobWrite.call(this, lobObject, offset, data); + }) + .then(response => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, response.lobObject, response.length); + } + + resolve(response); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } + + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._lobWrite = function (lobObject, position, dataBuffer, callback) { - var self = this, - err = self._NO_ERROR; +function _lobWrite(lobObject, offset, data) { + this.logger.debug('_lobWrite', lobObject, offset); - if (lobObject.lobLength + 1 !== position) { - err = new Error(ErrorMessages.ERROR_INVALID_LOB_POSITION); - Helpers.logError(ErrorMessages.ERROR_INVALID_LOB_POSITION); - return callback(err); - } + return new Promise((resolve, reject) => { + // Ensure sequential write. + if (lobObject.lobLength !== offset) { + return reject(new Error(ErrorMessages.ERROR_INVALID_LOB_POSITION)); + } - --position; + if (typeof data !== 'string' && !Buffer.isBuffer(data)) { + return reject(new Error(ErrorMessages.ERROR_INVALID_LOB_DATA)); + } - var realWriteLen, writeLen, - totalWriteLen = 0, - len = dataBuffer.length, - offset = 0; + if (typeof data === 'string') { + // Convert CLOB into a binary buffer. + data = Helpers.getBufferFromString(data); + } - ActionQueue.while( - function () { - return len > 0; - }, - function (cb) { - var expectedResponseLength = self._INVALID_RESPONSE_LENGTH; + let totalWriteLen = 0; - writeLen = Math.min(len, self._LOB_MAX_IO_LENGTH); + const totalBytesToWrite = data.length; + const writeLen = Math.min(totalBytesToWrite, this._LOB_MAX_IO_LENGTH); - var dataToWrite = null; + const callback = (err) => { + this._socketCurrentEventCallback = undefined; - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_BLOB) { - dataToWrite = dataBuffer.slice(position, position + writeLen); - } else { - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { - dataToWrite = dataBuffer.substring(position, position + writeLen); - } - } + if (err) { + return reject(err); + } - var lobWritePacket = new LOBWritePacket({ - casInfo : self._CASInfo, - lobObject : lobObject, - position : position, - data : dataToWrite, - writeLen : writeLen, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobWritePacket.getBufferLength()), - totalBuffLength = 0, - buffArr = [], - socket = self._socket; - - lobWritePacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', function (data) { - totalBuffLength += data.length; - buffArr.push(data); - - if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && - totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = buffArr.length, - buff; - - if (l > 1) { - buff = Buffer.concat(buffArr, totalBuffLength); - // For later, use this already concatenated buffer. - // First empty the array: http://stackoverflow.com/a/1234337/556678. - buffArr.length = 0; - // Then push this buffer in. - buffArr.push(buff); - } else { - buff = buffArr[0]; - } + lobObject.lobLength = offset; - expectedResponseLength = Helpers._getExpectedResponseLength(buff); - } + resolve({ + lobObject, + length: offset, + }); + }; + + this._socketCurrentEventCallback = callback; - if (totalBuffLength === expectedResponseLength) { - socket.removeAllListeners('data'); + let continueWriting = (err) => { + if (err || totalWriteLen >= totalBytesToWrite) { + return callback(err); + } + + const lobWritePacket = new LOBWritePacket({ + casInfo: this._CASInfo, + data: data.slice(offset, offset + writeLen), + lobObject, + offset, + }); + const packetWriter = new PacketWriter(lobWritePacket.getBufferLength()); + const socket = this._socket; + + let buffArr = []; + let totalBuffLength = 0; + let expectedResponseLength = this._INVALID_RESPONSE_LENGTH; + + lobWritePacket.write(packetWriter); + + socket.on('data', (data) => { + totalBuffLength += data.length; + buffArr.push(data); + + if (expectedResponseLength === this._INVALID_RESPONSE_LENGTH && + totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { + const l = buffArr.length; + let buff; + + if (l > 1) { + buff = Buffer.concat(buffArr, totalBuffLength); + // For later, use this already concatenated buffer. + // First empty the array: http://stackoverflow.com/a/1234337/556678. + buffArr.length = 0; + // Then push this buffer in. + buffArr.push(buff); + } else { + buff = buffArr[0]; + } - var packetReader = new PacketReader(); - packetReader.write(Buffer.concat(buffArr, totalBuffLength)); + expectedResponseLength = Helpers._getExpectedResponseLength(buff); + } - lobWritePacket.parse(packetReader); - realWriteLen = lobWritePacket.wroteLength; - position = position + realWriteLen; - len -= realWriteLen; - offset += realWriteLen; - totalWriteLen += realWriteLen; + if (totalBuffLength === expectedResponseLength) { + socket.removeAllListeners('data'); - var errorCode = lobWritePacket.errorCode, - errorMsg = lobWritePacket.errorMsg; + const packetReader = new PacketReader(); + packetReader.write(Buffer.concat(buffArr, totalBuffLength)); - if (errorCode !== 0) { - err = new Error(errorCode + ':' + errorMsg); - } + const error = lobWritePacket.parse(packetReader); - cb(err); + if (!error) { + const realWriteLen = lobWritePacket.bytesWritten; + offset += realWriteLen; + totalWriteLen += realWriteLen; } - }); - socket.write(packetWriter._buffer); - }, - function (err) { - if (totalWriteLen > lobObject.lobLength) { - lobObject.lobLength = totalWriteLen; + continueWriting(error); } + }); - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_WRITE_COMPLETED, lobObject, totalWriteLen); + socket.write(packetWriter._buffer); + }; - if (typeof(callback) === 'function') { - callback(err, lobObject, totalWriteLen); - } - }); -}; + continueWriting(); + }); +} /** * Read a LOB object from the database * @param lobObject - * @param position + * @param offset * @param length * @param callback */ -CUBRIDConnection.prototype.lobRead = function (lobObject, position, length, callback) { - var self = this, - query = new Query(null, callback); - - this._queue.push(function (done) { - self._lobRead(lobObject, position, length, function (err, buffer, totalReadLen) { - query.callback(err, buffer, totalReadLen); - done(); +CUBRIDConnection.prototype.lobRead = function (lobObject, offset, length, callback) { + return new Promise((resolve, reject) => { + this._queue.push(done => { + const query = new Query(callback); + + this.logger.debug('lobNew'); + + this.connect() + .then(() => { + return _lobRead.call(this, lobObject, offset, length); + }) + .then(response => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(undefined, response.data, response.length); + } + + resolve(response); + }) + .catch(err => { + done(); + + if (typeof query.callback === 'function') { + return query.callback(err); + } + + return reject(err); + }); }); }); }; -CUBRIDConnection.prototype._lobRead = function (lobObject, position, length, callback) { - var self = this, - err = self._NO_ERROR, - buffer; +function _lobRead(lobObject, offset, length) { + this.logger.debug('_lobRead', lobObject, offset, length); - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { - buffer = ''; - } else { - buffer = new Buffer(0); - } + return new Promise((resolve, reject) => { + if (lobObject.lobLength < offset + length) { + return reject(new Error(ErrorMessages.ERROR_INVALID_LOB_POSITION)); + } - --position; + let buffers = []; + let totalReadLen = 0; - if (lobObject.lobLength < position + length) { - err = new Error(ErrorMessages.ERROR_INVALID_LOB_POSITION); - Helpers.logError(ErrorMessages.ERROR_INVALID_LOB_POSITION); - return callback(err); - } + const callback = (err) => { + this._socketCurrentEventCallback = undefined; - var realReadLen, - readLen, - totalReadLen = 0; - - ActionQueue.while( - function () { - return length > 0; - }, - function (cb) { - var expectedResponseLength = self._INVALID_RESPONSE_LENGTH, - lobReadPacket = new LOBReadPacket({ - casInfo : self._CASInfo, - lobObject : lobObject, - position : position, - lengthToRead : length, - db_version : self._DB_ENGINE_VER - }), - packetWriter = new PacketWriter(lobReadPacket.getBufferLength()), - totalBuffLength = 0, - buffArr = [], - socket = self._socket; - - readLen = Math.min(length, self._LOB_MAX_IO_LENGTH); - - lobReadPacket.write(packetWriter); - - self._socketCurrentEventCallback = cb; - - socket.on('data', function (data) { - totalBuffLength += data.length; - buffArr.push(data); - - if (expectedResponseLength === self._INVALID_RESPONSE_LENGTH && - totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { - var l = buffArr.length, - buff; - - if (l > 1) { - buff = Buffer.concat(buffArr, totalBuffLength); - // For later, use this already concatenated buffer. - // First empty the array: http://stackoverflow.com/a/1234337/556678. - buffArr.length = 0; - // Then push this buffer in. - buffArr.push(buff); - } else { - buff = buffArr[0]; - } + if (err) { + return reject(err); + } + + buffers = Buffer.concat(buffers, totalReadLen); - expectedResponseLength = Helpers._getExpectedResponseLength(buff); + if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { + buffers = buffers.toString(); + } + + resolve({ + data: buffers, + length: totalReadLen, + }); + }; + + this._socketCurrentEventCallback = callback; + + let continueReading = (err) => { + if (err || length <= totalReadLen) { + return callback(err); + } + + const lobReadPacket = new LOBReadPacket({ + casInfo: this._CASInfo, + bytesToRead: length - totalReadLen, + lobObject, + offset, + }); + const packetWriter = new PacketWriter(lobReadPacket.getBufferLength()); + const socket = this._socket; + + let buffArr = []; + let expectedResponseLength = this._INVALID_RESPONSE_LENGTH; + let totalBuffLength = 0; + + lobReadPacket.write(packetWriter); + + socket.on('data', (data) => { + totalBuffLength += data.length; + buffArr.push(data); + + if (expectedResponseLength === this._INVALID_RESPONSE_LENGTH && + totalBuffLength >= DATA_TYPES.DATA_LENGTH_SIZEOF) { + const l = buffArr.length; + let buff; + + if (l > 1) { + buff = Buffer.concat(buffArr, totalBuffLength); + // For later, use this already concatenated buffer. + // First empty the array: http://stackoverflow.com/a/1234337/556678. + buffArr.length = 0; + // Then push this buffer in. + buffArr.push(buff); + } else { + buff = buffArr[0]; } - if (totalBuffLength === expectedResponseLength) { - socket.removeAllListeners('data'); + expectedResponseLength = Helpers._getExpectedResponseLength(buff); + } + + if (totalBuffLength === expectedResponseLength) { + socket.removeAllListeners('data'); - var packetReader = new PacketReader(); - packetReader.write(Buffer.concat(buffArr, totalBuffLength)); + const packetReader = new PacketReader(); - lobReadPacket.parse(packetReader); + packetReader.write(Buffer.concat(buffArr, totalBuffLength)); - realReadLen = lobReadPacket.readLength; - position += realReadLen; - length -= realReadLen; - totalReadLen += realReadLen; + const error = lobReadPacket.parse(packetReader); + if (!error) { + const realReadLen = lobReadPacket.readLength; + + // The actual data stored in CUBRID may be empty. if (realReadLen === 0) { length = 0; - } - - if (lobObject.lobType === CASConstants.CUBRIDDataType.CCI_U_TYPE_CLOB) { - buffer += lobReadPacket.lobBuffer; } else { - buffer = Helpers._combineData(buffer, lobReadPacket.lobBuffer); - } - - var errorCode = lobReadPacket.errorCode; - - if (errorCode !== 0) { - err = new Error(errorCode + ':' + lobReadPacket.errorMsg); + // The data received from the server can be partial. + // So if we haven't received enough data, we need + // to keep requesting. + offset += realReadLen; + totalReadLen += realReadLen; } - cb(err); + buffers.push(lobReadPacket.lobBuffer); } - }); - - socket.write(packetWriter._buffer); - }, - function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_LOB_READ_COMPLETED, buffer, totalReadLen); - if (typeof(callback) === 'function') { - callback(err, buffer, totalReadLen); + setImmediate(continueReading.bind(this, error)); } }); -}; + + socket.write(packetWriter._buffer); + }; + + continueReading(); + }); +} /** * Set connection timeout value in milliseconds. @@ -1877,7 +2057,7 @@ CUBRIDConnection.prototype._lobRead = function (lobObject, position, length, cal * @param timeout (msec) */ CUBRIDConnection.prototype.setConnectionTimeout = function (timeout) { - this._CONNECTION_TIMEOUT = timeout >= 0 ? timeout : 0; + this.connectionTimeout = timeout > 0 ? timeout : 0; }; /** @@ -1885,7 +2065,7 @@ CUBRIDConnection.prototype.setConnectionTimeout = function (timeout) { * @return {Number} (.msec) */ CUBRIDConnection.prototype.getConnectionTimeout = function () { - return this._CONNECTION_TIMEOUT; + return this.connectionTimeout; }; /** @@ -1895,61 +2075,76 @@ CUBRIDConnection.prototype.getConnectionTimeout = function () { * @param callback */ CUBRIDConnection.prototype.setDatabaseParameter = function (parameter, value, callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.push((done) => { + this + .connect() + .then(() => { + return _setDatabaseParameter.call(this, parameter, value); + }) + .then(() => { + done(); + + if (typeof callback === 'function') { + return callback(); + } + + resolve(); + }) + .catch(err => { + done(); + + if (typeof callback === 'function') { + return callback(err); + } - this._queue.push(function (done) { - self._setDatabaseParameter(parameter, value, function (err) { - query.callback(err); - done(); + reject(err); + }); }); }); }; -CUBRIDConnection.prototype._setDatabaseParameter = function (parameter, value, callback) { - var self = this, - err = this._NO_ERROR; - - if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { - var errorCode = -1011, - errorMsg = Helpers._resolveErrorCode(errorCode); - - err = new Error(errorCode + ':' + errorMsg); +function _setDatabaseParameter(parameter, value) { + return new Promise((resolve, reject) => { + if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { + // The `CCI_PARAM_MAX_STRING_LENGTH` parameter **cannot** be set + // programmatically from code as it is a CUBRID Broker parameter + // and the client can only query its current value. + let error = new Error(); + error.code = -1011; + error.message = ErrorMessages.resolveErrorCode(error.code); - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - - if (typeof(callback) === 'function') { - callback(err); + return reject(error); } - return; - } + const setDbParameterPacket = new SetDbParameterPacket({ + casInfo: this._CASInfo, + parameter, + value + }); + const packetWriter = new PacketWriter(setDbParameterPacket.getBufferLength()); + const socket = this._socket; - var setDbParameterPacket = new SetDbParameterPacket({ - casInfo : this._CASInfo, - parameter : parameter, - value : value - }), - packetWriter = new PacketWriter(setDbParameterPacket.getBufferLength()), - socket = this._socket; + setDbParameterPacket.write(packetWriter); - setDbParameterPacket.write(packetWriter); + let callback = (err) => { + if (err) { + return reject(err); + } - this._socketCurrentEventCallback = callback; + resolve(); + }; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseSetDatabaseParameterBuffer, - dataPacket: setDbParameterPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_SET_DB_PARAMETER_COMPLETED, null); + this._socketCurrentEventCallback = callback; - if (typeof(callback) === 'function') { - callback(err); - } - })); + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseResponseCodeBuffer.bind(this), + dataPacket: setDbParameterPacket + }, callback)); - socket.write(packetWriter._buffer); -}; + socket.write(packetWriter._buffer); + }); +} /** * Get a database parameter @@ -1957,60 +2152,72 @@ CUBRIDConnection.prototype._setDatabaseParameter = function (parameter, value, c * @param callback */ CUBRIDConnection.prototype.getDatabaseParameter = function (parameter, callback) { - var self = this, - query = new Query(null, callback); + return new Promise((resolve, reject) => { + this._queue.push((done) => { + this + .connect() + .then(() => { + return _getDatabaseParameter.call(this, parameter); + }) + .then(value => { + done(); + + if (typeof callback === 'function') { + return callback(undefined, value); + } + + resolve(value); + }) + .catch(err => { + done(); - this._queue.push(function (done) { - self._getDatabaseParameter(parameter, function (err, value) { - query.callback(err, value); - done(); + if (typeof callback === 'function') { + return callback(err); + } + + reject(err); + }); }); }); }; -CUBRIDConnection.prototype._getDatabaseParameter = function (parameter, callback) { - var self = this, - err = this._NO_ERROR; - - if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { - var errorCode = -1011, - errorMsg = Helpers._resolveErrorCode(errorCode); +function _getDatabaseParameter(parameter) { + return new Promise((resolve, reject) => { + if (parameter === CASConstants.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH) { + let error = new Error(); + error.code = -1011; + error.message = ErrorMessages.resolveErrorCode(error.code); - err = new Error(errorCode + ':' + errorMsg); - - Helpers._emitEvent(this, err, this.EVENT_ERROR, null); - - if (typeof(callback) === 'function') { - callback(err); + return reject(error); } - return; - } + const getDbParameterPacket = new GetDbParameterPacket({ + casInfo: this._CASInfo, + parameter, + }); + const packetWriter = new PacketWriter(getDbParameterPacket.getBufferLength()); + const socket = this._socket; - var getDbParameterPacket = new GetDbParameterPacket({ - casInfo : this._CASInfo, - parameter : parameter - }), - packetWriter = new PacketWriter(getDbParameterPacket.getBufferLength()), - socket = this._socket; + getDbParameterPacket.write(packetWriter); - getDbParameterPacket.write(packetWriter); + let callback = (err) => { + if (err) { + return reject(err); + } - this._socketCurrentEventCallback = callback; + resolve(getDbParameterPacket.value); + }; - socket.on('data', this._receiveBytes({ - parserFunction: this._parseGetDatabaseParameterBuffer, - dataPacket: getDbParameterPacket - }, function (err) { - Helpers._emitEvent(self, err, self.EVENT_ERROR, self.EVENT_GET_DB_PARAMETER_COMPLETED, getDbParameterPacket.value); + this._socketCurrentEventCallback = callback; - if (typeof(callback) === 'function') { - callback(err, getDbParameterPacket.value); - } - })); + socket.on('data', _receiveBytes.call(this, { + parserFunction: _parseResponseCodeBuffer.bind(this), + dataPacket: getDbParameterPacket + }, callback)); - socket.write(packetWriter._buffer); -}; + socket.write(packetWriter._buffer); + }); +} /** * Set the protocol to be used for queries execution. @@ -2019,50 +2226,30 @@ CUBRIDConnection.prototype._getDatabaseParameter = function (parameter, callback * @param enforceOldProtocol */ CUBRIDConnection.prototype.setEnforceOldQueryProtocol = function (enforceOldProtocol) { - if (this._ENFORCE_OLD_QUERY_PROTOCOL !== enforceOldProtocol) { - this._ENFORCE_OLD_QUERY_PROTOCOL = enforceOldProtocol; - } + this.logger.info('setEnforceOldQueryProtocol', enforceOldProtocol); + + this._ENFORCE_OLD_QUERY_PROTOCOL = enforceOldProtocol; }; /** * Returns the protocol used for queries execution. * If true, the driver uses the (old) 8.4.x protocol. * If false, the driver uses the newer 9.x protocol. - * @private - */ -CUBRIDConnection.prototype.getEnforceOldQueryProtocol = function () { - return this._ENFORCE_OLD_QUERY_PROTOCOL; -}; - -/** - * Add a query to the queries queue - * @param sql SQL query to execute - * @param callback - */ -CUBRIDConnection.prototype.addQuery = function (sql, callback) { - this.query(sql, callback); -}; - -/** - * Add a non-query (direct SQL execute statement) to the queries queue - * @param sql SQL command to execute - * @param callback */ -CUBRIDConnection.prototype.addNonQuery = function (sql, callback) { - this.execute(sql, callback); +CUBRIDConnection.prototype.shouldUseOldQueryProtocol = function () { + return !!this._ENFORCE_OLD_QUERY_PROTOCOL; }; /** * Return true if there are pending queries in the queries queue * @return {Boolean} */ -CUBRIDConnection.prototype.queriesQueueIsEmpty = isQueueEmpty; -CUBRIDConnection.prototype.isQueueEmpty = isQueueEmpty; - -function isQueueEmpty() { +CUBRIDConnection.prototype.isQueueEmpty = function () { return this._queue.isEmpty(); -} +}; CUBRIDConnection.prototype.getQueueDepth = function () { return this._queue.getDepth(); }; + +module.exports = CUBRIDConnection; diff --git a/src/ConsoleLogger.js b/src/ConsoleLogger.js new file mode 100644 index 0000000..2856601 --- /dev/null +++ b/src/ConsoleLogger.js @@ -0,0 +1,31 @@ +/* eslint-env node */ + +function ConsoleLogger() { + +} + +ConsoleLogger.prototype.error = function () { + /* eslint-disable no-console */ + console.error.apply(console, arguments); + /* eslint-enable no-console */ +}; + +ConsoleLogger.prototype.info = function () { + /* eslint-disable no-console */ + console.error.apply(console, arguments); + /* eslint-enable no-console */ +}; + +ConsoleLogger.prototype.warn = function () { + /* eslint-disable no-console */ + console.warn.apply(console, arguments); + /* eslint-enable no-console */ +}; + +ConsoleLogger.prototype.debug = function () { + /* eslint-disable no-console */ + console.log.apply(console, arguments); + /* eslint-enable no-console */ +}; + +module.exports = ConsoleLogger; diff --git a/src/NoopLogger.js b/src/NoopLogger.js new file mode 100644 index 0000000..096b2e7 --- /dev/null +++ b/src/NoopLogger.js @@ -0,0 +1,12 @@ +function NoopLogger() { + +} + +function noop() {} + +NoopLogger.prototype.error = noop; +NoopLogger.prototype.info = noop; +NoopLogger.prototype.warn = noop; +NoopLogger.prototype.debug = noop; + +module.exports = NoopLogger; diff --git a/src/config.js b/src/config.js deleted file mode 100644 index d1f5eb2..0000000 --- a/src/config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Debug enabled in application? - * @type {Boolean} - * @private - */ -exports.DEBUG_ENABLED = false; diff --git a/src/constants/CASConstants.js b/src/constants/CASConstants.js index c74ca69..be309f3 100644 --- a/src/constants/CASConstants.js +++ b/src/constants/CASConstants.js @@ -1,3 +1,4 @@ +'use strict'; /** * Define CUBRID Function codes constants */ @@ -455,3 +456,42 @@ exports.CCILOBType = { CCI_LOB_TYPE_BLOB : 33, CCI_LOB_TYPE_CLOB : 34 }; + + +/* CAS Protocol constants */ +/** + * Define the supported protocol version + * The protocol version is validated by the CUBRID broker, + * to assess the compatibility level with the CUBRID engine. + */ +const CAS_PROTO_INDICATOR = 0x40; + +exports.CAS_PROTOCOL_VERSION = (function getProtocolVersion() { + // const CAS_PROTOCOL_VERSION_1 = /* since 8.4.1 */1; + // const CAS_PROTOCOL_VERSION_2 = /* since 9.0.0 */2; + // const CAS_PROTOCOL_VERSION_3 = /* since 8.4.3 */3; + // const CAS_PROTOCOL_VERSION_4 = /* since 9.1.0 */4; + // const CAS_PROTOCOL_VERSION_5 = /* since 9.2.0 */5; + const CAS_PROTOCOL_VERSION_6 = /* since 9.2.26 */6; + + return CAS_PROTOCOL_VERSION_6; +})(); + +exports.CAS_VERSION = CAS_PROTO_INDICATOR | exports.CAS_PROTOCOL_VERSION; + +// JDBC client type +exports.CAS_CLIENT_JDBC = 3; +// This value is defined in `broker/cas_protocol.h`. +exports.CAS_MAGIC_STRING = 'CUBRK'; + +exports.getProtocolVersion = function (version) { + // At this moment `node-cubrid` supports at most protocol version 6. + for (let protocolVersion = 0; protocolVersion < 7; ++protocolVersion) { + if ((CAS_PROTO_INDICATOR | protocolVersion) === version) { + return protocolVersion; + } + } + + // By default fall back to the latest version we support. + return exports.CAS_PROTOCOL_VERSION; +}; diff --git a/src/constants/DriverVersion.js b/src/constants/DriverVersion.js deleted file mode 100644 index e624a27..0000000 --- a/src/constants/DriverVersion.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Define the supported protocol version - * The protocol version is validated by the CUBRID broker, - * to assess the compatibility level with the CUBRID engine. - */ -const CAS_PROTO_INDICATOR = 0x40; -const CAS_PROTOCOL_VERSION = 0x01; - -exports.CAS_VER = CAS_PROTO_INDICATOR | CAS_PROTOCOL_VERSION; diff --git a/src/constants/ErrorMessages.js b/src/constants/ErrorMessages.js index 9c8f512..100ecd8 100644 --- a/src/constants/ErrorMessages.js +++ b/src/constants/ErrorMessages.js @@ -2,54 +2,61 @@ * Define CUBRID internal error messages and custom driver error messages */ -exports.ERROR_NEW_BROKER_PORT = 'Error receiving a new connection port!'; -exports.ERROR_CONNECTION_ALREADY_OPENED = 'The connection is already opened! - denying a second connection request.'; -exports.ERROR_CONNECTION_ALREADY_PENDING = 'A connection is already in progress! - denying current connection request.'; -exports.ERROR_CONNECTION_ALREADY_CLOSED = 'The connection is already closed!'; -exports.ERROR_NO_ACTIVE_QUERY = 'No active query with this handle!'; -exports.ERROR_NO_ROLLBACK = 'AutoCommitMode is enabled! - denying rollback request.'; -exports.ERROR_NO_COMMIT = 'AutoCommitMode is enabled! - denying commit request.'; +exports.ERROR_NEW_BROKER_PORT = 'Error receiving a new connection port.'; +exports.ERROR_CONNECTION_ALREADY_OPENED = 'The connection is already opened: denying a second connection request.'; +exports.ERROR_CONNECTION_ALREADY_PENDING = 'A connection is already in progress: denying current connection request.'; +exports.ERROR_CONNECTION_ALREADY_CLOSED = 'The connection is already closed.'; +exports.ERROR_MULTIPLE_QUERIES = 'Multiple queries are not supported when using the old prepare-execute protocol.'; +exports.ERROR_NO_ACTIVE_QUERY = 'No active query with this handle.'; +exports.ERROR_NO_ROLLBACK = 'AutoCommitMode is enabled: denying rollback request.'; +exports.ERROR_AUTO_COMMIT_ENABLED_COMMIT = 'AutoCommitMode is enabled: denying commit request.'; exports.ERROR_ON_CLOSE_QUERY_HANDLE = 'Error closing request: '; exports.ERROR_INPUT_VALIDATION = 'Error validating input parameters.'; -exports.ERROR_INVALID_DATA_TYPE = 'Error:Invalid data type.'; -exports.ERROR_INVALID_SCHEMA_TYPE = 'Error:Invalid schema type.'; -exports.ERROR_INVALID_LOB_POSITION = 'Error: Invalid LOB position'; -exports.ERROR_INVALID_LOB_TYPE = 'Error: Invalid LOB type'; +exports.ERROR_INVALID_DATA_TYPE = 'Invalid data type.'; +exports.ERROR_INVALID_SCHEMA_TYPE = 'Invalid schema type.'; +exports.ERROR_INVALID_LOB_POSITION = 'Invalid LOB position.'; +exports.ERROR_INVALID_LOB_TYPE = 'Invalid LOB type.'; +exports.ERROR_INVALID_LOB_DATA = 'Invalid LOB data: must be a string or Buffer.'; // Set the same timeout error message as emitted by Node.js socket client. exports.ERROR_CONNECTION_TIMEOUT = 'connect ETIMEDOUT'; -exports.ERROR_CONNECTION_CLOSED = 'Connection not opened!'; -exports.ERROR_QUERIES_IN_PROGRESS = 'Can\'t close the connection - there are queries in execution!'; -exports.ERROR_QUERY_NOT_FOUND = 'Query not found in queue!'; +exports.ERROR_CLOSED_CONNECTION_COMMIT = 'Cannot commit on a closed/offline connection.'; +exports.ERROR_QUERIES_IN_PROGRESS = "Cannot close the connection: there are queries in execution."; -exports.CASErrorMsgId = [ - ['CAS_ER_DBMS' , -1000], - ['CAS_ER_INTERNAL' , -1001], - ['CAS_ER_NO_MORE_MEMORY' , -1002], - ['CAS_ER_COMMUNICATION' , -1003], - ['CAS_ER_ARGS' , -1004], - ['CAS_ER_TRAN_TYPE' , -1005], - ['CAS_ER_SRV_HANDLE' , -1006], - ['CAS_ER_NUM_BIND' , -1007], - ['CAS_ER_UNKNOWN_U_TYPE' , -1008], - ['CAS_ER_DB_VALUE' , -1009], - ['CAS_ER_TYPE_CONVERSION' , -1010], - ['CAS_ER_PARAM_NAME' , -1011], - ['CAS_ER_NO_MORE_DATA' , -1012], - ['CAS_ER_OBJECT' , -1013], - ['CAS_ER_OPEN_FILE' , -1014], - ['CAS_ER_SCHEMA_TYPE' , -1015], - ['CAS_ER_VERSION' , -1016], - ['CAS_ER_FREE_SERVER' , -1017], - ['CAS_ER_NOT_AUTHORIZED_CLIENT' , -1018], - ['CAS_ER_QUERY_CANCEL' , -1019], - ['CAS_ER_NOT_COLLECTION' , -1020], - ['CAS_ER_COLLECTION_DOMAIN' , -1021], - ['CAS_ER_NO_MORE_RESULT_SET' , -1022], - ['CAS_ER_INVALID_CALL_STMT' , -1023], - ['CAS_ER_STMT_POOLING' , -1024], - ['CAS_ER_DBSERVER_DISCONNECTED' , -1025], - ['CAS_ER_MAX_PREPARED_STMT_COUNT_EXCEEDED' , -1026], - ['CAS_ER_HOLDABLE_NOT_ALLOWED' , -1027], - ['CAS_ER_NOT_IMPLEMENTED' , -1100], - ['CAS_ER_IS' , -1200] -]; +exports.CASErrorMsgId = { + '-1000': 'CAS_ER_DBMS', + '-1001': 'CAS_ER_INTERNAL', + '-1002': 'CAS_ER_NO_MORE_MEMORY', + '-1003': 'CAS_ER_COMMUNICATION', + '-1004': 'CAS_ER_ARGS', + '-1005': 'CAS_ER_TRAN_TYPE', + '-1006': 'CAS_ER_SRV_HANDLE', + /* CUBRID 9.0.0 returns a different error code for the same error. */ + '-10007': 'CAS_ER_NUM_BIND', + '-1007': 'CAS_ER_NUM_BIND', + '-1008': 'CAS_ER_UNKNOWN_U_TYPE', + '-1009': 'CAS_ER_DB_VALUE', + '-1010': 'CAS_ER_TYPE_CONVERSION', + '-1011': 'CAS_ER_PARAM_NAME', + '-1012': 'CAS_ER_NO_MORE_DATA', + '-1013': 'CAS_ER_OBJECT', + '-1014': 'CAS_ER_OPEN_FILE', + '-1015': 'CAS_ER_SCHEMA_TYPE', + '-1016': 'CAS_ER_VERSION', + '-1017': 'CAS_ER_FREE_SERVER', + '-1018': 'CAS_ER_NOT_AUTHORIZED_CLIENT', + '-1019': 'CAS_ER_QUERY_CANCEL', + '-1020': 'CAS_ER_NOT_COLLECTION', + '-1021': 'CAS_ER_COLLECTION_DOMAIN', + '-1022': 'CAS_ER_NO_MORE_RESULT_SET', + '-1023': 'CAS_ER_INVALID_CALL_STMT', + '-1024': 'CAS_ER_STMT_POOLING', + '-1025': 'CAS_ER_DBSERVER_DISCONNECTED', + '-1026': 'CAS_ER_MAX_PREPARED_STMT_COUNT_EXCEEDED', + '-1027': 'CAS_ER_HOLDABLE_NOT_ALLOWED', + '-1100': 'CAS_ER_NOT_IMPLEMENTED', + '-1200': 'CAS_ER_IS', +}; + +exports.resolveErrorCode = function (errorCode) { + return exports.CASErrorMsgId['' + errorCode]; +}; diff --git a/src/cubrid.js b/src/cubrid.js deleted file mode 100644 index 49e971a..0000000 --- a/src/cubrid.js +++ /dev/null @@ -1,44 +0,0 @@ -var _CUBRIDConnection = require('./CUBRIDConnection.js'); -var _Helpers = require('./utils/Helpers.js'); -var _Result2Array = require('./resultset/Result2Array.js'); -var _ActionQueue = require('./utils/ActionQueue.js'); - -/** - * Helper functions - * @type {*} - */ -exports.Helpers = _Helpers; -/** - * Resultset utility functions - * @type {*} - */ -exports.Result2Array = _Result2Array; -/** - * ActionQueue utility functions - * @type {*} - */ -exports.ActionQueue = _ActionQueue; -/** - * Creates a new connection to the demodb database, using the default parameters - * @type {CUBRIDConnection} - */ -exports.createDefaultCUBRIDDemodbConnection = function () { - return new _CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); -}; - -/** - * Creates a new CUBRID connection. This function creates a new instance of - * CUBRIDConnection, however doesn't establish actual connection with the - * broker. - * - * @alias createClient, createConnection - * @param brokerServer - * @param brokerPort - * @param user - * @param password - * @param database - * @return {CUBRIDConnection} - */ -exports.createConnection = exports.createCUBRIDConnection = function (brokerServer, brokerPort, user, password, database) { - return new _CUBRIDConnection(brokerServer, brokerPort, user, password, database); -}; diff --git a/src/packets/BatchExecuteNoQueryPacket.js b/src/packets/BatchExecuteNoQueryPacket.js index 525016e..3eeee76 100644 --- a/src/packets/BatchExecuteNoQueryPacket.js +++ b/src/packets/BatchExecuteNoQueryPacket.js @@ -1,27 +1,16 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - CAS = require('../constants/CASConstants'); +'use strict'; -module.exports = BatchExecuteNoQueryPacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor * @constructor */ function BatchExecuteNoQueryPacket(options) { - options = options || {}; - - this.SQLs = options.SQLs; - this.casInfo = options.casInfo; - this.autoCommit = options.autoCommitMode; - this.dbVersion = options.dbVersion; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; + this.options = options; - this.arrResultsCode = []; - this.arrResultsMsg = []; + typeof options.timeout === 'undefined' && (options.timeout = 0); } /** @@ -29,15 +18,23 @@ function BatchExecuteNoQueryPacket(options) { * @param writer */ BatchExecuteNoQueryPacket.prototype.write = function (writer) { + const options = this.options; + const logger = options.logger; + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_EXECUTE_BATCH); - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(this.autoCommit ? 1 : 0); // Auto-commit mode value + writer.addByte(options.autoCommit ? 1 : 0); + + logger.debug(`BatchExecuteNoQueryPacket.parse: autoCommit = ${options.autoCommit}.`); - // For every sql statement in the batch - for (var j = 0; j < this.SQLs.length; j++) { - writer._writeNullTerminatedString(this.SQLs[j]); // SQL strings to be executed + if (options.protocolVersion > 3) { + writer.addInt(options.timeout); + } + + // Write every sql statement in the batch. + for (let i = 0, sqls = options.sqls, len = sqls.length; i < len; ++i) { + writer._writeNullTerminatedString(sqls[i]); } return writer; @@ -48,69 +45,84 @@ BatchExecuteNoQueryPacket.prototype.write = function (writer) { * @param parser */ BatchExecuteNoQueryPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(), - errCode = 0; + const options = this.options; + const logger = options.logger; + const responseLength = parser._parseInt(); + + logger.debug(`BatchExecuteNoQueryPacket.parse: responseLength = ${responseLength}.`); this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.executedCount = parser._parseInt(); + // CUBRID Broker/CAS error has occurred, not an SQL error. + // In such a case, CAS returns only the error code. + // We have a mapping to the actual error message here. - for (var i = 0; i < this.executedCount; i++) { - parser._parseByte(); //not used + return parser.readError(responseLength); + } - var result = parser._parseInt(); + this.executedCount = parser._parseInt(); + this.errors = []; + this.results = []; - if (result < 0) { - if (this.dbVersion.startsWith('8.4.3')) { - errCode = parser._parseInt(); - this.arrResultsCode.push(errCode); - } else { - this.arrResultsCode.push(result); - } + for (let i = 0; i < this.executedCount; ++i) { + // Statement Type: one of `CUBRIDStatementType`. Not used. + parser._parseByte(); + let result = parser._parseInt(); - var errMsgLength = parser._parseInt(), - errMsg = parser._parseNullTerminatedString(errMsgLength); + if (result < 0) { + // An SQL error has occurred. CAS sends the actual + // error message. + let error = new Error(); - this.arrResultsMsg.push(errMsg); + if (options.protocolVersion > 2) { + error.code = parser._parseInt(); } else { - this.arrResultsCode.push(result); - this.arrResultsMsg.push(''); - - parser._parseInt(); // Not used - parser._parseShort(); // Not used - parser._parseShort(); // Not used + error.code = result; } + + error.message = parser._parseNullTerminatedString(/* error message length */ parser._parseInt()); + + this.errors.push(error); + } else { + // The number of changes. + this.results.push(result); + + parser._parseInt(); // Not used + parser._parseShort(); // Not used + parser._parseShort(); // Not used } } - return this; + if (options.protocolVersion > 4) { + this.lastShardId = parser._parseInt(); + } }; BatchExecuteNoQueryPacket.prototype.getBufferLength = function () { - var bufferLength = + const options = this.options; + const sqls = options.sqls; + const len = sqls.length; + + let bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + + (options.protocolVersion > 3 ? DATA_TYPES.INT_SIZEOF * 2 : 0) + // The length of all queries. - DATA_TYPES.INT_SIZEOF * this.SQLs.length + + DATA_TYPES.INT_SIZEOF * len + // The number of NULL terminating characters: one for each query. - this.SQLs.length; + len; - for (var i = 0; i < this.SQLs.length; ++i) { - bufferLength += Buffer.byteLength(this.SQLs[i]); + for (let i = 0; i < len; ++i) { + bufferLength += Buffer.byteLength(sqls[i]); } return bufferLength; }; + +module.exports = BatchExecuteNoQueryPacket; diff --git a/src/packets/ClientInfoExchangePacket.js b/src/packets/ClientInfoExchangePacket.js index c571e97..048e094 100644 --- a/src/packets/ClientInfoExchangePacket.js +++ b/src/packets/ClientInfoExchangePacket.js @@ -1,7 +1,7 @@ -var DRIVER_VERSION = require('../constants/DriverVersion'), - DATA_TYPES = require('../constants/DataTypes'); +'use strict'; -module.exports = ClientInfoExchangePacket; +const CASConstants = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -16,12 +16,13 @@ function ClientInfoExchangePacket() { * @param writer */ ClientInfoExchangePacket.prototype.write = function (writer) { - writer._writeFixedLengthString('CUBRK', 0, 5); - writer._writeByte(3); // 3 = JDBC client type - writer._writeByte(DRIVER_VERSION.CAS_VER); // CAS client/driver version - writer._writeByte(0); - writer._writeByte(0); - writer._writeByte(0); + // Write the driver info which consists of 10 bytes. + writer._writeFixedLengthString(CASConstants.CAS_MAGIC_STRING, 0, CASConstants.CAS_MAGIC_STRING.length); + writer._writeByte(CASConstants.CAS_CLIENT_JDBC); + writer._writeByte(CASConstants.CAS_VERSION); + writer._writeByte(0); // Reserved by the protocol. + writer._writeByte(0); // Reserved by the protocol. + writer._writeByte(0); // Reserved by the protocol. return writer; }; @@ -31,17 +32,18 @@ ClientInfoExchangePacket.prototype.write = function (writer) { * @param parser */ ClientInfoExchangePacket.prototype.parse = function (parser) { - this.newConnectionPort = parser._parseInt(); // (TCP/IP) Port value - - return this; + // (TCP/IP) Port value + this.newConnectionPort = parser._parseInt(); }; ClientInfoExchangePacket.prototype.getBufferLength = function () { - var bufferLength = + const bufferLength = // The length of "CUBRK" string. - 5 + + CASConstants.CAS_MAGIC_STRING.length + // JDBC client type + CAS version + 0 + 0 + 0. All bytes. DATA_TYPES.BYTE_SIZEOF * 5; return bufferLength; }; + +module.exports = ClientInfoExchangePacket; diff --git a/src/packets/CloseDatabasePacket.js b/src/packets/CloseDatabasePacket.js index 75d39bd..cc24dcd 100644 --- a/src/packets/CloseDatabasePacket.js +++ b/src/packets/CloseDatabasePacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = CloseDatabasePacket; @@ -16,8 +14,6 @@ function CloseDatabasePacket(options) { this.casInfo = options.casInfo; this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -26,7 +22,7 @@ function CloseDatabasePacket(options) { */ CloseDatabasePacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_CON_CLOSE); return writer; @@ -37,24 +33,19 @@ CloseDatabasePacket.prototype.write = function (writer) { * @param parser */ CloseDatabasePacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } + return parser.readError(responseLength); } - - return this; }; CloseDatabasePacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF; + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF; - return bufferLength; + return bufferLength; }; diff --git a/src/packets/CloseQueryPacket.js b/src/packets/CloseQueryPacket.js index 381bd8f..bff9a7e 100644 --- a/src/packets/CloseQueryPacket.js +++ b/src/packets/CloseQueryPacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - ErrorMessages = require('../constants/ErrorMessages'), - Helpers = require('../utils/Helpers.js'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = CloseQueryPacket; @@ -11,15 +9,12 @@ module.exports = CloseQueryPacket; * @constructor */ function CloseQueryPacket(options) { - options = options || {}; + options = options || {}; - this.casInfo = options.casInfo; - this.reqHandle = options.reqHandle; - this.dbVersion = options.dbVersion; + this.casInfo = options.casInfo; + this.reqHandle = options.reqHandle; - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; + this.responseCode = 0; } /** @@ -27,17 +22,17 @@ function CloseQueryPacket(options) { * @param writer */ CloseQueryPacket.prototype.write = function (writer) { - var bufferLength = this.getBufferLength(); + var bufferLength = this.getBufferLength(); - writer._writeInt(bufferLength - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); - writer._writeByte(CAS.CASFunctionCode.CAS_FC_CLOSE_REQ_HANDLE); - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.reqHandle); // Query handle - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(0); // Autocommit mode + writer._writeInt(bufferLength - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + writer._writeBytes(this.casInfo); + writer._writeByte(CAS.CASFunctionCode.CAS_FC_CLOSE_REQ_HANDLE); + writer._writeInt(DATA_TYPES.INT_SIZEOF); + writer._writeInt(this.reqHandle); // Query handle + writer._writeInt(DATA_TYPES.BYTE_SIZEOF); + writer._writeByte(0); // Autocommit mode - return writer; + return writer; }; /** @@ -45,41 +40,34 @@ CloseQueryPacket.prototype.write = function (writer) { * @param parser */ CloseQueryPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); - this.responseCode = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } - - return this; + if (this.responseCode < 0) { + return parser.readError(responseLength); + } }; CloseQueryPacket.prototype.getBufferLength = function () { - var bufferLength = - // The size of the data to be sent (4-byte integer). - DATA_TYPES.DATA_LENGTH_SIZEOF + - // The size of the CAS_INFO data (also 4-byte integer). - DATA_TYPES.CAS_INFO_SIZE + - // The code of the CAS function to execute (1-byte integer value). - // "Close Query" function must be executed, i.e. the function code = `6`. - DATA_TYPES.BYTE_SIZEOF + - // The size of the next piece of data which is the ID - // of the request handler. - DATA_TYPES.INT_SIZEOF + - // The actual request handler ID as 4-byte integer. - DATA_TYPES.INT_SIZEOF + - // The size of the next piece of data. - DATA_TYPES.INT_SIZEOF + - // The value of the autocommit. - DATA_TYPES.BYTE_SIZEOF; + const bufferLength = + // The size of the data to be sent (4-byte integer). + DATA_TYPES.DATA_LENGTH_SIZEOF + + // The size of the CAS_INFO data (also 4-byte integer). + DATA_TYPES.CAS_INFO_SIZE + + // The code of the CAS function to execute (1-byte integer value). + // "Close Query" function must be executed, i.e. the function code = `6`. + DATA_TYPES.BYTE_SIZEOF + + // The size of the next piece of data which is the ID + // of the request handler. + DATA_TYPES.INT_SIZEOF + + // The actual request handler ID as 4-byte integer. + DATA_TYPES.INT_SIZEOF + + // The size of the next piece of data. + DATA_TYPES.INT_SIZEOF + + // The value of the autocommit. + DATA_TYPES.BYTE_SIZEOF; - return bufferLength; + return bufferLength; }; diff --git a/src/packets/CommitPacket.js b/src/packets/CommitPacket.js index 40d403e..fbf74ac 100644 --- a/src/packets/CommitPacket.js +++ b/src/packets/CommitPacket.js @@ -1,9 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); - -module.exports = CommitPacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -14,11 +10,8 @@ function CommitPacket(options) { options = options || {}; this.casInfo = options.casInfo; - this.dbVersion = options.dbVersion; - + this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -27,7 +20,7 @@ function CommitPacket(options) { */ CommitPacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_END_TRAN); writer._writeInt(DATA_TYPES.BYTE_SIZEOF); writer._writeByte(CAS.CCITransactionType.CCI_TRAN_COMMIT); // Commit transaction @@ -40,24 +33,21 @@ CommitPacket.prototype.write = function (writer) { * @param parser */ CommitPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } + return parser.readError(responseLength); } - - return this; }; CommitPacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF; return bufferLength; }; + +module.exports = CommitPacket; diff --git a/src/packets/ExecuteQueryPacket.js b/src/packets/ExecuteQueryPacket.js index 43149e9..6259b3f 100644 --- a/src/packets/ExecuteQueryPacket.js +++ b/src/packets/ExecuteQueryPacket.js @@ -1,9 +1,10 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - CAS = require('../constants/CASConstants'), - ErrorMessages = require('../constants/ErrorMessages'), - ColumnMetaData = require('../resultset/ColumnMetaData'), - ResultInfo = require('../resultset/ResultInfo'); +'use strict'; + +const CAS = require('../constants/CASConstants'); +const ColumnMetaData = require('../resultset/ColumnMetaData'); +const DATA_TYPES = require('../constants/DataTypes'); +const ErrorMessages = require('../constants/ErrorMessages'); +const ResultInfo = require('../resultset/ResultInfo'); module.exports = ExecuteQueryPacket; @@ -13,31 +14,7 @@ module.exports = ExecuteQueryPacket; * @constructor */ function ExecuteQueryPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.sql = options.sql; - this.autoCommit = options.autoCommitMode; - this.dbVersion = options.dbVersion; - - this.resultSet = ''; // Resultset of the query - this.resultCacheLifetime = 0; // Cache lifetime - this.statementType = null; // Statement type - this.bindCount = 0; // Bind count - this.isUpdatable = false; // Is updatable - this.totalTupleCount = 0; // Total nomber of tuples - this.cache_reusable = 0; // Cache reusable - this.resultCount = 0; // Number of results - this.columnCount = 0; // Number of columns - this.infoArray = new ColumnMetaData(); // Column meta data - this.resultInfos = new ResultInfo(); // Result info - this.queryHandle = 0; // Query handle - this.currentTupleCount = 0; // Current number of returned tuples - this.tupleCount = 0; // Number of tuples - - this.responseCode = 0; // Response code - this.errorCode = 0; // Error code - this.errorMsg = ''; // Error message + this.options = options; } /** @@ -45,58 +22,44 @@ function ExecuteQueryPacket(options) { * @param writer */ ExecuteQueryPacket.prototype.write = function (writer) { + const options = this.options; // Set the length of this request. Don't include the first eight bytes // (`DATA_LENGTH_SIZEOF` and `CAS_INFO_SIZE`) because they are not // part of the query data. writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); // `this.casInfo` is already a buffer. Just write them as bytes. - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); // Then tell which CAS function should CAS execute. // TODO: Shouldn't CAS function by an integer of four bytes? // Why write only one byte? - writer._writeByte(this.dbVersion.startsWith('9.0.0') ? CAS.CASFunctionCode900.CAS_FC_PREPARE_AND_EXECUTE : CAS.CASFunctionCode.CAS_FC_PREPARE_AND_EXECUTE); - - // The length of the next piece of data, i.e. CAS function. - // The length of any piece of data should be represented by an - // integer value. - writer._writeInt(DATA_TYPES.INT_SIZEOF); + writer._writeByte(options.protocolVersion === /* CUBRID v9.0.0 */2 ? CAS.CASFunctionCode900.CAS_FC_PREPARE_AND_EXECUTE : CAS.CASFunctionCode.CAS_FC_PREPARE_AND_EXECUTE); - // Next, write how many arguments (integer value, thus 4 bytes) - // should the CAS function accept. `CAS_FC_PREPARE_AND_EXECUTE` + // Next, write how many arguments should the CAS + // function accept. `CAS_FC_PREPARE_AND_EXECUTE` // accepts `3` arguments. - writer._writeInt(3); + writer.addInt(3); // Now goes the SQL query. - writer._writeNullTerminatedString(this.sql); + writer._writeNullTerminatedString(options.sql); - // The size of the next piece, also in 4-byte integer. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); // The type of prepare CAS has to execute. - writer._writeByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); + writer.addByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); - // The size of the next piece. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); // Autocommit mode. - writer._writeByte(this.autoCommit ? 1 : 0); + writer.addByte(options.autoCommit ? 1 : 0); // Execute info. - // The size of the next piece. - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); // Execute flag. - writer._writeByte(CAS.CCIExecutionOption.CCI_EXEC_QUERY_ALL); + writer.addByte(CAS.CCIExecutionOption.CCI_EXEC_QUERY_ALL); - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); // `max_col_size`: The maximum length of a column in bytes to be fetched // when it is a string data type. If this value is 0, full length is fetched. - writer._writeInt(0); + writer.addInt(0); - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); // Max row size. - writer._writeInt(0); + writer.addInt(0); // NULL. writer._writeInt(0); @@ -108,10 +71,8 @@ ExecuteQueryPacket.prototype.write = function (writer) { // Milliseconds. writer._writeInt(0); - // The size of the next piece. - writer._writeInt(DATA_TYPES.INT_SIZEOF); // Query timeout. - writer._writeInt(0); + writer.addInt(0); return writer; }; @@ -121,89 +82,130 @@ ExecuteQueryPacket.prototype.write = function (writer) { * @param parser */ ExecuteQueryPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const options = this.options; + const responseLength = parser._parseInt(); + const logger = options.logger; + + logger.debug(`ExecuteQueryPacket.parse: responseLength = ${responseLength}.`); this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); + return parser.readError(responseLength); + } - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.queryHandle = this.responseCode; - this.resultCacheLifetime = parser._parseInt(); // Cache lifetime - this.statementType = parser._parseByte(); // Statement type - this.bindCount = parser._parseInt(); // Bind count - this.isUpdatable = (parser._parseByte() === 0); // Is updatable? - this.columnCount = parser._parseInt(); // Query result columns count - this.infoArray = []; - - for (i = 0; i < this.columnCount; i++) { - var info = new ColumnMetaData(); - info.ColumnType = parser._parseByte(); // Column type - info.scale = parser._parseShort(); // Scale - info.precision = parser._parseInt(); // Precision - var len = parser._parseInt(); - info.Name = parser._parseNullTerminatedString(len); // Column name - len = parser._parseInt(); - info.RealName = parser._parseNullTerminatedString(len); // Column real name - len = parser._parseInt(); - info.TableName = parser._parseNullTerminatedString(len); // Table name - info.IsNullable = (parser._parseByte() === 1); // Is nullable? - len = parser._parseInt(); - info.DafaultValue = parser._parseNullTerminatedString(len); // Default value - info.IsAutoIncrement = (parser._parseByte() === 1); // Is auto increment? - info.IsUniqueKey = (parser._parseByte() === 1); // Is unuque key? - info.IsPrimaryKey = (parser._parseByte() === 1); // Is primary key? - info.IsReverseIndex = (parser._parseByte() === 1); // Reserve index? - info.IsReverseUnique = (parser._parseByte() === 1); // Reserve unique? - info.IsForeignKey = (parser._parseByte() === 1); // Is foreign key? - info.IsShared = (parser._parseByte() === 1); // Shared? - this.infoArray[i] = info; - } + this.queryHandle = this.responseCode; + this.resultCacheLifetime = parser._parseInt(); // Cache lifetime + this.statementType = parser._parseByte(); // Statement type + + logger.debug(`ExecuteQueryPacket.parse: statementType = ${this.statementType}`); + + this.bindCount = parser._parseInt(); // Bind count + this.isUpdatable = (parser._parseByte() === 0); // Is updatable? + this.columnCount = parser._parseInt(); // Query result columns count + this.infoArray = []; + + let i; + let info; + let len; + + for (i = 0; i < this.columnCount; i++) { + info = new ColumnMetaData(); + info.ColumnType = parser._parseByte(); // Column type + info.scale = parser._parseShort(); // Scale + info.precision = parser._parseInt(); // Precision + len = parser._parseInt(); + info.Name = parser._parseNullTerminatedString(len); // Column name + len = parser._parseInt(); + info.RealName = parser._parseNullTerminatedString(len); // Column real name + len = parser._parseInt(); + info.TableName = parser._parseNullTerminatedString(len); // Table name + info.IsNullable = (parser._parseByte() === 1); // Is nullable? + len = parser._parseInt(); + info.DafaultValue = parser._parseNullTerminatedString(len); // Default value + info.IsAutoIncrement = (parser._parseByte() === 1); // Is auto increment? + info.IsUniqueKey = (parser._parseByte() === 1); // Is unuque key? + info.IsPrimaryKey = (parser._parseByte() === 1); // Is primary key? + info.IsReverseIndex = (parser._parseByte() === 1); // Reserve index? + info.IsReverseUnique = (parser._parseByte() === 1); // Reserve unique? + info.IsForeignKey = (parser._parseByte() === 1); // Is foreign key? + info.IsShared = (parser._parseByte() === 1); // Shared? + this.infoArray[i] = info; + } + + logger.debug('ExecuteQueryPacket.parse: infoArray =', this.infoArray); + + // Tuples count. + this.totalTupleCount = parser._parseInt(); + // Is cache reusable. + parser._parseByte(); + // Results count. + this.resultCount = parser._parseInt(); + + logger.debug('ExecuteQueryPacket.parse: totalTupleCount =', this.totalTupleCount); + logger.debug('ExecuteQueryPacket.parse: resultCount =', this.resultCount); + + // Read result info. + let resultInfo; + + this.resultInfos = []; + + for (i = 0; i < this.resultCount; ++i) { + resultInfo = new ResultInfo(); + resultInfo.StmtType = parser._parseByte(); // Statement type + resultInfo.ResultCount = parser._parseInt(); // Result count + resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID + resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds + resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds + + logger.debug(`ExecuteQueryPacket.parse: resultInfo (${i}) =`, resultInfo); + + this.resultInfos.push(resultInfo); + } + + if (options.protocolVersion > 1) { + let includesColumnInfo = parser._parseByte(); + + logger.debug(`ExecuteQueryPacket.parse: include_column_info = ${includesColumnInfo}`); - this.totalTupleCount = parser._parseInt(); // Tuples count - this.cache_reusable = parser._parseByte(); // Cache reusable - this.resultCount = parser._parseInt(); // Result count - // Read result info - for (i = 0; i < this.resultCount; i++) { - var resultInfo = new ResultInfo(); - resultInfo.StmtType = parser._parseByte(); // Statement type - resultInfo.ResultCount = parser._parseInt(); // Result count - resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID - resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds - resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds - this.resultInfos[i] = resultInfo; + if (options.protocolVersion > 4) { + let shardID = parser._parseInt(); + + logger.debug(`ExecuteQueryPacket.parse: shardID = ${shardID}`); } } if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { - var fetchCode = parser._parseInt(); // Fetch code + const fetchCode = parser._parseInt(); // Fetch code this.tupleCount = parser._parseInt(); // Tuple count - var columnNames = new Array(this.columnCount); - var columnDataTypes = new Array(this.columnCount); + this.currentTupleCount = 0; + + logger.debug(`ExecuteQueryPacket.parse: fetchCode = ${fetchCode}; tupleCount = ${this.tupleCount}`); + + let columnNames = new Array(this.columnCount); + let columnDataTypes = new Array(this.columnCount); - for (var i = 0; i < this.columnCount; i++) { + for (let i = 0; i < this.columnCount; i++) { columnNames[i] = this.infoArray[i].Name; columnDataTypes[i] = CAS.getCUBRIDDataTypeName(this.infoArray[i].ColumnType); } - var columnValues = this._getData(parser, this.tupleCount); + logger.debug('ExecuteQueryPacket.parse: columnNames =', columnNames); + logger.debug('ExecuteQueryPacket.parse: columnDataTypes =', columnDataTypes); - this.resultSet = JSON.stringify({ - ColumnNames : columnNames, - ColumnDataTypes : columnDataTypes, - RowsCount : this.totalTupleCount, - ColumnValues : columnValues - }); - } + let columnValues = this.getValues(parser, this.tupleCount); + + logger.debug('ExecuteQueryPacket.parse: columnValues =', columnValues); - return this; + this.resultSet = { + ColumnDataTypes: columnDataTypes, + ColumnNames: columnNames, + ColumnValues: columnValues, + RowsCount: this.totalTupleCount, + }; + } }; /** @@ -211,41 +213,54 @@ ExecuteQueryPacket.prototype.parse = function (parser) { * @param parser * @param tupleCount */ -ExecuteQueryPacket.prototype._getData = function (parser, tupleCount) { - var columnValues = new Array(tupleCount); +ExecuteQueryPacket.prototype.getValues = function (parser, tupleCount) { + let columnValues = new Array(tupleCount); + + const columns = this.infoArray; + const columnCount = this.columnCount; + const statementType = this.statementType; + + const CUBRID_STMT_CALL = CAS.CUBRIDStatementType.CUBRID_STMT_CALL; + const CUBRID_STMT_EVALUATE = CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE; + const CUBRID_STMT_CALL_SP = CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP; // Loop through rows. - for (var i = 0; i < tupleCount; ++i) { - var index = parser._parseInt(); // Column index - var Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID + for (let i = 0; i < tupleCount; ++i) { + // Column index. We don't need it at this moment. + parser._parseInt(); - columnValues[i] = new Array(this.columnCount); + // OID. We don't need it now. + parser._parseBytes(DATA_TYPES.OID_SIZEOF); - for (var j = 0; j < this.columnCount; ++j) { - var size = parser._parseInt(); // Value size - var val; + let column = columnValues[i] = new Array(columnCount); - if (size <= 0) { - val = null; - } else { - var type = CAS.CUBRIDDataType.CCI_U_TYPE_NULL; + // Loop through columns in this row. + for (let j = 0; j < columnCount; ++j) { + // Value size. + let size = parser._parseInt(); + + if (size > 0) { + let type; - if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP || - this.infoArray[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { - type = parser._parseByte(); // Column data type + if (statementType === CUBRID_STMT_CALL || + statementType === CUBRID_STMT_EVALUATE || + statementType === CUBRID_STMT_CALL_SP || + columns[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { + // Column data type + type = parser._parseByte(); --size; } else { - type = this.infoArray[j].ColumnType; + type = columns[j].ColumnType; } - val = this._readValue(j, type, size, parser); // Read value - - columnValues[i][j] = val; + // Read the actual value depending on its type and size. + column[j] = _readValue.call(this, parser, type, size); + } else { + column[j] = null; } } } + this.currentTupleCount += tupleCount; return columnValues; @@ -253,12 +268,11 @@ ExecuteQueryPacket.prototype._getData = function (parser, tupleCount) { /** * Read column value from stream - * @param index + * @param parser * @param type * @param size - * @param parser */ -ExecuteQueryPacket.prototype._readValue = function (index, type, size, parser) { +function _readValue(parser, type, size) { switch (type) { case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: @@ -311,34 +325,37 @@ ExecuteQueryPacket.prototype._readValue = function (index, type, size, parser) { return parser._parseSequence(); case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: - return parser._parseBlob(size); + return parser.readBlob(size); case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: - return parser._parseClob(size); + return parser.readClob(size); case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: return parser._parseResultSet(); + case CAS.CUBRIDDataType.CCI_U_TYPE_NULL: + return null; + default: - return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); + return new Error(`${type}: ${ErrorMessages.ERROR_INVALID_DATA_TYPE}`); } -}; +} ExecuteQueryPacket.prototype.getBufferLength = function () { - var bufferLength = // Total length of the request without itself and CAS info. + let bufferLength = // Total length of the request without itself and CAS info. DATA_TYPES.DATA_LENGTH_SIZEOF + // CAS info. DATA_TYPES.CAS_INFO_SIZE + // CAS function. DATA_TYPES.BYTE_SIZEOF + - // TODO: what are these four bytes for? + // The length of the next part. DATA_TYPES.INT_SIZEOF + // CAS arguments. DATA_TYPES.INT_SIZEOF + - // TODO: These four bytes are absent below. Why? + // The length of the next part. DATA_TYPES.INT_SIZEOF + // A NULL terminated SQL query string. - Buffer.byteLength(this.sql) + 1 + + Buffer.byteLength(this.options.sql) + 1 + // The length of the next part. DATA_TYPES.INT_SIZEOF + // The type of CCI prepare. diff --git a/src/packets/FetchPacket.js b/src/packets/FetchPacket.js index 154df9d..4ddca71 100644 --- a/src/packets/FetchPacket.js +++ b/src/packets/FetchPacket.js @@ -1,9 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); - -module.exports = FetchPacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -11,15 +7,10 @@ module.exports = FetchPacket; * @constructor */ function FetchPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.dbVersion = options.dbVersion; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; - this.resultSet = ''; // ResultSet of the fetch + this.options = options; + + // Fetch size; 0 = default; recommended = 100 + typeof options.size === 'undefined' && (options.size = 100); } /** @@ -28,8 +19,10 @@ function FetchPacket(options) { * @param queryPacket */ FetchPacket.prototype.write = function (writer, queryPacket) { + const options = this.options; + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_FETCH); writer._writeInt(DATA_TYPES.INT_SIZEOF); @@ -37,7 +30,7 @@ FetchPacket.prototype.write = function (writer, queryPacket) { writer._writeInt(DATA_TYPES.INT_SIZEOF); writer._writeInt(queryPacket.currentTupleCount + 1); // Start position (= current cursor position + 1) writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(100); // Fetch size; 0 = default; recommended = 100 + writer._writeInt(options.size); writer._writeInt(DATA_TYPES.BYTE_SIZEOF); writer._writeByte(0); // Is case sensitive writer._writeInt(DATA_TYPES.INT_SIZEOF); @@ -52,29 +45,32 @@ FetchPacket.prototype.write = function (writer, queryPacket) { * @param queryPacket */ FetchPacket.prototype.parse = function (parser, queryPacket) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode !== 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.tupleCount = parser._parseInt(); - this.resultSet = JSON.stringify({ColumnValues : queryPacket._getData(parser, this.tupleCount)}); + return parser.readError(responseLength); } - return this; + this.tupleCount = parser._parseInt(); + + this.options.logger.debug(`fetch tupleCount = ${this.tupleCount}`); + + this.resultSet = { + ColumnValues: queryPacket.getValues(parser, this.tupleCount) + }; }; FetchPacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; - return bufferLength; + return bufferLength; }; + +module.exports = FetchPacket; diff --git a/src/packets/GetDbParameterPacket.js b/src/packets/GetDbParameterPacket.js index 74b7af2..f90df53 100644 --- a/src/packets/GetDbParameterPacket.js +++ b/src/packets/GetDbParameterPacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = GetDbParameterPacket; @@ -18,8 +16,6 @@ function GetDbParameterPacket(options) { this.casInfo = options.casInfo; this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -28,7 +24,7 @@ function GetDbParameterPacket(options) { */ GetDbParameterPacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_GET_DB_PARAMETER); writer._writeInt(DATA_TYPES.INT_SIZEOF); writer._writeInt(this.parameter); // Parameter type @@ -41,20 +37,16 @@ GetDbParameterPacket.prototype.write = function (writer) { * @param parser */ GetDbParameterPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.value = parser._parseInt(); + return parser.readError(responseLength); } - return this; + this.value = parser._parseInt(); }; GetDbParameterPacket.prototype.getBufferLength = function () { diff --git a/src/packets/GetEngineVersionPacket.js b/src/packets/GetEngineVersionPacket.js index a233811..6c0c341 100644 --- a/src/packets/GetEngineVersionPacket.js +++ b/src/packets/GetEngineVersionPacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = GetEngineVersionPacket; @@ -18,8 +16,6 @@ function GetEngineVersionPacket(options) { this.engineVersion = ''; this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -28,7 +24,7 @@ function GetEngineVersionPacket(options) { */ GetEngineVersionPacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_GET_DB_VERSION); writer._writeInt(DATA_TYPES.BYTE_SIZEOF); writer._writeByte(1); // Auto-commit mode @@ -41,20 +37,16 @@ GetEngineVersionPacket.prototype.write = function (writer) { * @param parser */ GetEngineVersionPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.engineVersion = parser._parseNullTerminatedString(responseLength - DATA_TYPES.INT_SIZEOF); // Engine version + return parser.readError(responseLength); } - return this; + this.engineVersion = parser._parseNullTerminatedString(responseLength - DATA_TYPES.INT_SIZEOF); }; GetEngineVersionPacket.prototype.getBufferLength = function () { diff --git a/src/packets/GetSchemaPacket.js b/src/packets/GetSchemaPacket.js index 315b02d..76ecba0 100644 --- a/src/packets/GetSchemaPacket.js +++ b/src/packets/GetSchemaPacket.js @@ -1,8 +1,8 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - ColumnMetaData = require('../resultset/ColumnMetaData'), - CAS = require('../constants/CASConstants'); +'use strict'; + +const CAS = require('../constants/CASConstants'); +const ColumnMetaData = require('../resultset/ColumnMetaData'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = GetSchemaPacket; @@ -12,18 +12,9 @@ module.exports = GetSchemaPacket; * @constructor */ function GetSchemaPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.schemaType = options.schemaType; - this.tableNamePattern = options.tableNamePattern; - this.dbVersion = options.dbVersion; - - this.responseCode = 0; - this.resultTuple = 0; - this.errorCode = 0; - this.errorMsg = ''; - this.schemaInfo = null; + this.options = options; + + typeof options.shardId === 'undefined' && (options.shardId = 0); } /** @@ -31,24 +22,32 @@ function GetSchemaPacket(options) { * @param writer */ GetSchemaPacket.prototype.writeRequestSchema = function (writer) { + const options = this.options; + writer._writeInt(this.getRequestSchemaBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_SCHEMA_INFO); - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.schemaType); // Schema type + writer.addInt(options.schemaType); - if (this.tableNamePattern) { - writer._writeNullTerminatedString(this.tableNamePattern); // Table name pattern + if (options.tableNamePattern) { + // arg1: Table name pattern + writer._writeNullTerminatedString(options.tableNamePattern); } else { - writer._writeInt(0); // Null; this is where restrictions should go - arg1: tableNamePattern + // Null; this is where restrictions should go - arg1: tableNamePattern + writer.addNull(); } - writer._writeInt(0); // Null; this is where restrictions should go - arg2: columnNamePattern + // arg2: + writer.addNull(); - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(CAS.CCISchemaPatternMatchFlag.CCI_CLASS_NAME_PATTERN_MATCH | - CAS.CCISchemaPatternMatchFlag.CCI_ATTR_NAME_PATTERN_MATCH); // Pattern match flag + // Pattern match flag. + writer.addByte(CAS.CCISchemaPatternMatchFlag.CCI_CLASS_NAME_PATTERN_MATCH | + CAS.CCISchemaPatternMatchFlag.CCI_ATTR_NAME_PATTERN_MATCH); + + if (options.protocolVersion > 4) { + writer.addInt(options.shardId); + } return writer; }; @@ -58,20 +57,17 @@ GetSchemaPacket.prototype.writeRequestSchema = function (writer) { * @param writer */ GetSchemaPacket.prototype.writeFetchSchema = function (writer) { + const options = this.options; + writer._writeInt(this.getFetchSchemaBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_FETCH); - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.responseCode); // ServerHandler - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(1); //Start position - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.resultTuple); // Fetch size; 0 = default; recommended = 100 - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(0); // Is case sensitive - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(0); // Is the ResultSet index...? + writer.addInt(this.responseCode); // ServerHandler + writer.addInt(1); //Start position + writer.addInt(this.resultTuple); + writer.addByte(0); // Is case sensitive + writer.addInt(0); // Is the ResultSet index...? return writer; }; @@ -81,32 +77,32 @@ GetSchemaPacket.prototype.writeFetchSchema = function (writer) { * @param parser */ GetSchemaPacket.prototype.parseRequestSchema = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.resultTuple = parser._parseInt(); // Result tuple - var numColInfo = parser._parseInt(); // Number of columns - this.infoArray = []; - for (var i = 0; i < numColInfo; i++) { - var info = new ColumnMetaData(); - info.ColumnType = parser._parseByte(); // Column data type - info.scale = parser._parseShort(); // Scale - info.precision = parser._parseInt(); // Precision - var len = parser._parseInt(); - info.Name = parser._parseNullTerminatedString(len); // Column name - this.infoArray[i] = info; - } + return parser.readError(responseLength); } - return this; + this.resultTuple = parser._parseInt(); // Result tuple + const numColInfo = parser._parseInt(); // Number of columns + + this.infoArray = []; + + for (let i = 0; i < numColInfo; ++i) { + let info = new ColumnMetaData(); + + info.ColumnType = parser._parseByte(); // Column data type + info.scale = parser._parseShort(); // Scale + info.precision = parser._parseInt(); // Precision + + const len = parser._parseInt(); + info.Name = parser._parseNullTerminatedString(len); // Column name + + this.infoArray.push(info); + } }; /** @@ -114,211 +110,297 @@ GetSchemaPacket.prototype.parseRequestSchema = function (parser) { * @param parser */ GetSchemaPacket.prototype.parseFetchSchema = function (parser) { - var length = 0; - var responseLength = parser._parseInt(); + const options = this.options; + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode !== 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.tupleCount = parser._parseInt(); // Tuple count - var SchemaInfo = new Array(this.tupleCount); - for (var i = 0; i < this.tupleCount; i++) { - var index = parser._parseInt(); // Column index - var Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID - switch (this.schemaType) { - case CAS.CUBRIDSchemaType.CCI_SCH_CLASS: - length = parser._parseInt(); - var sch_class_name = parser._parseNullTerminatedString(length); // Table name - length = parser._parseInt(); // Always = 2 - Indicates that Table type is a short value - var sch_class_name_type = parser._parseShort(); // Table type - SchemaInfo[i] = { Name : sch_class_name, Type : sch_class_name_type}; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_VCLASS: - length = parser._parseInt(); - var sch_vclass_name = parser._parseNullTerminatedString(length); // View name - length = parser._parseInt(); - var sch_vclass_type = parser._parseShort(); // View type - SchemaInfo[i] = { Name : sch_vclass_name, Type : sch_vclass_type}; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_ATTRIBUTE: - length = parser._parseInt(); - var sch_attribute_columnName = parser._parseNullTerminatedString(length); // Column name - length = parser._parseInt(); - var sch_attribute_domain = parser._parseShort(); // Domain - length = parser._parseInt(); - var sch_attribute_scale = parser._parseShort(); // Scale - length = parser._parseInt(); - var sch_attribute_precision = parser._parseInt(); // Precision - length = parser._parseInt(); - var sch_attribute_indexed = parser._parseShort(); // Idexed - length = parser._parseInt(); - var sch_attribute_non_null = (parser._parseShort() === 1); // Non null - length = parser._parseInt(); - var sch_attribute_shared = parser._parseShort(); // Shared - length = parser._parseInt(); - var sch_attribute_unique = (parser._parseShort() === 1); // Unique - length = parser._parseInt(); - // If lentgth > 0 the column has a default value - if (length > 0) { - parser._parseNullTerminatedString(length); // Default value - } - length = parser._parseInt(); - var sch_attribute_attr_order = parser._parseInt(); // Column order - length = parser._parseInt(); - var sch_attribute_class_name = parser._parseNullTerminatedString(length); // Class/Table name - length = parser._parseInt(); - var sch_attribute_source_class = parser._parseNullTerminatedString(length); // Source Class/Table name - length = parser._parseInt(); - var sch_attribute_is_key = (parser._parseShort() === 1); // Is key? - SchemaInfo[i] = { - Name : sch_attribute_columnName, - Scale : sch_attribute_scale, - Precision : sch_attribute_precision, - NonNull : sch_attribute_non_null, - Unique : sch_attribute_unique, - ClassName : sch_attribute_class_name, - SourceClass : sch_attribute_source_class, - IsKey : sch_attribute_is_key - }; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_CONSTRAIT: - length = parser._parseInt(); - var sch_constraint_type = parser._parseShort(); // Constraint type - length = parser._parseInt(); - var sch_constraint_constraintName = parser._parseNullTerminatedString(length); // Constraint name - length = parser._parseInt(); - var sch_constraint_attributeName = parser._parseNullTerminatedString(length); // Constraint column name - length = parser._parseInt(); - var sch_constraint_num_pages = parser._parseShort(); // Pages - length = parser._parseInt(); - var sch_constraint_num_keys = parser._parseShort(); // Keys - length = parser._parseInt(); - var sch_constraint_primaryKey = (parser._parseShort() === 1); // Primary key? - length = parser._parseInt(); - var sch_constraint_keyOrder = parser._parseShort(); // Key order - SchemaInfo[i] = { - ConstraintName : sch_constraint_constraintName, - AttributeName : sch_constraint_attributeName, - Type : sch_constraint_type, - PrimaryKey : sch_constraint_primaryKey - }; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_EXPORTED_KEYS: - length = parser._parseInt(); - var sch_exported_keys_pkTableName = parser._parseNullTerminatedString(length); // Primary key table name - length = parser._parseInt(); - var sch_exported_keys_pkColumnName = parser._parseNullTerminatedString(length); // Primary key column name - length = parser._parseInt(); - var sch_exported_keys_fkTableName = parser._parseNullTerminatedString(length); // Foreig key table name - length = parser._parseInt(); - var sch_exported_keys_fkColumnName = parser._parseNullTerminatedString(length); // Foreign key column name - length = parser._parseInt(); - var sch_exported_keys_keySeq = parser._parseShort(); // Sequence type - length = parser._parseInt(); - var sch_exported_keys_updateAction = parser._parseShort(); // Update action - length = parser._parseInt(); - var sch_exported_keys_deleteAction = parser._parseShort(); // Delete action - length = parser._parseInt(); - var sch_exported_keys_fkName = parser._parseNullTerminatedString(length); // Foreign key length - length = parser._parseInt(); - var sch_exported_keys_pkName = parser._parseNullTerminatedString(length); // Primary key length - SchemaInfo[i] = { - FkName : sch_exported_keys_fkName, - PkName : sch_exported_keys_pkName, - FkTableName : sch_exported_keys_fkTableName, - PkTableName : sch_exported_keys_pkTableName, - FkColumnName : sch_exported_keys_fkColumnName, - PkColumnName : sch_exported_keys_pkColumnName, - UpdateAction : sch_exported_keys_updateAction, - DeleteAction : sch_exported_keys_deleteAction - }; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_IMPORTED_KEYS: - length = parser._parseInt(); - var sch_imported_keys_pkTableName = parser._parseNullTerminatedString(length); // Primary key table name - length = parser._parseInt(); - var sch_imported_keys_pkColumnName = parser._parseNullTerminatedString(length); // Primary key column name - length = parser._parseInt(); - var sch_imported_keys_fkTableName = parser._parseNullTerminatedString(length); // Foreign key table name - length = parser._parseInt(); - var sch_imported_keys_fkColumnName = parser._parseNullTerminatedString(length); // Foreign key column name - length = parser._parseInt(); - var sch_imported_keys_keySeq = parser._parseShort(); // Sequence type - length = parser._parseInt(); - var sch_imported_keys_updateAction = parser._parseShort(); // Update action - length = parser._parseInt(); - var sch_imported_keys_deleteAction = parser._parseShort(); // Delete action - length = parser._parseInt(); - var sch_imported_keys_fkName = parser._parseNullTerminatedString(length); // Foreign key name - length = parser._parseInt(); - var sch_imported_keys_pkName = parser._parseNullTerminatedString(length); // Primary key name - SchemaInfo[i] = { - FkName : sch_imported_keys_fkName, - PkName : sch_imported_keys_pkName, - FkTableName : sch_imported_keys_fkTableName, - PkTableName : sch_imported_keys_pkTableName, - FkColumnName : sch_imported_keys_fkColumnName, - PkColumnName : sch_imported_keys_pkColumnName, - UpdateAction : sch_imported_keys_updateAction, - DeleteAction : sch_imported_keys_deleteAction - }; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_PRIMARY_KEY: - length = parser._parseInt(); - var sch_primary_key_className = parser._parseNullTerminatedString(length); // Table name - length = parser._parseInt(); - var sch_primary_key_columnName = parser._parseNullTerminatedString(length); // Column name - length = parser._parseInt(); - var sch_primary_key_keySeq = parser._parseInt(); // Sequence type - length = parser._parseInt(); - var sch_primary_key_keyName = parser._parseNullTerminatedString(length); // Primary key name - SchemaInfo[i] = { - TableName : sch_primary_key_className, - ColumnName : sch_primary_key_columnName, - KeyName : sch_primary_key_keyName - }; - break; - case CAS.CUBRIDSchemaType.CCI_SCH_CLASS_PRIVILEGE: - length = parser._parseInt(); - var sch_class_privilege_className = parser._parseNullTerminatedString(length); // Table name - length = parser._parseInt(); - var sch_class_privilege_privilege = parser._parseNullTerminatedString(length); // Privilege name - length = parser._parseInt(); - var sch_class_privilege_grantable = (parser._parseNullTerminatedString(length) === 'YES'); // Grantable ('YES' or 'NO') - SchemaInfo[i] = { - TableName : sch_class_privilege_className, - Privilege : sch_class_privilege_privilege, - Grantable : sch_class_privilege_grantable - }; - break; + return parser.readError(responseLength); + } + + this.tupleCount = parser._parseInt(); + + let length = 0; + let SchemaInfo = new Array(this.tupleCount); + + for (let i = 0; i < this.tupleCount; ++i) { + // Column index. + parser._parseInt(); + // OID + parser._parseBytes(DATA_TYPES.OID_SIZEOF); + + switch (options.schemaType) { + case CAS.CUBRIDSchemaType.CCI_SCH_CLASS: { + length = parser._parseInt(); + // Table name + const Name = parser._parseNullTerminatedString(length); + // Always = 2 - Indicates that Table type is a short value + length = parser._parseInt(); + // Table type + const Type = parser._parseShort(); + + SchemaInfo[i] = { Name, Type }; + + break; } - } - this.schemaInfo = SchemaInfo; + case CAS.CUBRIDSchemaType.CCI_SCH_VCLASS: { + length = parser._parseInt(); + // View name + const Name = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // View type + const Type = parser._parseShort(); + + SchemaInfo[i] = { Name, Type }; + + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_ATTRIBUTE: { + length = parser._parseInt(); + // Column name + const Name = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // sch_attribute_domain + parser._parseShort(); + length = parser._parseInt(); + const Scale = parser._parseShort(); + length = parser._parseInt(); + const Precision = parser._parseInt(); + length = parser._parseInt(); + // sch_attribute_indexed + parser._parseShort(); + length = parser._parseInt(); + const NonNull = (parser._parseShort() === 1); + length = parser._parseInt(); + // sch_attribute_shared + parser._parseShort(); + length = parser._parseInt(); + const Unique = (parser._parseShort() === 1); + length = parser._parseInt(); + + // If `length > 0` the column has a default value + if (length) { + parser._parseNullTerminatedString(length); // Default value + } + + length = parser._parseInt(); + // sch_attribute_attr_order + parser._parseInt(); + length = parser._parseInt(); + const ClassName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const SourceClass = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const IsKey = (parser._parseShort() === 1); + + SchemaInfo[i] = { + Name, + Scale, + Precision, + NonNull, + Unique, + ClassName, + SourceClass, + IsKey + }; + + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_CONSTRAIT: { + length = parser._parseInt(); + // Constraint type + const Type = parser._parseShort(); + length = parser._parseInt(); + const ConstraintName = parser._parseNullTerminatedString(length); // Constraint name + length = parser._parseInt(); + // Constraint column name + const AttributeName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // sch_constraint_num_pages + parser._parseShort(); // Pages + length = parser._parseInt(); + // sch_constraint_num_keys + parser._parseShort(); + length = parser._parseInt(); + const PrimaryKey = (parser._parseShort() === 1); + length = parser._parseInt(); + // sch_constraint_keyOrder + parser._parseShort(); + SchemaInfo[i] = { + ConstraintName, + AttributeName, + Type, + PrimaryKey + }; + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_EXPORTED_KEYS: { + length = parser._parseInt(); + const PkTableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const PkColumnName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const FkTableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const FkColumnName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // Sequence type: sch_exported_keys_keySeq + parser._parseShort(); + length = parser._parseInt(); + const UpdateAction = parser._parseShort(); + length = parser._parseInt(); + const DeleteAction = parser._parseShort(); + length = parser._parseInt(); + const FkName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const PkName = parser._parseNullTerminatedString(length); + + SchemaInfo[i] = { + FkName, + PkName, + FkTableName, + PkTableName, + FkColumnName, + PkColumnName, + UpdateAction, + DeleteAction + }; - return this; + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_IMPORTED_KEYS: { + length = parser._parseInt(); + const PkTableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const PkColumnName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const FkTableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const FkColumnName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // Sequence type: sch_imported_keys_keySeq + parser._parseShort(); + length = parser._parseInt(); + const UpdateAction = parser._parseShort(); + length = parser._parseInt(); + const DeleteAction = parser._parseShort(); + length = parser._parseInt(); + const FkName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const PkName = parser._parseNullTerminatedString(length); + + SchemaInfo[i] = { + FkName, + PkName, + FkTableName, + PkTableName, + FkColumnName, + PkColumnName, + UpdateAction, + DeleteAction + }; + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_PRIMARY_KEY: { + length = parser._parseInt(); + const TableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const ColumnName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // Sequence type: sch_primary_key_keySeq + parser._parseInt(); + length = parser._parseInt(); + const KeyName = parser._parseNullTerminatedString(length); + + SchemaInfo[i] = { + TableName, + ColumnName, + KeyName + }; + + break; + } + case CAS.CUBRIDSchemaType.CCI_SCH_CLASS_PRIVILEGE: { + length = parser._parseInt(); + const TableName = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + const Privilege = parser._parseNullTerminatedString(length); + length = parser._parseInt(); + // Grantable ('YES' or 'NO') + const Grantable = (parser._parseNullTerminatedString(length) === 'YES'); + + SchemaInfo[i] = { + TableName, + Privilege, + Grantable + }; + } + break; + } } + + this.schemaInfo = SchemaInfo; }; GetSchemaPacket.prototype.getRequestSchemaBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.BYTE_SIZEOF + (this.tableNamePattern !== null ? this.tableNamePattern.length + 1 : 0); + const options = this.options; + + let bufferLength = + // Total length of the request without itself and CAS info. + DATA_TYPES.DATA_LENGTH_SIZEOF + + // CAS info. + DATA_TYPES.CAS_INFO_SIZE + + // CAS function. + DATA_TYPES.BYTE_SIZEOF + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // Schema type. + DATA_TYPES.INT_SIZEOF + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // arg1: tableNamePattern length + (typeof options.tableNamePattern === 'string' ? options.tableNamePattern.length + 1 : 0) + + // The length of the next part. + // arg2: is null. + DATA_TYPES.INT_SIZEOF + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // Pattern match flag. + DATA_TYPES.BYTE_SIZEOF; + + if (options.protocolVersion > 4) { + bufferLength += + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + // ShardId. + DATA_TYPES.INT_SIZEOF; + } - return bufferLength; + return bufferLength; }; GetSchemaPacket.prototype.getFetchSchemaBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; + const bufferLength = + // Total length of the request without itself and CAS info. + DATA_TYPES.DATA_LENGTH_SIZEOF + + // CAS info. + DATA_TYPES.CAS_INFO_SIZE + + // CAS function. + DATA_TYPES.BYTE_SIZEOF + + // The length of the next part. + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF; - return bufferLength; + return bufferLength; }; diff --git a/src/packets/LOBNewPacket.js b/src/packets/LOBNewPacket.js index da94f4f..88e5a11 100644 --- a/src/packets/LOBNewPacket.js +++ b/src/packets/LOBNewPacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = LOBNewPacket; @@ -11,18 +9,7 @@ module.exports = LOBNewPacket; * @constructor */ function LOBNewPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.lobType = options.lobType; - this.dbVersion = options.dbVersion; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; - this.packedLobHandle = ''; - this.fileLocator = ''; - this.result = null; + this.options = options; } /** @@ -30,14 +17,13 @@ function LOBNewPacket(options) { * @param writer */ LOBNewPacket.prototype.write = function (writer) { + const options = this.options; + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_LOB_NEW); - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.lobType); // LOB type - - return writer; + writer.addInt(options.lobType); }; /** @@ -45,32 +31,29 @@ LOBNewPacket.prototype.write = function (writer) { * @param parser */ LOBNewPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); - this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.packedLobHandle = parser._parseBytes(responseLength - DATA_TYPES.INT_SIZEOF); // LOB handle - this.fileLocator = this.packedLobHandle.slice(16, this.packedLobHandle.length - 1).toString(); + // CAS Info. + parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseCode = parser._parseInt(); + + if (responseCode < 0) { + return parser.readError(responseLength); } - this.result = { - lobType : this.lobType, - packedLobHandle : this.packedLobHandle, - fileLocator : this.fileLocator, - lobLength : 0 - }; - return this; + const packedLobHandle = parser._parseBytes(responseLength - DATA_TYPES.INT_SIZEOF); + const fileLocator = packedLobHandle.slice(16, packedLobHandle.length - 1).toString(); + + this.result = { + lobType: this.options.lobType, + packedLobHandle, + fileLocator, + lobLength: 0 + }; }; LOBNewPacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; return bufferLength; diff --git a/src/packets/LOBReadPacket.js b/src/packets/LOBReadPacket.js index e4323ff..f423607 100644 --- a/src/packets/LOBReadPacket.js +++ b/src/packets/LOBReadPacket.js @@ -1,9 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); - -module.exports = LOBReadPacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -11,20 +7,7 @@ module.exports = LOBReadPacket; * @constructor */ function LOBReadPacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.lobObject = options.lobObject; - this.position = options.position; - this.lengthToRead = options.lengthToRead; - this.dbVersion = options.dbVersion; - - this.lobBuffer = null; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; - this.readLength = 0; + this.options = options; } /** @@ -32,18 +15,16 @@ function LOBReadPacket(options) { * @param writer */ LOBReadPacket.prototype.write = function (writer) { + const options = this.options; + const lobObject = options.lobObject; + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_LOB_READ); - writer._writeInt(this.lobObject.packedLobHandle.length); // LOB handle size - writer._writeBytes(this.lobObject.packedLobHandle.length, this.lobObject.packedLobHandle); // LOB handle - writer._writeInt(DATA_TYPES.LONG_SIZEOF); - writer._writeLong(this.position); // Start position from witch to read - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.lengthToRead); // Number of bytes to read - - return writer; + writer.addBytes(lobObject.packedLobHandle); // LOB handle + writer.addLong(options.offset); // Start offset from witch to read + writer.addInt(options.bytesToRead); // Number of bytes to read }; /** @@ -51,37 +32,26 @@ LOBReadPacket.prototype.write = function (writer) { * @param parser */ LOBReadPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseCode = parser._parseInt(); - this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - if (this.lobObject.lobType === CAS.CUBRIDDataType.CCI_U_TYPE_BLOB) { - this.lobBuffer = new Buffer(this.responseCode); - this.lobBuffer = parser._parseBytes(this.responseCode); - } else { - if (this.lobObject.lobType === CAS.CUBRIDDataType.CCI_U_TYPE_CLOB) { - this.lobBuffer = parser._parseString(this.responseCode); - } else { - Helpers.logInfo(ErrorMessages.ERROR_INVALID_LOB_TYPE); // Log non-blocking error - } - } - this.readLength = this.responseCode; + if (responseCode < 0) { + return parser.readError(responseLength); } - return this; + this.readLength = responseCode; + + this.lobBuffer = parser._parseBytes(this.readLength); }; LOBReadPacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + this.lobObject.packedLobHandle.length + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + this.options.lobObject.packedLobHandle.length + DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; return bufferLength; }; + +module.exports = LOBReadPacket; diff --git a/src/packets/LOBWritePacket.js b/src/packets/LOBWritePacket.js index d29c812..6438e36 100644 --- a/src/packets/LOBWritePacket.js +++ b/src/packets/LOBWritePacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = LOBWritePacket; @@ -11,19 +9,7 @@ module.exports = LOBWritePacket; * @constructor */ function LOBWritePacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.lobObject = options.lobObject; - this.position = options.position; - this.data = options.data; - this.writeLen = options.writeLen; - this.dbVersion = options.dbVersion; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; - this.wroteLength = 0; + this.options = options; } /** @@ -31,24 +17,20 @@ function LOBWritePacket(options) { * @param writer */ LOBWritePacket.prototype.write = function (writer) { + const options = this.options; + const lobObject = options.lobObject; + writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(options.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_LOB_WRITE); - writer._writeInt(this.lobObject.packedLobHandle.length); // Length of the packedLobHandle - writer._writeBytes(this.lobObject.packedLobHandle.length, this.lobObject.packedLobHandle); // LOB handle - writer._writeInt(DATA_TYPES.LONG_SIZEOF); - writer._writeLong(this.position); // Start position from witch to write data - writer._writeInt(this.writeLen); // Length of data to be written - if (this.lobObject.lobType === CAS.CUBRIDDataType.CCI_U_TYPE_BLOB) { - writer._writeBytes(this.writeLen, this.data); - } else { - // Otherwise, it must be `CAS.CUBRIDDataType.CCI_U_TYPE_CLOB`. + writer.addBytes(lobObject.packedLobHandle); + // Offset from which to write data. + writer.addLong(options.offset); - // Convert clob string to bytes - var dataInBytes = new Buffer(this.data, 'binary'); - writer._writeBytes(this.writeLen, dataInBytes); - } + // `data` is always a buffer. The `client` already converts + // CLOB into a Buffer object. + writer.addBytes(options.data); return writer; }; @@ -58,27 +40,25 @@ LOBWritePacket.prototype.write = function (writer) { * @param parser */ LOBWritePacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); - this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.wroteLength = this.responseCode; - } + // CAS Info. + parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseCode = parser._parseInt(); + + if (responseCode < 0) { + return parser.readError(responseLength); + } - return this; + this.bytesWritten = responseCode; }; LOBWritePacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + this.lobObject.packedLobHandle.length + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF + DATA_TYPES.INT_SIZEOF + this.writeLen; + const options = this.options; + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + options.lobObject.packedLobHandle.length + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF + DATA_TYPES.INT_SIZEOF + options.data.length; return bufferLength; }; diff --git a/src/packets/OpenDatabasePacket.js b/src/packets/OpenDatabasePacket.js index 74251f6..d6a9a85 100644 --- a/src/packets/OpenDatabasePacket.js +++ b/src/packets/OpenDatabasePacket.js @@ -1,9 +1,7 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +'use strict'; -module.exports = OpenDatabasePacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -11,16 +9,7 @@ module.exports = OpenDatabasePacket; * @constructor */ function OpenDatabasePacket(options) { - options = options || {}; - - this.database = options.database; - this.user = options.user; - this.password = options.password; - this.casInfo = options.casInfo; - - this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; + this.options = options; } /** @@ -28,9 +17,11 @@ function OpenDatabasePacket(options) { * @param writer */ OpenDatabasePacket.prototype.write = function (writer) { - writer._writeFixedLengthString(this.database, 0, 32); // Database name - writer._writeFixedLengthString(this.user, 0, 32); // User login ID - writer._writeFixedLengthString(this.password, 0, 32); // User login password + const options = this.options; + + writer._writeFixedLengthString(options.database, 0, 32); // Database name + writer._writeFixedLengthString(options.user, 0, 32); // User login ID + writer._writeFixedLengthString(options.password, 0, 32); // User login password writer._writeFiller(512, 0); // Used for extended connection info writer._writeFiller(20, 0); // Reserved @@ -42,26 +33,50 @@ OpenDatabasePacket.prototype.write = function (writer) { * @param parser */ OpenDatabasePacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const logger = this.options.logger; + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + logger.debug('OpenDatabasePacket: casInfo', this.casInfo); + this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - DATA_TYPES.INT_SIZEOF * 2); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.brokerInfo = parser._parseBytes(DATA_TYPES.BROKER_INFO_SIZEOF); // Broker information - this.sessionId = parser._parseInt(); // Unique session ID + return parser.readError(responseLength); } - return this; + /* + * Broker information: 8 bytes. + * Byte 1: DBMS Type. 1 = CUBRID. + * Byte 2: Reserved. 1. + * Byte 3: Statement Polling. 1. + * Byte 4: CCI_PCONNECT. 0. + * Byte 5: Protocol Version. + * Byte 6: Function Flag. + * Byte 7: Reserved. 0. + * Byte 8: Reserved. 0. + * */ + const brokerInfo = parser._parseBytes(DATA_TYPES.BROKER_INFO_SIZEOF); + + logger.debug('OpenDatabasePacket: brokerInfo', brokerInfo); + + const protocolVersion = CAS.getProtocolVersion(brokerInfo[4]); + logger.debug('OpenDatabasePacket: protocolVersion', protocolVersion); + + // Freeze the object, i.e. make it immutable. + this.brokerInfo = Object.freeze({ + dbType: brokerInfo[0], + protocolVersion, + statementPolling: brokerInfo[2], + }); + + // Unique session ID. + this.sessionId = parser._parseInt(); }; OpenDatabasePacket.prototype.getBufferLength = function () { - var bufferLength = + const bufferLength = // Fixed database length + // User login ID + // User login password. @@ -74,3 +89,5 @@ OpenDatabasePacket.prototype.getBufferLength = function () { return bufferLength; }; + +module.exports = OpenDatabasePacket; diff --git a/src/packets/PacketReader.js b/src/packets/PacketReader.js index 0735cc6..9a63ac3 100644 --- a/src/packets/PacketReader.js +++ b/src/packets/PacketReader.js @@ -1,5 +1,8 @@ -var DATA_TYPES = require('./../constants/DataTypes'), - CAS = require('../constants/CASConstants'); +'use strict'; + +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); +const ErrorMessages = require('../constants/ErrorMessages'); module.exports = PacketReader; @@ -12,6 +15,23 @@ function PacketReader() { this._offset = 0; } +/** + * Read an error code and message from the internal buffer. + * @param responseLength + */ +PacketReader.prototype.readError = function (responseLength) { + let error = new Error(); + + error.code = this._parseInt(); + error.message = this._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); + + if (!error.message.length) { + error.message = ErrorMessages.resolveErrorCode(error.code); + } + + return error; +}; + /** * Write a buffer value to the internal buffer * @param buffer @@ -26,17 +46,17 @@ PacketReader.prototype.write = function (buffer) { * @param newBuffer */ PacketReader.prototype._append = function (newBuffer) { - var oldBuffer = this._buffer; + let oldBuffer = this._buffer; if (!oldBuffer) { this._buffer = newBuffer; return; } - var bytesRemaining = this._bytesRemaining(); - var newLength = bytesRemaining + newBuffer.length; + let bytesRemaining = this._bytesRemaining(); + let newLength = bytesRemaining + newBuffer.length; - var combinedBuffer = (this._offset > newLength) ? oldBuffer.slice(0, newLength) : new Buffer(newLength); + let combinedBuffer = (this._offset > newLength) ? oldBuffer.slice(0, newLength) : new Buffer(newLength); oldBuffer.copy(combinedBuffer, 0, this._offset); newBuffer.copy(combinedBuffer, bytesRemaining); @@ -45,22 +65,28 @@ PacketReader.prototype._append = function (newBuffer) { this._offset = 0; }; +function parseNum(length) { + let value = 0; + let i = this._offset; + const b = this._buffer; + const endIndex = i + length; + + for (; i < endIndex; ++i) { + value <<= 8; + value |= (b[i] & 0xff); + } + + this._offset = endIndex; + + return value; +} + /** * Returns an short value from the internal buffer * @return {Number} */ PacketReader.prototype._parseShort = function () { - var value = 0; - - for (var i = DATA_TYPES.SHORT_SIZEOF - 1; i >= 0; i--) { - value += this._buffer[this._offset++] * Math.pow(256, i); - } - - if (value & 0x8000) { - return value - 0xFFFF - 1; - } else { - return value; - } + return parseNum.call(this, DATA_TYPES.SHORT_SIZEOF); }; /** @@ -68,17 +94,7 @@ PacketReader.prototype._parseShort = function () { * @return {Number} */ PacketReader.prototype._parseInt = function () { - var value = 0; - - for (var i = DATA_TYPES.INT_SIZEOF - 1; i >= 0; i--) { - value += this._buffer[this._offset++] * Math.pow(256, i); - } - - if (value & 0x80000000) { - return value - 0xFFFFFFFF - 1; - } else { - return value; - } + return parseNum.call(this, DATA_TYPES.INT_SIZEOF); }; /** @@ -95,7 +111,7 @@ PacketReader.prototype._parseByte = function () { * @return {Array} */ PacketReader.prototype._parseBytes = function (bytesCount) { - var buffer = this._buffer.slice(this._offset, this._offset + bytesCount); + const buffer = this._buffer.slice(this._offset, this._offset + bytesCount); this._offset += bytesCount; @@ -108,37 +124,13 @@ PacketReader.prototype._parseBytes = function (bytesCount) { * @return {*} */ PacketReader.prototype._parseBuffer = function (bytesCount) { - var buffer = this._buffer.slice(this._offset, this._offset + bytesCount); + let buffer = this._buffer.slice(this._offset, this._offset + bytesCount); this._offset += bytesCount; return buffer; }; -/** - * Returns a string value from the internal buffer - * @param bytesCount - * @return {Buffer} - */ -PacketReader.prototype._parseString = function (bytesCount) { - if (bytesCount <= 0) { - return ''; - } - - var start = this._offset; - var end = start + bytesCount; - var buffer = this._buffer.slice(start, end); - - var value = ''; - for (var i = 0; i < buffer.length; i++) { - value += String.fromCharCode(buffer[i]); - } - - this._offset = end; - - return value; -}; - /** * Returns a string value from the internal buffer * @return {String} @@ -148,9 +140,9 @@ PacketReader.prototype._parseNullTerminatedString = function (length) { return ''; } - var valueLen = length - 1; // Get the actual null-terminated string length - var buffer = this._buffer.slice(this._offset, this._offset + valueLen); - var value = buffer.toString(); + let valueLen = length - 1; // Get the actual null-terminated string length + let buffer = this._buffer.slice(this._offset, this._offset + valueLen); + let value = buffer.toString(); this._offset += valueLen; this._parseByte(); // Read also the null-terminate @@ -163,17 +155,20 @@ PacketReader.prototype._parseNullTerminatedString = function (length) { * @return {Date} */ PacketReader.prototype._parseDate = function () { - var year = this._parseShort(); - var month = this._parseShort() - 1; - var day = this._parseShort(); - var hour = 0; - var min = 0; - var sec = 0; - var msec = 0; - - var date = new Date(); + const year = this._parseShort(); + // `month` in `Date` is zero based where `0` represents January. + const month = this._parseShort() - 1; + const day = this._parseShort(); + const hour = 0; + const min = 0; + const sec = 0; + const msec = 0; + + let date = new Date(); + date.setUTCFullYear(year, month, day); date.setUTCHours(hour, min, sec, msec); + return date; }; @@ -182,17 +177,20 @@ PacketReader.prototype._parseDate = function () { * @return {Date} */ PacketReader.prototype._parseDateTime = function () { - var year = this._parseShort(); - var month = this._parseShort() - 1; - var day = this._parseShort(); - var hour = this._parseShort(); - var min = this._parseShort(); - var sec = this._parseShort(); - var msec = this._parseShort(); - - var date = new Date(); + const year = this._parseShort(); + // `month` in `Date` is zero based where `0` represents January. + const month = this._parseShort() - 1; + const day = this._parseShort(); + const hour = this._parseShort(); + const min = this._parseShort(); + const sec = this._parseShort(); + const msec = this._parseShort(); + + let date = new Date(); + date.setUTCFullYear(year, month, day); date.setUTCHours(hour, min, sec, msec); + return date; }; @@ -201,16 +199,19 @@ PacketReader.prototype._parseDateTime = function () { * @return {Date} */ PacketReader.prototype._parseTime = function () { - var year = 0; - var month = 0; - var day = 0; - var hour = this._parseShort(); - var min = this._parseShort(); - var sec = this._parseShort(); - var msec = 0; - - var date = new Date(year, month, day, hour, min, sec, msec); - date.setUTCHours(hour, min, sec, msec); + const hour = this._parseShort(); + const min = this._parseShort(); + const sec = this._parseShort(); + + let date = new Date(); + + // `January 1, 1970` is the beginning of the Unix Epoch. + // When `TIME` data is returned by CUBRID, we receive + // only the time part of the date, so, the date is set + // to the beginning of the epoch. + date.setUTCFullYear(1970, 0, 1); + date.setUTCHours(hour, min, sec, 0); + return date; }; @@ -219,17 +220,19 @@ PacketReader.prototype._parseTime = function () { * @return {Date} */ PacketReader.prototype._parseTimeStamp = function () { - var year = this._parseShort(); - var month = this._parseShort() - 1; - var day = this._parseShort(); - var hour = this._parseShort(); - var min = this._parseShort(); - var sec = this._parseShort(); - var msec = 0; - - var date = new Date(); + const year = this._parseShort(); + const month = this._parseShort() - 1; + const day = this._parseShort(); + const hour = this._parseShort(); + const min = this._parseShort(); + const sec = this._parseShort(); + const msec = 0; + + let date = new Date(); + date.setUTCFullYear(year, month, day); date.setUTCHours(hour, min, sec, msec); + return date; }; @@ -238,9 +241,7 @@ PacketReader.prototype._parseTimeStamp = function () { * @return {String} */ PacketReader.prototype._parseChar = function () { - var val = this._parseByte(); - - return String.fromCharCode(val); + return String.fromCharCode(this._parseByte()); }; /** @@ -248,17 +249,7 @@ PacketReader.prototype._parseChar = function () { * @return {Number} */ PacketReader.prototype._parseLong = function () { - var value = 0; - - for (var i = DATA_TYPES.LONG_SIZEOF - 1; i >= 0; i--) { - value += this._buffer[this._offset++] * Math.pow(256, i); - } - - if (value & 0x8000000000000000) { - return value - 0xFFFFFFFFFFFFFFFF - 1; - } else { - return value; - } + return parseNum.call(this, DATA_TYPES.LONG_SIZEOF); }; /** @@ -266,8 +257,10 @@ PacketReader.prototype._parseLong = function () { * @return {Number} */ PacketReader.prototype._parseDouble = function () { - var value = this._buffer.readDoubleBE(this._offset); + let value = this._buffer.readDoubleBE(this._offset); + this._offset += DATA_TYPES.DOUBLE_SIZEOF; + return value; }; @@ -276,8 +269,10 @@ PacketReader.prototype._parseDouble = function () { * @return {Number} */ PacketReader.prototype._parseFloat = function () { - var value = this._buffer.readFloatBE(this._offset); + let value = this._buffer.readFloatBE(this._offset); + this._offset += DATA_TYPES.FLOAT_SIZEOF; + return value; }; @@ -298,47 +293,63 @@ PacketReader.prototype._parseObject = function () { }; /** - * Returns a BLOB object from the internal buffer + * Returns a LOB object from the internal buffer * @return {Object} */ -PacketReader.prototype._parseBlob = function (size) { - var packedLobHandle = this._parseBytes(size); - var lobSizeBuffer = packedLobHandle.slice(DATA_TYPES.INT_SIZEOF, DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF); - var lobSize = 0; +function readLob(size) { + /* + * |----4 bytes----|----8 bytes----|----4 bytes----|---------------------locator size bytes-------------------| + * | db_type | LOB size | locator size | the absolute file path on the server where LOB is stored | + * |---------------|---------------|---------------|----------------------------------------------------------| + * + * */ + const packedLobHandle = this._parseBytes(size); + let lobLength = 0; + let locatorSize = 0; + // Skip the first 4 bytes which are the `db_type`. + let start = DATA_TYPES.INT_SIZEOF; + // BLOB size is represented as a long 64bit integer. + let end = DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF; + + for (; start < end; ++start) { + lobLength <<= 8; + lobLength |= (packedLobHandle[start] & 0xff); + } - for (var i = DATA_TYPES.LONG_SIZEOF - 1; i >= 0; i--) { - lobSize += lobSizeBuffer[DATA_TYPES.LONG_SIZEOF - i - 1] * Math.pow(256, i); + for (end += DATA_TYPES.INT_SIZEOF; start < end; ++start) { + locatorSize <<= 8; + locatorSize |= (packedLobHandle[start] & 0xff); } - var fileLocator = packedLobHandle.slice(16, packedLobHandle.length - 1).toString(); + + let fileLocator = packedLobHandle.toString('utf8', start, start + locatorSize - 1); return { - lobType : CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, // BLOB type - packedLobHandle : packedLobHandle, - fileLocator : fileLocator, - lobLength : lobSize + fileLocator, + lobLength, + packedLobHandle, }; +} + +/** + * Returns a BLOB object from the internal buffer + * @return {Object} + */ +PacketReader.prototype.readBlob = function (size) { + let lob = readLob.call(this, size); + lob.lobType = CAS.CUBRIDDataType.CCI_U_TYPE_BLOB; + + return lob; }; /** * Returns a CLOB object from the internal buffer * @return {Object} */ -PacketReader.prototype._parseClob = function (size) { - var packedLobHandle = this._parseBytes(size); - var lobSizeBuffer = packedLobHandle.slice(DATA_TYPES.INT_SIZEOF, DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF); - var lobSize = 0; +PacketReader.prototype.readClob = function (size) { + let lob = readLob.call(this, size); + lob.lobType = CAS.CUBRIDDataType.CCI_U_TYPE_CLOB; - for (var i = DATA_TYPES.LONG_SIZEOF - 1; i >= 0; i--) { - lobSize += lobSizeBuffer[DATA_TYPES.LONG_SIZEOF - i - 1] * Math.pow(256, i); - } - var fileLocator = packedLobHandle.slice(16, packedLobHandle.length - 1).toString(); - - return { - lobType : CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, // CLOB type - packedLobHandle : packedLobHandle, - fileLocator : fileLocator, - lobLength : lobSize - }; + return lob; }; /** @@ -346,8 +357,8 @@ PacketReader.prototype._parseClob = function (size) { * @return {Array} */ PacketReader.prototype._parseSequence = function () { - var count = this._parseInt(); - var size = this._parseInt(); + let count = this._parseInt(); + let size = this._parseInt(); this._offset += count * size; return null; // Not supported diff --git a/src/packets/PacketWriter.js b/src/packets/PacketWriter.js index e9123d6..0901590 100644 --- a/src/packets/PacketWriter.js +++ b/src/packets/PacketWriter.js @@ -1,5 +1,6 @@ -var DATA_TYPES = require('./../constants/DataTypes'), - CAS = require('../constants/CASConstants'); +'use strict'; +const DATA_TYPES = require('./../constants/DataTypes'); +const CAS = require('../constants/CASConstants'); module.exports = PacketWriter; @@ -8,7 +9,7 @@ module.exports = PacketWriter; * @constructor */ function PacketWriter(length) { - this._buffer = new Buffer(length || 0); + this._buffer = new Buffer(length || 0); this._offset = 0; } @@ -20,6 +21,223 @@ PacketWriter.prototype._toBuffer = function () { return this._buffer.slice(0, this._offset); }; +/** + * Write a byte value to the internal buffer + * @param value + */ +PacketWriter.prototype.addByte = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.BYTE_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.BYTE_SIZEOF); + // The actual value. + this._buffer[this._offset++] = value & 0xFF; +}; + +/** + * Write a bytes array to the internal buffer + * @param bytesCount + * @param value + */ +PacketWriter.prototype.addBytes = function (value) { + const bytesCount = value.length; + + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */bytesCount + ); + + // The length of the value. + this._writeInt(bytesCount); + // The actual value. + this._writeBytes(value); +}; + +/** + * Write a date value to the internal buffer + * @param value + */ +PacketWriter.prototype.addDate = function (year, month, day) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.DATE_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.DATE_SIZEOF); + // The actual value. + this._writeDate(year, month, day); +}; + +/** + * Write a datetime value to the internal buffer + * @param value + */ +PacketWriter.prototype.addDateTime = function (year, month, day, hour, minute, second, millisecond) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.DATETIME_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.DATETIME_SIZEOF); + // The actual value. + this._writeDateTime(year, month, day, hour, minute, second, millisecond); +}; + +/** + * Write a datetime value to the internal buffer + * @param value + */ +PacketWriter.prototype.addDateTime = function (year, month, day, hour, minute, second, millisecond) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.DATETIME_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.DATETIME_SIZEOF); + // The actual value. + this._writeDateTime(year, month, day, hour, minute, second, millisecond); +}; + +/** + * Write a datetime value to the internal buffer + * @param value + */ +PacketWriter.prototype.addTimestamp = function (year, month, day, hour, minute, second) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.TIMESTAMP_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.TIMESTAMP_SIZEOF); + // The actual value. + this._writeTimestamp(year, month, day, hour, minute, second); +}; + +/** + * Write a double value to the internal buffer + * @param value + */ +PacketWriter.prototype.addDouble = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.DOUBLE_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.DOUBLE_SIZEOF); + // The actual value. + this._writeDouble(value); +}; + +/** + * Write a float value to the internal buffer + * @param value + */ +PacketWriter.prototype.addFloat = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.FLOAT_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.FLOAT_SIZEOF); + // The actual value. + this._writeFloat(value); +}; + +/** + * Write a integer value to the internal buffer + * @param value + */ +PacketWriter.prototype.addInt = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF * 2 + ); + + // The length of the value. + this._writeInt(DATA_TYPES.INT_SIZEOF); + // The actual value. + this._writeInt(value); +}; + +/** + * Write a short value to the internal buffer + * @param value + */ +PacketWriter.prototype.addShort = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + DATA_TYPES.SHORT_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.SHORT_SIZEOF); + // The actual value. + this._writeShort(value); +}; + +/** + * Write a time value to the internal buffer + * @param value + */ +PacketWriter.prototype.addTime = function (hour, minute, second) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + + /* the value itself */DATA_TYPES.TIME_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.TIME_SIZEOF); + // The actual value. + this._writeTime(hour, minute, second); +}; + +/** + * Write a long value to the internal buffer + * @param value + */ +PacketWriter.prototype.addLong = function (value) { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + DATA_TYPES.LONG_SIZEOF + ); + + // The length of the value. + this._writeInt(DATA_TYPES.LONG_SIZEOF); + // The actual value. + this._writeLong(value); +}; + +/** + * Write a NULL value to the internal buffer + */ +PacketWriter.prototype.addNull = function () { + this._allocate( + /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF + ); + + // The actual value. + this._writeInt(0); +}; +/** + * Write a integer value to the internal buffer + * @param value + */ +PacketWriter.prototype.addCacheTime = function () { + const length = /* size of any data is represented as an integer */DATA_TYPES.INT_SIZEOF * 2; + this._allocate(length); + + // The actual value. + this._writeInt(length); /* length */ + this._writeInt(0); /* second */ + this._writeInt(0); /* millisecond */ +}; + /** * Write a byte value to the internal buffer * @param value @@ -45,12 +263,14 @@ PacketWriter.prototype._writeChar = function (value) { * @param bytesCount * @param value */ -PacketWriter.prototype._writeBytes = function (bytesCount, value) { +PacketWriter.prototype._writeBytes = function (value) { + const bytesCount = value.length; + this._allocate(bytesCount); - for (var i = 0; i < bytesCount; i++) { - this._buffer[this._offset++] = value[i] & 0xFF; - } + value.copy(this._buffer, this._offset, 0, bytesCount); + + this._offset += bytesCount; }; /** @@ -82,8 +302,8 @@ PacketWriter.prototype._writeInt = function (value) { * @param value */ PacketWriter.prototype._writeLong = function (value) { - var reminder = value % Math.pow(2, 32); - var quotient = (value - reminder) / Math.pow(2, 32); + const reminder = value % Math.pow(2, 32); + const quotient = (value - reminder) / Math.pow(2, 32); this._writeInt(quotient); this._writeInt(reminder); }; @@ -122,7 +342,8 @@ PacketWriter.prototype._writeNumeric = function (value) { * @param fillerValue */ PacketWriter.prototype._writeFiller = function (bytesCount, fillerValue) { - var fillerVal; + let fillerVal; + this._allocate(bytesCount); fillerValue = typeof fillerValue !== 'undefined' ? fillerValue : 0x00; @@ -133,7 +354,7 @@ PacketWriter.prototype._writeFiller = function (bytesCount, fillerValue) { fillerVal = fillerValue & 0xFF; } - for (var i = 0; i < bytesCount; i++) { + for (let i = 0; i < bytesCount; i++) { this._buffer[this._offset++] = fillerVal; } }; @@ -143,16 +364,18 @@ PacketWriter.prototype._writeFiller = function (bytesCount, fillerValue) { * @param value */ PacketWriter.prototype._writeNullTerminatedString = function (value) { - // Typecast undefined into '' and numbers into strings - value = value || ''; - value = value + ''; + // Typecast undefined into '' and numbers into strings. + value = value ? '' + value : ''; - var stringLengthInBytes = Buffer.byteLength(value); - var count = DATA_TYPES.INT_SIZEOF + stringLengthInBytes + DATA_TYPES.BYTE_SIZEOF; - this._allocate(count); + const stringLengthInBytes = Buffer.byteLength(value); + this._allocate( + /* the length of the string */ DATA_TYPES.INT_SIZEOF + + /* the actual string */stringLengthInBytes + + /* the terminating null of 1 byte length */ DATA_TYPES.BYTE_SIZEOF + ); - //Write length - this._writeInt(stringLengthInBytes + 1); + // Write length in bytes. + this._writeInt(stringLengthInBytes + /* `null` */ 1); this._buffer.write(value, this._offset, stringLengthInBytes); this._offset += stringLengthInBytes; @@ -168,19 +391,19 @@ PacketWriter.prototype._writeNullTerminatedString = function (value) { * @param fixedLength */ PacketWriter.prototype._writeFixedLengthString = function (value, fillerValue, fixedLength) { - var fillerVal; + let fillerVal; // Typecast undefined into '' and numbers into strings value = value || ''; value = value + ''; - var count = value.length; + let count = value.length; if (count >= fixedLength) { count = fixedLength; } this._allocate(fixedLength); - for (var i = 0; i < value.length; i++) { + for (let i = 0; i < value.length; i++) { this._buffer[this._offset++] = value[i].charCodeAt(0); } @@ -190,7 +413,7 @@ PacketWriter.prototype._writeFixedLengthString = function (value, fillerValue, f fillerVal = fillerValue & 0xFF; } - for (var j = 1; j <= fixedLength - count; j++) { + for (let j = 1; j <= fixedLength - count; j++) { this._buffer[this._offset++] = fillerVal; } }; @@ -202,15 +425,7 @@ PacketWriter.prototype._writeFixedLengthString = function (value, fillerValue, f * @param day */ PacketWriter.prototype._writeDate = function (year, month, day) { - this._allocate(DATA_TYPES.DATETIME_SIZEOF); - - this._writeShort(year); - this._writeShort(month); - this._writeShort(day); - this._writeShort(0); - this._writeShort(0); - this._writeShort(0); - this._writeShort(0); + this._writeDateTime(year, month, day, 0, 0, 0, 0); }; /** @@ -227,7 +442,9 @@ PacketWriter.prototype._writeDateTime = function (year, month, day, hour, min, s this._allocate(DATA_TYPES.DATETIME_SIZEOF); this._writeShort(year); - this._writeShort(month); + // `month` in JS is `0` based; `9` is for October. + // But in CUBRID we need to store the actual value. + this._writeShort(month + 1); this._writeShort(day); this._writeShort(hour); this._writeShort(min); @@ -238,19 +455,11 @@ PacketWriter.prototype._writeDateTime = function (year, month, day, hour, min, s /** * Write a Time value to the internal buffer * @param hour - * @param min - * @param sec + * @param minute + * @param second */ -PacketWriter.prototype._writeTime = function (hour, min, sec) { - this._allocate(DATA_TYPES.DATETIME_SIZEOF); - - this._writeShort(0); - this._writeShort(0); - this._writeShort(0); - this._writeShort(hour); - this._writeShort(min); - this._writeShort(sec); - this._writeShort(0); +PacketWriter.prototype._writeTime = function (hour, minute, second) { + this._writeDateTime(0, /* month: `_writeDateTime` will do `+1` */-1, 0, hour, minute, second, 0); }; /** @@ -263,22 +472,14 @@ PacketWriter.prototype._writeTime = function (hour, min, sec) { * @param sec */ PacketWriter.prototype._writeTimestamp = function (year, month, day, hour, min, sec) { - this._allocate(DATA_TYPES.DATETIME_SIZEOF); - - this._writeShort(year); - this._writeShort(month); - this._writeShort(day); - this._writeShort(hour); - this._writeShort(min); - this._writeShort(sec); - this._writeShort(0); + this._writeDateTime(year, month, day, hour, min, sec, 0); }; /** * Write a Object value to the internal buffer * @param value */ -PacketWriter.prototype._writeObject = function (value) { +PacketWriter.prototype._writeObject = function () { this._writeByte(0); // Not supported }; @@ -286,7 +487,7 @@ PacketWriter.prototype._writeObject = function (value) { * Write a Sequence value to the internal buffer * @param value */ -PacketWriter.prototype._writeSequence = function (value) { +PacketWriter.prototype._writeSequence = function () { this._writeByte(0); // Not supported }; @@ -294,7 +495,7 @@ PacketWriter.prototype._writeSequence = function (value) { * Write a ResultSet value to the internal buffer * @param value */ -PacketWriter.prototype._writeResultSet = function (value) { +PacketWriter.prototype._writeResultSet = function () { this._writeByte(0); // Not supported }; @@ -327,7 +528,7 @@ PacketWriter.prototype._writeClob = function (value) { * @param value */ PacketWriter.prototype._writeBuffer = function (value) { - var count = value.length; + const count = value.length; this._allocate(count); value.copy(this._buffer, this._offset); @@ -342,13 +543,13 @@ PacketWriter.prototype._writeBuffer = function (value) { */ PacketWriter.prototype._allocate = function (count) { // Verify if we need to allocate more space - var bytesRemaining = this._buffer.length - this._offset; + const bytesRemaining = this._buffer.length - this._offset; if (bytesRemaining < count) { - var oldBuffer = this._buffer; + let oldBuffer = this._buffer; - this._buffer = new Buffer(oldBuffer.length + (count - bytesRemaining)); + this._buffer = new Buffer(oldBuffer.length + (count - bytesRemaining)); - oldBuffer.copy(this._buffer); + oldBuffer.copy(this._buffer); } }; diff --git a/src/packets/PrepareExecuteOldProtocolPacket.js b/src/packets/PrepareExecuteOldProtocolPacket.js deleted file mode 100644 index 6c8d65b..0000000 --- a/src/packets/PrepareExecuteOldProtocolPacket.js +++ /dev/null @@ -1,624 +0,0 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - CAS = require('../constants/CASConstants'), - ErrorMessages = require('../constants/ErrorMessages'), - ColumnMetaData = require('../resultset/ColumnMetaData'), - PacketWriter = require('../packets/PacketWriter'), - ResultInfo = require('../resultset/ResultInfo'); - -module.exports = PrepareAndExecutePacket; - -/** - * Constructor - * @param options - * @constructor - */ -function PrepareAndExecutePacket(options) { - options = options || {}; - - this.casInfo = options.casInfo; - this.sql = options.sql; - this.autoCommit = options.autoCommitMode; - this.dbVersion = options.dbVersion; - this.paramValues = options.paramValues; - this.paramTypes = options.paramTypes; - - this.resultSet = ''; - this.resultCacheLifetime = 0; // Cache lifetime - this.statementType = null; // Statement type - this.bindCount = 0; // Bind count - this.isUpdatable = false; // Is updatable - this.totalTupleCount = 0; // Total nomber of tuples - this.cache_reusable = 0; // Cache reusable - this.resultCount = 0; // Number of results - this.columnCount = 0; // Number of columns - this.infoArray = new ColumnMetaData(); // Column meta data - this.resultInfos = new ResultInfo(); // Result info - this.queryHandle = 0; // Query handle - this.currentTupleCount = 0; // Current number of returned tuples - this.tupleCount = 0; // Number of tuples - this.bindCount = 0; // Number of parameters to bind - this.isUpdatable = false; - this.resultCacheLifetime = 0; - - this.responseCode = 0; // Response code - this.errorCode = 0; // Error code - this.errorMsg = ''; // Error message -} - -/** - * Write prepare data - * @param writer - */ -PrepareAndExecutePacket.prototype.writePrepare = function (writer) { - // Prepare info - writer._writeInt(this.getPrepareBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); - - writer._writeByte(CAS.CASFunctionCode.CAS_FC_PREPARE); - writer._writeNullTerminatedString(this.sql); // Sql string - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); // Prepare flag - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(this.autoCommit ? 1 : 0); // Autocommit mode - - return writer; -}; - -/** - * Write execute data - * @param writer - */ -PrepareAndExecutePacket.prototype.writeExecute = function (writer) { - var bufferLength = this.getExecuteBufferLength(); - - writer._writeInt(bufferLength - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); - writer._writeByte(CAS.CASFunctionCode.CAS_FC_EXECUTE); - - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(this.queryHandle); - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(CAS.CCIExecutionOption.CCI_EXEC_NORMAL); // Execute flag - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(0); // Max col size; - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(0); // Max row size; - writer._writeInt(0); // NULL - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - - if (this.statementType !== CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { - writer._writeByte(0); // FetchFlag; - } else { - writer._writeByte(1); // FetchFlag; - } - - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(this.autoCommit ? 1 : 0); // Autocommit mode - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(1); // Forrward only cursor - writer._writeInt(2 * DATA_TYPES.INT_SIZEOF); // Write cache time - writer._writeInt(0); // Seconds - writer._writeInt(0); // Useconds - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(0); // Query timeout - - if (this.paramValues !== null) { - this._writeParamValue(writer); - } - - return writer; -}; - -/** - * Read prepare data - * @param parser - */ -PrepareAndExecutePacket.prototype.parsePrepare = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); - - this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.queryHandle = this.responseCode; // Query handle - this.resultCacheLifetime = parser._parseInt(); // Cache lifetime - this.statementType = parser._parseByte(); // Statement type - this.bindCount = parser._parseInt(); // Bind count - this.isUpdatable = (parser._parseByte() === 1); // Updatable? - this.columnCount = parser._parseInt(); // Column count - this.infoArray = []; - for (var i = 0; i < this.columnCount; i++) { - var info = new ColumnMetaData(); - info.ColumnType = parser._parseByte(); // Column type - info.scale = parser._parseShort(); // Scale - info.precision = parser._parseInt(); // Precision - var len = parser._parseInt(); - info.Name = parser._parseNullTerminatedString(len); // Column name - len = parser._parseInt(); - info.RealName = parser._parseNullTerminatedString(len); // Column real name - len = parser._parseInt(); - info.TableName = parser._parseNullTerminatedString(len); // Table name - info.IsNullable = (parser._parseByte() === 1); // Nullable? - len = parser._parseInt(); - info.DafaultValue = parser._parseNullTerminatedString(len); // Default value - info.IsAutoIncrement = (parser._parseByte() === 1); // Auto-increment? - info.IsUniqueKey = (parser._parseByte() === 1); // Unique key? - info.IsPrimaryKey = (parser._parseByte() === 1); // Primary key? - info.IsReverseIndex = (parser._parseByte() === 1); // Reserved key index - info.IsReverseUnique = (parser._parseByte() === 1); // Reverse unique? - info.IsForeignKey = (parser._parseByte() === 1); // Foreign key? - info.IsShared = (parser._parseByte() === 1); // Shared? - this.infoArray[i] = info; - } - } - return this; -}; - -/** - * Read execute data - * @param parser - */ -PrepareAndExecutePacket.prototype.parseExecute = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); - - this.responseCode = parser._parseInt(); - if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } - } else { - this.totalTupleCount = this.responseCode; - this.cache_reusable = parser._parseByte(); - this.resultCount = parser._parseInt(); - // Read result info - for (i = 0; i < this.resultCount; i++) { - var resultInfo = new ResultInfo(); - resultInfo.StmtType = parser._parseByte(); // Statement type - resultInfo.ResultCount = parser._parseInt(); // Result count - resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID - resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds - resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds - this.resultInfos[i] = resultInfo; - } - - if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { - var fetchCode = parser._parseInt(); // Fetch code - this.tupleCount = parser._parseInt(); // Tuple count - var columnNames = new Array(this.columnCount); - var columnDataTypes = new Array(this.columnCount); - var columnValues = new Array(this.tupleCount); - for (var i = 0; i < this.columnCount; i++) { - columnNames[i] = this.infoArray[i].Name; - columnDataTypes[i] = CAS.getCUBRIDDataTypeName(this.infoArray[i].ColumnType); - } - - columnValues = this._getData(parser, this.tupleCount); - - this.resultSet = JSON.stringify( - { - ColumnNames : columnNames, - ColumnDataTypes : columnDataTypes, - RowsCount : this.totalTupleCount, - ColumnValues : columnValues - } - ); - } - } - - return this; -}; - -/** - * Get records data from stream - * @param parser - * @param tupleCount - */ -PrepareAndExecutePacket.prototype._getData = function (parser, tupleCount) { - var columnValues = new Array(tupleCount); - for (var i = 0; i < tupleCount; i++) { - columnValues[i] = new Array(this.columnCount); - var index = parser._parseInt(); - var Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); - for (var j = 0; j < this.columnCount; j++) { - var size = parser._parseInt(); - var val; - if (size <= 0) { - val = null; - } else { - var type = CAS.CUBRIDDataType.CCI_U_TYPE_NULL; - - if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE || - this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP || - this.infoArray[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { - type = parser._parseByte(); - size--; - } else { - type = this.infoArray[j].ColumnType; - } - - val = this._readValue(j, type, size, parser); - columnValues[i][j] = val; - } - } - } - this.currentTupleCount += tupleCount; - - return columnValues; -}; - -/** - * Read column value from stream - * @param index - * @param type - * @param size - * @param parser - */ -PrepareAndExecutePacket.prototype._readValue = function (index, type, size, parser) { - switch (type) { - case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: - return parser._parseNullTerminatedString(size); - - case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: - return parser._parseShort(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_INT: - return parser._parseInt(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: - return parser._parseLong(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: - return parser._parseFloat(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: - case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: - return parser._parseDouble(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: - return parser._parseNumeric(size); - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: - return parser._parseDate(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: - return parser._parseTime(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: - return parser._parseDateTime(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: - return parser._parseTimeStamp(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: - return parser._parseObject(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: - return parser._parseBytes(size); - - case CAS.CUBRIDDataType.CCI_U_TYPE_SET: - case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: - case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: - return parser._parseSequence(); - - case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: - return parser._parseBlob(size); - - case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: - return parser._parseClob(size); - - case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: - return parser._parseResultSet(); - - default: - return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); - } -}; - -/** - * Write parameter value to stream - * @param value - * @param type - * @param writer - */ -PrepareAndExecutePacket.prototype._writeParamValue = function (writer) { - for (var i = 0, l = this.paramValues.length; i < l; ++i) { - var value = this.paramValues[i], - paramType = CAS.getCUBRIDDataTypeNumber(this.paramTypes[i]); - - writer._writeInt(DATA_TYPES.BYTE_SIZEOF); - writer._writeByte(paramType); - - switch (paramType) { - case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: - writer._writeNullTerminatedString(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: - writer._writeInt(DATA_TYPES.SHORT_SIZEOF); - writer._writeShort(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_INT: - writer._writeInt(DATA_TYPES.INT_SIZEOF); - writer._writeInt(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: - writer._writeInt(DATA_TYPES.LONG_SIZEOF); - writer._writeLong(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: - writer._writeInt(DATA_TYPES.FLOAT_SIZEOF); - writer._writeFloat(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: - case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: - writer._writeInt(DATA_TYPES.DOUBLE_SIZEOF); - writer._writeDouble(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: - writer._writeNumeric(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: - writer._writeInt(DATA_TYPES.DATE_SIZEOF); - writer._writeDate(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate()); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: - writer._writeInt(DATA_TYPES.TIME_SIZEOF); - writer._writeTime(value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds()); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: - writer._writeInt(DATA_TYPES.DATETIME_SIZEOF); - writer._writeDateTime(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), - value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: - writer._writeInt(DATA_TYPES.TIMESTAMP_SIZEOF); - writer._writeTimestamp(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), - value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds()); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: - writer._writeInt(0); - writer._writeObject(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: - writer._writeInt(value.length); - writer._writeBytes(value.length, value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_SET: - case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: - case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: - writer._writeInt(0); - writer._writeSequence(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: - writer._writeBlob(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: - writer._writeClob(value); - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: - writer._writeInt(DATA_TYPES.RESULTSET_SIZEOF); - writer._writeResultSet(value); - break; - - default: - return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); - } - } -}; - -PrepareAndExecutePacket.prototype.getPrepareBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + Buffer.byteLength(this.sql) + 1 + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF; - - return bufferLength; -}; - -PrepareAndExecutePacket.prototype.getExecuteBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + - DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + - this._getParamValuesBufferLength(); - - return bufferLength; -}; - -PrepareAndExecutePacket.prototype._getParamValuesBufferLength = function () { - var paramValuesBufferLength = 0; - - if (this.paramValues) { - for (var i = this.paramValues.length - 1; i > -1; --i) { - var value = this.paramValues[i], - paramType = CAS.getCUBRIDDataTypeNumber(this.paramTypes[i]); - - // First, determine the size of the param type. - paramValuesBufferLength += - // The length of the data type. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.BYTE_SIZEOF; - - switch (paramType) { - case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: - case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The bytes length of the value. - Buffer.byteLength(value) + - // null character size. - DATA_TYPES.BYTE_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.SHORT_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_INT: - paramValuesBufferLength += - // The length of this part + - // the size of the value. - DATA_TYPES.INT_SIZEOF * 2; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.LONG_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.FLOAT_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: - case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.DOUBLE_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The bytes length of the numeric value. - // See `_writeNumeric`. - Buffer.byteLength(value.toString(10)) + - // null character size. - DATA_TYPES.BYTE_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the data type value. - DATA_TYPES.DATE_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.TIME_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.DATETIME_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - DATA_TYPES.TIMESTAMP_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: - case CAS.CUBRIDDataType.CCI_U_TYPE_SET: - case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: - case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: - case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - // `_writeObject`, `_writeSequence`, `_writeResultSet` - // are not supported yet but still we send the - // `0` byte. - DATA_TYPES.BYTE_SIZEOF; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: - case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: - paramValuesBufferLength += - // The length of this part. - DATA_TYPES.INT_SIZEOF + - // The size of the value. - value.length; - break; - - case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: - case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: - paramValuesBufferLength += - // The length of this part + - // the type of the value. - DATA_TYPES.INT_SIZEOF * 2 + - // The length of the type of this CLOB. - DATA_TYPES.LONG_SIZEOF + - // The actual length. - DATA_TYPES.INT_SIZEOF + - // The length of the value in bytes. - Buffer.byteLength(value.fileLocator) + - // The null character size. - DATA_TYPES.BYTE_SIZEOF; - break; - - default: - return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); - } - - } - } - - return paramValuesBufferLength; -}; diff --git a/src/packets/PrepareExecutePacket.js b/src/packets/PrepareExecutePacket.js new file mode 100644 index 0000000..0b4166c --- /dev/null +++ b/src/packets/PrepareExecutePacket.js @@ -0,0 +1,620 @@ +'use strict'; + +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); +const ErrorMessages = require('../constants/ErrorMessages'); +const ColumnMetaData = require('../resultset/ColumnMetaData'); +const ResultInfo = require('../resultset/ResultInfo'); + +/** + * Constructor + * @param options + * @constructor + */ +function PrepareExecutePacket(options) { + this.options = options; +} + +/** + * Write prepare data + * @param writer + */ +PrepareExecutePacket.prototype.writePrepare = function (writer) { + const options = this.options; + + writer._writeInt(this.getPrepareBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + writer._writeBytes(options.casInfo); + + writer._writeByte(CAS.CASFunctionCode.CAS_FC_PREPARE); + writer._writeNullTerminatedString(options.sql); + writer.addByte(CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); + writer.addByte(options.autoCommit ? 1 : 0); + + return writer; +}; + +/** + * Write execute data + * @param writer + */ +PrepareExecutePacket.prototype.writeExecute = function (writer) { + const bufferLength = this.getExecuteBufferLength(); + const options = this.options; + + writer._writeInt(bufferLength - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + writer._writeBytes(options.casInfo); + writer._writeByte(CAS.CASFunctionCode.CAS_FC_EXECUTE); + + writer.addInt(this.queryHandle); + writer.addByte(CAS.CCIExecutionOption.CCI_EXEC_NORMAL); // Execute flag + writer.addInt(0); // Max col size; + writer.addInt(0); // Max row size; + writer.addNull(); // NULL + writer._writeInt(DATA_TYPES.BYTE_SIZEOF); + + // FetchFlag; + if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { + writer._writeByte(1); + } else { + writer._writeByte(0); + } + + writer.addByte(options.autoCommit ? 1 : 0); // Autocommit mode + writer.addByte(1); // Forward only cursor + writer.addCacheTime(); // Write cache time + + writer.addInt(0); // Query timeout + + if (options.paramValues) { + this._writeParamValue(writer); + } + + return writer; +}; + +/** + * Read prepare data + * @param parser + */ +PrepareExecutePacket.prototype.parsePrepare = function (parser) { + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + + this.responseCode = parser._parseInt(); + + if (this.responseCode < 0) { + return parser.readError(responseLength); + } + + this.queryHandle = this.responseCode; // Query handle + this.resultCacheLifetime = parser._parseInt(); // Cache lifetime + this.statementType = parser._parseByte(); // Statement type + this.bindCount = parser._parseInt(); // Bind count + this.isUpdatable = parser._parseByte() === 1; // Updatable? + this.columnCount = parser._parseInt(); // Column count + this.infoArray = []; + + for (let i = 0; i < this.columnCount; ++i) { + let info = new ColumnMetaData(); + + info.ColumnType = parser._parseByte(); // Column type + info.scale = parser._parseShort(); // Scale + info.precision = parser._parseInt(); // Precision + + let len = parser._parseInt(); + + info.Name = parser._parseNullTerminatedString(len); // Column name + len = parser._parseInt(); + info.RealName = parser._parseNullTerminatedString(len); // Column real name + len = parser._parseInt(); + info.TableName = parser._parseNullTerminatedString(len); // Table name + info.IsNullable = (parser._parseByte() === 1); // Nullable? + len = parser._parseInt(); + info.DafaultValue = parser._parseNullTerminatedString(len); // Default value + info.IsAutoIncrement = (parser._parseByte() === 1); // Auto-increment? + info.IsUniqueKey = (parser._parseByte() === 1); // Unique key? + info.IsPrimaryKey = (parser._parseByte() === 1); // Primary key? + info.IsReverseIndex = (parser._parseByte() === 1); // Reserved key index + info.IsReverseUnique = (parser._parseByte() === 1); // Reverse unique? + info.IsForeignKey = (parser._parseByte() === 1); // Foreign key? + info.IsShared = (parser._parseByte() === 1); // Shared? + + this.infoArray.push(info); + } +}; + +/** + * Read execute data + * @param parser + */ +PrepareExecutePacket.prototype.parseExecute = function (parser) { + const options = this.options; + const responseLength = parser._parseInt(); + + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + + this.responseCode = parser._parseInt(); + + if (this.responseCode < 0) { + return parser.readError(responseLength); + } + + this.totalTupleCount = this.responseCode; + // Cache reusable. + parser._parseByte(); + // Number of results executed. + this.resultCount = parser._parseInt(); + this.resultInfos = []; + + // Read result info. + for (let i = 0; i < this.resultCount; i++) { + let resultInfo = new ResultInfo(); + + resultInfo.StmtType = parser._parseByte(); // Statement type + resultInfo.ResultCount = parser._parseInt(); // Result count + + resultInfo.Oid = parser._parseBytes(DATA_TYPES.OID_SIZEOF); // OID + + resultInfo.CacheTimeSec = parser._parseInt(); // Cache time seconds + resultInfo.CacheTimeUsec = parser._parseInt(); // Cache time milliseconds + + this.resultInfos.push(resultInfo); + } + + if (options.protocolVersion > 1) { + // include_column_info + if (parser._parseByte() === 1) { + // TODO: this part of the code should process a specific case that is not used in node-cubrid. + } + } + + if (options.protocolVersion > 4) { + this.shardId = parser._parseInt(); + } + + if (this.statementType === CAS.CUBRIDStatementType.CUBRID_STMT_SELECT) { + // Fetch code. + parser._parseInt(); + this.tupleCount = parser._parseInt(); // Tuple count + this.currentTupleCount = 0; // Current number of returned tuples + + let columnNames = new Array(this.columnCount); + let columnDataTypes = new Array(this.columnCount); + + for (let i = 0; i < this.columnCount; i++) { + columnNames[i] = this.infoArray[i].Name; + columnDataTypes[i] = CAS.getCUBRIDDataTypeName(this.infoArray[i].ColumnType); + } + + let columnValues = this.getValues(parser, this.tupleCount); + + this.resultSet = { + ColumnNames : columnNames, + ColumnDataTypes : columnDataTypes, + RowsCount : this.totalTupleCount, + ColumnValues : columnValues + }; + } +}; + +/** + * Get records data from stream + * @param parser + * @param tupleCount + */ +PrepareExecutePacket.prototype.getValues = function (parser, tupleCount) { + let columnValues = new Array(tupleCount); + const columns = this.infoArray; + const columnCount = this.columnCount; + const statementType = this.statementType; + + const CUBRID_STMT_CALL = CAS.CUBRIDStatementType.CUBRID_STMT_CALL; + const CUBRID_STMT_EVALUATE = CAS.CUBRIDStatementType.CUBRID_STMT_EVALUATE; + const CUBRID_STMT_CALL_SP = CAS.CUBRIDStatementType.CUBRID_STMT_CALL_SP; + + for (let i = 0; i < tupleCount; i++) { + // Index of the column. + parser._parseInt(); + // OID + parser._parseBytes(DATA_TYPES.OID_SIZEOF); + + let column = columnValues[i] = new Array(columnCount); + + for (let j = 0; j < columnCount; j++) { + let size = parser._parseInt(); + + if (size > 0) { + let type; + + if (statementType === CUBRID_STMT_CALL || + statementType === CUBRID_STMT_EVALUATE || + statementType === CUBRID_STMT_CALL_SP || + columns[j].ColumnType === CAS.CUBRIDDataType.CCI_U_TYPE_NULL) { + type = parser._parseByte(); + size--; + } else { + type = columns[j].ColumnType; + } + + column[j] = this._readValue(j, type, size, parser); + } else { + column[j] = null; + } + } + } + + this.currentTupleCount += tupleCount; + + return columnValues; +}; + +/** + * Read column value from stream + * @param index + * @param type + * @param size + * @param parser + */ +PrepareExecutePacket.prototype._readValue = function (index, type, size, parser) { + switch (type) { + case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_ENUM: + return parser._parseNullTerminatedString(size); + + case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: + return parser._parseShort(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_INT: + return parser._parseInt(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: + return parser._parseLong(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: + return parser._parseFloat(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: + case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: + return parser._parseDouble(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: + return parser._parseNumeric(size); + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: + return parser._parseDate(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: + return parser._parseTime(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: + return parser._parseDateTime(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: + return parser._parseTimeStamp(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: + return parser._parseObject(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: + return parser._parseBytes(size); + + case CAS.CUBRIDDataType.CCI_U_TYPE_SET: + case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: + case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: + return parser._parseSequence(); + + case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: + return parser.readBlob(size); + + case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: + return parser.readClob(size); + + case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: + return parser._parseResultSet(); + + default: + return new Error(`${type}: ${ErrorMessages.ERROR_INVALID_DATA_TYPE}`); + } +}; + +/** + * Write parameter value to stream + * @param value + * @param type + * @param writer + */ +PrepareExecutePacket.prototype._writeParamValue = function (writer) { + const options = this.options; + + for (let i = 0, l = options.paramValues.length; i < l; ++i) { + const value = options.paramValues[i]; + const paramType = CAS.getCUBRIDDataTypeNumber(options.paramTypes[i]); + + writer.addByte(paramType); + + switch (paramType) { + case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_ENUM: + writer._writeNullTerminatedString(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: + writer.addShort(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_INT: + writer.addInt(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: + writer.addLong(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: + writer.addFloat(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: + case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: + writer.addDouble(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: + writer._writeNumeric(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: + writer.addDate(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate()); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: + writer.addTime(value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds()); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: + writer.addDateTime(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), + value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: + writer.addTimestamp(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate(), + value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds()); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: + writer._writeInt(0); + writer._writeObject(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: + writer.addBytes(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_SET: + case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: + case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: + writer._writeInt(0); + writer._writeSequence(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: + writer._writeBlob(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: + writer._writeClob(value); + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: + writer._writeInt(DATA_TYPES.RESULTSET_SIZEOF); + writer._writeResultSet(value); + break; + + default: + return new Error(`${paramType}: ${ErrorMessages.ERROR_INVALID_DATA_TYPE}`); + } + } +}; + +PrepareExecutePacket.prototype.getPrepareBufferLength = function () { + const bufferLength = + DATA_TYPES.DATA_LENGTH_SIZEOF + + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + Buffer.byteLength(this.options.sql) + 1 + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF; + + return bufferLength; +}; + +PrepareExecutePacket.prototype.getExecuteBufferLength = function () { + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.BYTE_SIZEOF + + this._getParamValuesBufferLength(); + + return bufferLength; +}; + +PrepareExecutePacket.prototype._getParamValuesBufferLength = function () { + const options = this.options; + + let paramValuesBufferLength = 0; + + if (options.paramValues) { + for (let i = options.paramValues.length - 1; i > -1; --i) { + const value = options.paramValues[i]; + const paramType = CAS.getCUBRIDDataTypeNumber(options.paramTypes[i]); + + // First, determine the size of the param type. + paramValuesBufferLength += + // The length of the data type. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.BYTE_SIZEOF; + + switch (paramType) { + case CAS.CUBRIDDataType.CCI_U_TYPE_CHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_NCHAR: + case CAS.CUBRIDDataType.CCI_U_TYPE_STRING: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARNCHAR: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The bytes length of the value. + Buffer.byteLength(value) + + // null character size. + DATA_TYPES.BYTE_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_SHORT: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.SHORT_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_INT: + paramValuesBufferLength += + // The length of this part + + // the size of the value. + DATA_TYPES.INT_SIZEOF * 2; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIGINT: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.LONG_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_FLOAT: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.FLOAT_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DOUBLE: + case CAS.CUBRIDDataType.CCI_U_TYPE_MONETARY: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.DOUBLE_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_NUMERIC: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The bytes length of the numeric value. + // See `_writeNumeric`. + Buffer.byteLength(value.toString(10)) + + // null character size. + DATA_TYPES.BYTE_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATE: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the data type value. + DATA_TYPES.DATE_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIME: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.TIME_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_DATETIME: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.DATETIME_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_TIMESTAMP: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + DATA_TYPES.TIMESTAMP_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_OBJECT: + case CAS.CUBRIDDataType.CCI_U_TYPE_SET: + case CAS.CUBRIDDataType.CCI_U_TYPE_MULTISET: + case CAS.CUBRIDDataType.CCI_U_TYPE_SEQUENCE: + case CAS.CUBRIDDataType.CCI_U_TYPE_RESULTSET: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + // `_writeObject`, `_writeSequence`, `_writeResultSet` + // are not supported yet but still we send the + // `0` byte. + DATA_TYPES.BYTE_SIZEOF; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BIT: + case CAS.CUBRIDDataType.CCI_U_TYPE_VARBIT: + paramValuesBufferLength += + // The length of this part. + DATA_TYPES.INT_SIZEOF + + // The size of the value. + value.length; + break; + + case CAS.CUBRIDDataType.CCI_U_TYPE_BLOB: + case CAS.CUBRIDDataType.CCI_U_TYPE_CLOB: + paramValuesBufferLength += + // The length of this part + + // the type of the value. + DATA_TYPES.INT_SIZEOF * 2 + + // The length of the type of this CLOB. + DATA_TYPES.LONG_SIZEOF + + // The actual length. + DATA_TYPES.INT_SIZEOF + + // The length of the value in bytes. + Buffer.byteLength(value.fileLocator) + + // The null character size. + DATA_TYPES.BYTE_SIZEOF; + break; + + default: + return new Error(ErrorMessages.ERROR_INVALID_DATA_TYPE); + } + + } + } + + return paramValuesBufferLength; +}; + +module.exports = PrepareExecutePacket; diff --git a/src/packets/RollbackPacket.js b/src/packets/RollbackPacket.js index 4adc30c..2e469a2 100644 --- a/src/packets/RollbackPacket.js +++ b/src/packets/RollbackPacket.js @@ -1,7 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); module.exports = RollbackPacket; @@ -14,11 +12,8 @@ function RollbackPacket(options) { options = options || {}; this.casInfo = options.casInfo; - this.dbVersion = options.dbVersion; - + this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -27,7 +22,7 @@ function RollbackPacket(options) { */ RollbackPacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_END_TRAN); writer._writeInt(DATA_TYPES.BYTE_SIZEOF); writer._writeByte(CAS.CCITransactionType.CCI_TRAN_ROLLBACK); // Rollback transaction @@ -40,19 +35,14 @@ RollbackPacket.prototype.write = function (writer) { * @param parser */ RollbackPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); - this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } + return parser.readError(responseLength); } - - return this; }; RollbackPacket.prototype.getBufferLength = function () { diff --git a/src/packets/SetAutoCommitModePacket.js b/src/packets/SetAutoCommitModePacket.js index c69a1c2..02ccd2c 100644 --- a/src/packets/SetAutoCommitModePacket.js +++ b/src/packets/SetAutoCommitModePacket.js @@ -1,9 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); - -module.exports = SetAutoCommitModePacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -15,11 +11,8 @@ function SetAutoCommitModePacket(options) { this.casInfo = options.casInfo; this.autoCommitMode = options.autoCommitMode; - this.dbVersion = options.dbVersion; - + this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -28,7 +21,7 @@ function SetAutoCommitModePacket(options) { */ SetAutoCommitModePacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_SET_DB_PARAMETER); writer._writeInt(DATA_TYPES.INT_SIZEOF); writer._writeInt(CAS.CCIDbParam.CCI_PARAM_AUTO_COMMIT); // Parameter type auto-commit mode @@ -43,24 +36,21 @@ SetAutoCommitModePacket.prototype.write = function (writer) { * @param parser */ SetAutoCommitModePacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); - this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } + return parser.readError(responseLength); } - - return this; }; SetAutoCommitModePacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + DATA_TYPES.BYTE_SIZEOF + 2 * DATA_TYPES.INT_SIZEOF + 2 * DATA_TYPES.INT_SIZEOF; return bufferLength; }; + +module.exports = SetAutoCommitModePacket; diff --git a/src/packets/SetDbParameterPacket.js b/src/packets/SetDbParameterPacket.js index cad0c3d..a431a4d 100644 --- a/src/packets/SetDbParameterPacket.js +++ b/src/packets/SetDbParameterPacket.js @@ -1,9 +1,5 @@ -var DATA_TYPES = require('../constants/DataTypes'), - Helpers = require('../utils/Helpers'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'); - -module.exports = SetDbParameterPacket; +const CAS = require('../constants/CASConstants'); +const DATA_TYPES = require('../constants/DataTypes'); /** * Constructor @@ -11,16 +7,12 @@ module.exports = SetDbParameterPacket; * @constructor */ function SetDbParameterPacket(options) { - options = options || {}; - this.parameter = options.parameter; this.value = options.value; this.casInfo = options.casInfo; this.responseCode = 0; - this.errorCode = 0; - this.errorMsg = ''; } /** @@ -29,7 +21,7 @@ function SetDbParameterPacket(options) { */ SetDbParameterPacket.prototype.write = function (writer) { writer._writeInt(this.getBufferLength() - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); - writer._writeBytes(DATA_TYPES.CAS_INFO_SIZE, this.casInfo); + writer._writeBytes(this.casInfo); writer._writeByte(CAS.CASFunctionCode.CAS_FC_SET_DB_PARAMETER); writer._writeInt(DATA_TYPES.INT_SIZEOF); writer._writeInt(this.parameter); // Parameter type @@ -44,25 +36,23 @@ SetDbParameterPacket.prototype.write = function (writer) { * @param parser */ SetDbParameterPacket.prototype.parse = function (parser) { - var responseLength = parser._parseInt(); + const responseLength = parser._parseInt(); + this.casInfo = parser._parseBytes(DATA_TYPES.CAS_INFO_SIZE); this.responseCode = parser._parseInt(); + if (this.responseCode < 0) { - this.errorCode = parser._parseInt(); - this.errorMsg = parser._parseNullTerminatedString(responseLength - 2 * DATA_TYPES.INT_SIZEOF); - if (this.errorMsg.length === 0) { - this.errorMsg = Helpers._resolveErrorCode(this.errorCode); - } + return parser.readError(responseLength); } - - return this; }; SetDbParameterPacket.prototype.getBufferLength = function () { - var bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + + const bufferLength = DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE + DATA_TYPES.BYTE_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF + DATA_TYPES.INT_SIZEOF; return bufferLength; }; + +module.exports = SetDbParameterPacket; diff --git a/src/query/Query.js b/src/query/Query.js index 7d4168a..78270d1 100644 --- a/src/query/Query.js +++ b/src/query/Query.js @@ -1,16 +1,16 @@ -var Helpers = require('../utils/Helpers'); +const Helpers = require('../utils/Helpers'); module.exports = Query; -function noOp() {} - function Query(sql, params, cb) { - if (!params || typeof params === 'function') { - this.sql = sql; - cb = cb || params; - } else { - this.sql = Helpers._sqlFormat(sql, params); - } + if (typeof sql === 'function') { + cb = sql; + } else if (typeof params === 'function' || Array.isArray(sql)) { + this.sql = sql; + cb = params; + } else if (typeof sql === 'string') { + this.sql = Helpers._sqlFormat(sql, params); + } - this.callback = cb || noOp; + this.callback = cb; } diff --git a/src/query/Queue.js b/src/query/Queue.js index cac5ef4..94db51d 100644 --- a/src/query/Queue.js +++ b/src/query/Queue.js @@ -19,15 +19,29 @@ Queue.prototype.process = function () { // Get the front item. this.currentItem = this.items.shift(); - var self = this; - - // Every item is a function which calls the callback - // we pass when done. - this.currentItem(function () { - self.currentItem = null; - - self.process(); - }); + /* + * From http://stackoverflow.com/a/15349865/556678. + * Use `setImmediate` if you want to queue the function + * behind whatever I/O event callbacks that are already + * in the event queue. Use `process.nextTick` to effectively + * queue the function at the head of the event queue so + * that it executes immediately after the current function + * completes. + * So in a case where you're trying to break up a long + * running, CPU-bound job using recursion, you would now + * want to use `setImmediate` rather than `process.nextTick` + * to queue the next iteration as otherwise any I/O event + * callbacks wouldn't get the chance to run between iterations. + * */ + setImmediate(() => { + // Every item is a function which calls the callback + // we pass when done. + this.currentItem(() => { + this.currentItem = null; + + this.process(); + }); + }) } }; diff --git a/src/resultset/ColumnMetaData.js b/src/resultset/ColumnMetaData.js index 3d43268..af2f740 100644 --- a/src/resultset/ColumnMetaData.js +++ b/src/resultset/ColumnMetaData.js @@ -1,6 +1,4 @@ -var CAS = require('../constants/CASConstants'); - -module.exports = ColumnMetaData; +const CAS = require('../constants/CASConstants'); /** * Column meta data @@ -26,3 +24,4 @@ function ColumnMetaData() { this.IsShared = false; } +module.exports = ColumnMetaData; diff --git a/src/resultset/Result2Array.js b/src/resultset/Result2Array.js deleted file mode 100644 index 6451cf3..0000000 --- a/src/resultset/Result2Array.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Returns an array with the query results - * @param jsonData - * @return {*} - * @constructor - */ -exports.RowsArray = function (jsonData) { - if (typeof jsonData === 'undefined' || jsonData === null || jsonData.length === 0) { - return new Array(0); - } - - try { - var fullArray = JSON.parse(jsonData); - var arr = []; - - var rowsCount = fullArray.ColumnValues.length; - if (rowsCount <= 0) { - return new Array(0); - } else { - for (var i = 0; i < rowsCount; i++) { - arr[i] = fullArray.ColumnValues[i]; - } - } - return arr; - } - catch (ignored) { - return new Array(0); - } -}; - -/** - * Returns an array with the query results column names - * @param jsonData - * @return {*} - * @constructor - */ -exports.ColumnNamesArray = function (jsonData) { - if (typeof jsonData === 'undefined' || jsonData === null || jsonData.length === 0) { - return new Array(0); - } - - var fullArray = ''; - - try { - fullArray = JSON.parse(jsonData); - - var rowsCount = fullArray.ColumnNames.length; - if (rowsCount <= 0) { - return new Array(0); - } else { - return fullArray.ColumnNames; - } - } - catch (ignored) { - return new Array(0); - } -}; - -/** - * Returns an array with the query results columns data types - * @param jsonData - * @return {*} - * @constructor - */ -exports.ColumnTypesArray = function (jsonData) { - if (typeof jsonData === 'undefined' || jsonData === null || jsonData.length === 0) { - return new Array(0); - } - - var fullArray = ''; - - try { - fullArray = JSON.parse(jsonData); - - var rowsCount = fullArray.ColumnDataTypes.length; - if (rowsCount <= 0) { - return new Array(0); - } else { - return fullArray.ColumnDataTypes; - } - } - catch (ignored) { - return new Array(0); - } -}; - -/** - * Returns the query results rows count - * Please note that this is the total query rows count and not the current "batch of data" rows count. - * @param jsonData - * @return {*} - * @constructor - */ -exports.TotalRowsCount = function (jsonData) { - if (typeof jsonData === 'undefined' || jsonData === null || jsonData.length === 0) { - return 0; - } - - var fullArray = ''; - - try { - fullArray = JSON.parse(jsonData); - - var rowsCount = fullArray.RowsCount; - if (rowsCount <= 0) { - return 0; - } else { - return fullArray.RowsCount; - } - } - catch (ignored) { - return 0; - } -}; - -/** - * Returns an array of objects where column names are keys - * @param jsonData - * @return {*} - * @constructor - */ -exports.ObjectsArray = function(jsonData) { - if (typeof jsonData === 'undefined' || jsonData === null || jsonData.length === 0) { - return new Array(0); - } - - try { - var fullArray = JSON.parse(jsonData); - var arr = []; - - var rowsCount = fullArray.ColumnValues.length; - var colCount = fullArray.ColumnNames.length; - if (rowsCount <= 0) { - return new Array(0); - } else { - for (var i = 0; i < rowsCount; i++) { - arr[i] = {}; - for(var j = 0; j < colCount; j++) { - arr[i][fullArray.ColumnNames[j]] = fullArray.ColumnValues[i][j]; - } - } - } - return arr; - } - catch (ignored) { - return new Array(0); - } -}; diff --git a/src/utils/ActionQueue.js b/src/utils/ActionQueue.js deleted file mode 100644 index 3f16a4a..0000000 --- a/src/utils/ActionQueue.js +++ /dev/null @@ -1,83 +0,0 @@ -/* - Based on code originating from the 'async' module - author license included here below: - - Copyright (c) 2010 Caolan McMahon - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - */ - -exports.enqueue = function _enqueue(tasks, callback) { - callback = callback || function () { - }; - if (!tasks.length) { - return callback(); - } - - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () { - }; - } else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } else { - args.push(callback); - } - process.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(iterator(tasks))(); -}; - -exports.while = function _while(test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - _while(test, iterator, callback); - }); - } else { - callback(); - } -}; - -function iterator(tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1) : null; - }; - return fn; - }; - return makeCallback(0); -} - diff --git a/src/utils/Cache.js b/src/utils/Cache.js deleted file mode 100644 index 7a95180..0000000 --- a/src/utils/Cache.js +++ /dev/null @@ -1,58 +0,0 @@ -var Helpers = require('./Helpers'); - -/** - * Code adapted from MicroCache library: - * https://github.com/jeromeetienne/microcache.js - * License: https://github.com/jeromeetienne/MicroCache.js/blob/master/MIT-LICENSE.txt - */ - -var Cache = function (expireAfterSeconds) { - var _values = {}; - var createdTime = (new Date()).getTime(); - - var _expire = function () { - if (typeof expireAfterSeconds !== 'undefined' && expireAfterSeconds > 0) { - if ((new Date()).getTime() - createdTime >= expireAfterSeconds * 1000) { - _values = {}; - createdTime = (new Date()).getTime(); - } - } - }; - - return { - get : function (key) { - _expire(); - return _values[key]; - }, - _set : function (key, value) { - _expire(); - _values[key] = value; - }, - contains : function (key) { - _expire(); - return key in _values; - }, - /** - * Get a value from cache; if the value is not found, then add it to the cache - */ - getSet : function (key, value) { - _expire(); - if (!this.contains(key)) { - this._set(key, value); - } - return this.get(key); - }, - /** - * Clear all values in cache - */ - clear : function () { - _values = {}; - } - }; -}; - -if (typeof module !== 'undefined' && ('exports' in module)) { - module.exports = Cache; -} - - diff --git a/src/utils/Helpers.js b/src/utils/Helpers.js index b507d1e..00d5dbd 100644 --- a/src/utils/Helpers.js +++ b/src/utils/Helpers.js @@ -1,58 +1,8 @@ -var DEBUG_ENABLED = require('../config').DEBUG_ENABLED, - DATA_TYPES = require('../constants/DataTypes'), - ErrorMessages = require('../constants/ErrorMessages'), - CAS = require('../constants/CASConstants'), -// Default delimiter to wrap character strings in SQL queries. - DEFAULT_DELIMITER = "'"; +'use strict'; -/** - * Emit event only if there are registered listeners for the event - * @param obj - * @param successEvent - * @param arg1 - * @param arg2 - * @param arg3 - * @private - */ -function _emitSafeEvent(obj, successEvent, arg1, arg2, arg3) { - if (obj.listeners(successEvent).length > 0) { - if (typeof arg1 !== 'undefined' && typeof arg2 !== 'undefined' && typeof arg3 !== 'undefined') { - obj.emit(successEvent, arg1, arg2, arg3); - } else { - if (typeof arg1 !== 'undefined' && typeof arg2 !== 'undefined') { - obj.emit(successEvent, arg1, arg2); - } else { - if (typeof arg1 !== 'undefined') { - obj.emit(successEvent, arg1); - } else { - obj.emit(successEvent); - } - } - } - } -} - -/** - * Emit ERROR event or success event - * @param obj - * @param err - * @param errorEvent - * @param successEvent - * @param arg1 - * @param arg2 - * @param arg3 - * @private - */ -exports._emitEvent = function (obj, err, errorEvent, successEvent, arg1, arg2, arg3) { - if (typeof err !== 'undefined' && err !== null) { - // Emit the event only if somebody is listening. - if (obj.listeners(errorEvent).length > 0) { - obj.emit(errorEvent, err); - } - } else { - _emitSafeEvent(obj, successEvent, arg1, arg2, arg3); - } -}; +const DATA_TYPES = require('../constants/DataTypes'); +// Default delimiter to wrap character strings in SQL queries. +const DEFAULT_DELIMITER = "'"; /** * Validate if the value is an accepted "boolean"-compatible input @@ -97,19 +47,6 @@ exports._validateInputPositive = function (val) { return true; }; -/** - * Validate if the value is a strict positive "number" input - * @param val - * @return {Boolean} - */ -exports._validateInputStrictPositive = function (val) { - if (typeof val === 'undefined' || val === null || !(typeof val === 'number' && val > 0)) { - return false; - } - - return true; -}; - /** * Validate if the value is an accepted function input string * @param str @@ -146,12 +83,12 @@ exports._validateInputSQLString = function (sql) { */ Number.prototype.formatAsMoney = function (decimals, decimal_sep, thousands_sep) { var n = this, - c = isNaN(decimals) ? 2 : Math.abs(decimals), // If decimal is zero we must take it, it means user does not want to show any decimal - d = decimal_sep || '.', // If no decimal separator is passed we use the dot as default decimal separator (we MUST use a decimal separator) - t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, // If you don't want to use a thousands separator you can pass empty string as thousands_sep value - sign = (n < 0) ? '-' : '', - i = parseInt(n = Math.abs(n).toFixed(c)) + '', - j; + c = isNaN(decimals) ? 2 : Math.abs(decimals), // If decimal is zero we must take it, it means user does not want to show any decimal + d = decimal_sep || '.', // If no decimal separator is passed we use the dot as default decimal separator (we MUST use a decimal separator) + t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, // If you don't want to use a thousands separator you can pass empty string as thousands_sep value + sign = (n < 0) ? '-' : '', + i = parseInt(n = Math.abs(n).toFixed(c)) + '', + j; j = ((j = i.length) > 3) ? j % 3 : 0; @@ -165,46 +102,48 @@ Number.prototype.formatAsMoney = function (decimals, decimal_sep, thousands_sep) * @private */ var _escapeString = function (val, delimiter) { - val = val.replace(/[\0\n\r\b\t\\'"\x1a]/g, function (s) { - switch (s) { - case "\0": - return "\\0"; - case "\n": - return "\\n"; - case "\r": - return "\\r"; - case "\b": - return "\\b"; - case "\t": - return "\\t"; - case "\x1a": - return "\\Z"; - case "'": - // If the string includes a single quote and we are wrapping - // the string with single quotes, then we need to escape these single quotes. - if (!delimiter || s == delimiter) { - return "''"; - } - - // Otherwise, no need to escape single quotes if the string is - // wrapped by double quotes. - return s; - case '"': - // If the string includes a double quote and we are wrapping - // the string with double quotes, then we need to escape these double quotes. - if (!delimiter || s == delimiter) { - return '""'; - } - - // Otherwise, no need to escape double quotes if the string is - // wrapped by single quotes. - return s; - default: - return "\\" + s; - } - }); - - return val; + /* eslint-disable no-control-regex */ + val = val.replace(/[\0\n\r\b\t\\'"\x1a]/g, function (s) { + switch (s) { + case "\0": + return "\\0"; + case "\n": + return "\\n"; + case "\r": + return "\\r"; + case "\b": + return "\\b"; + case "\t": + return "\\t"; + case "\x1a": + return "\\Z"; + case "'": + // If the string includes a single quote and we are wrapping + // the string with single quotes, then we need to escape these single quotes. + if (!delimiter || s == delimiter) { + return "''"; + } + + // Otherwise, no need to escape single quotes if the string is + // wrapped by double quotes. + return s; + case '"': + // If the string includes a double quote and we are wrapping + // the string with double quotes, then we need to escape these double quotes. + if (!delimiter || s == delimiter) { + return '""'; + } + + // Otherwise, no need to escape double quotes if the string is + // wrapped by single quotes. + return s; + default: + return "\\" + s; + } + }); + /* eslint-enable no-control-regex */ + + return val; }; exports._escapeString = _escapeString; @@ -218,130 +157,67 @@ exports._escapeString = _escapeString; * @private */ exports._sqlFormat = function (sql, arrValues, arrDelimiters) { - if (!Array.isArray(arrValues)) { + if (!Array.isArray(arrValues)) { arrValues = [arrValues]; - } + } + + if (!Array.isArray(arrDelimiters)) { + arrDelimiters = [arrDelimiters]; + } - if (!Array.isArray(arrDelimiters)) { - arrDelimiters = [arrDelimiters]; - } + const valCount = arrValues.length; + const delimitersCount = arrDelimiters.length; - var i = -1, - valCount = arrValues.length, - delimitersCount = arrDelimiters.length; + let i = -1; - return sql.replace(/\?/g, function (match) { + return sql.replace(/\?/g, function (match) { if (++i == valCount) { return match; } - // Get the value for the current placeholder. - // We iterate via `i` instead of shifting from the front of the - // array because we do not want to alter the original array - // received from the application. The application may - // choose to reuse it in the loop. - var val = arrValues[i], - // And its delimiter. If not defined, use single quotes. - delimiter = (i >= delimitersCount ? DEFAULT_DELIMITER : arrDelimiters[i]); - - if (val === undefined || val === null) { - return 'NULL'; - } - - // Send numbers as real numbers. Numbers wrapped in strings - // are not considered as numbers. They are sent as strings. - if (typeof val === 'number') { - return val; - } - - // Delimiters must be specified as strings. - if (typeof delimiter !== 'string') { - delimiter = DEFAULT_DELIMITER; - } - - // If the value is of Date type, convert it into - // CUBRID compatible DATETIME format strings. - if (val instanceof Date) { - // CUBRID 8.4.1+ supports many formats of DATETIME value. - // Refer to http://www.cubrid.org/manual/841/en/DATETIME - // for more information. - // In the communication between node-cubrid and CUBRID - // Broker we choose the - // `'mm/dd[/yyyy] hh:mi[:ss[.ff]] [am|pm]'` format. - - return delimiter + - // Month value in JavaScript is 0 based, i.e. 0-11, - // but CUBRID is 1-12. Also CUBRID doesn't care if - // dates are zero-padded or not. - (val.getMonth() + 1) + '/' + val.getDate() + '/' + val.getFullYear() + - ' ' + val.getHours() + ':' + val.getMinutes() + ':' + val.getSeconds() + - '.' + val.getMilliseconds() + delimiter; + // Get the value for the current placeholder. + // We iterate via `i` instead of shifting from the front of the + // array because we do not want to alter the original array + // received from the application. The application may + // choose to reuse it in the loop. + const val = arrValues[i]; + // And its delimiter. If not defined, use single quotes. + let delimiter = (i >= delimitersCount ? DEFAULT_DELIMITER : arrDelimiters[i]); + + if (val === undefined || val === null) { + return 'NULL'; } - // Otherwise, safely escape the string. - return delimiter + _escapeString(val, delimiter) + delimiter; - }); -}; - -/** - * Verifies if a string starts with the specified value - */ -if (typeof String.prototype.startsWith !== 'function') { - String.prototype.startsWith = function (str) { - return this.indexOf(str) === 0; - }; -} - -/** - * Appends two buffers data into a new buffer - * @param buffer - * @param value - * @return {Buffer} - * @private - */ -exports._combineData = function (buffer, value) { - var newBuffer = new Buffer(buffer.length + value.length); - - buffer.copy(newBuffer, 0); - if (Array.isArray(value)) { - for (var i = 0; i < value.length; i++) { - if (typeof value[i] === 'string') { - newBuffer[buffer.length + i] = value[i].charCodeAt(0); - } else { - newBuffer[buffer.length + i] = value[i]; - } - } - } else { - if (typeof value === 'Buffer') { - value.copy(newBuffer, buffer.length); - } else { - new Buffer(value).copy(newBuffer, buffer.length); + // Send numbers as real numbers. Numbers wrapped in strings + // are not considered as numbers. They are sent as strings. + if (typeof val === 'number') { + return val; } - } - return newBuffer; -}; + // Delimiters must be specified as strings. + if (typeof delimiter !== 'string') { + delimiter = DEFAULT_DELIMITER; + } -/** - * Overrides the console output - * Logs data to the standard console output - * @param data - */ -exports.logInfo = function logInfo(data) { - if (DEBUG_ENABLED) { - console.warn(data); - } -}; + // If the value is of Date type, convert it into + // CUBRID compatible DATETIME format strings. + if (val instanceof Date) { + // CUBRID 8.4.1+ supports many formats of DATETIME value. + // Refer to http://www.cubrid.org/manual/841/en/DATETIME + // for more information. + // In the communication between node-cubrid and CUBRID + // Broker we choose the + // `'mm/dd[/yyyy] hh:mi[:ss[.ff]] [am|pm]'` format. + + // Month value in JavaScript is 0 based, i.e. 0-11, + // but CUBRID is 1-12. Also CUBRID doesn't care if + // dates are zero-padded or not. + return `${delimiter}${val.getUTCMonth() + 1}/${val.getUTCDate()}/${val.getUTCFullYear()} ${val.getUTCHours()}:${val.getUTCMinutes()}:${val.getUTCSeconds()}.${val.getUTCMilliseconds()}${delimiter}`; + } -/** - * Overrides the console output - * Logs data to the standard console output - * @param data - */ -exports.logError = function logError(data) { - if (DEBUG_ENABLED) { - console.error(data); - } + // Otherwise, safely escape the string. + return delimiter + _escapeString(val, delimiter) + delimiter; + }); }; /** @@ -359,15 +235,12 @@ exports._getExpectedResponseLength = function (buffer) { return value + DATA_TYPES.DATA_LENGTH_SIZEOF + DATA_TYPES.CAS_INFO_SIZE; }; -/** - * Try to resolve the error code to a CUBRID error message - * @param errorCode - * @return {*} - */ -exports._resolveErrorCode = function (errorCode) { - for (var i = 0; i < ErrorMessages.CASErrorMsgId.length; i++) { - if (errorCode === ErrorMessages.CASErrorMsgId[i][1]) { - return ErrorMessages.CASErrorMsgId[i][0]; - } +exports.getBufferFromString = function (str, encoding) { + if (typeof Buffer.from === 'function') { + // Node v6. + return Buffer.from(str, encoding); } + + // Older Node versions. + return new Buffer(str, encoding); }; diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b9937fdc82520e8f72851c4a22fca99002e0106d GIT binary patch literal 8196 zcmeHMU2GIZ9G~B{z^>h;+ZLqd!yHtgLX~R)1)^|mj}+39R_>rzK(6<(z`}O7-0oe$ zT2o@;lb|s%Q6Uv!VP8glIVL1&C_%WA6t3`(7!dB%ANK8{z8n)$xHI^N5BMX)KcT=Io#KZ* zbB3spK^Y(rATS*PzI`g$5Yt(n9hi82&kUJ{<3=J^5UQx0HG7UE%T#(`U}U`r7Lk1OV_~BCJNV$IFXU8%M)* ziXGxMBXqfp#y8_=+*YNibGy2`b|^h5t+q((=oxYi+j4g6d52_5t9A&Q?OEIE&FfsB z(rU74Gg~kTj5gDZ8xQMFU)DAYgOy-J*g1(~R7#UOFHOwDV zf7;3FR?e^v?jhhU*EnG4dASCcV7_QciM4# zhIET&b%_s8tJ_Ai>gT$)T#nDFvCN0YXp^XVNXU)Rh_8{@64uIMEXf9F-;A)6>{)h> zy~jRa=h=ts0{e`8!M<{)QyM_wLsKX-Mi4|ChCbVEPqG&@qy3mIt`jNpw z7&we0aB&KE@}wh!VcUSGa=j@e_W=FSv^9 zp~}!KG0RYy<-O(g`2BN9PGq@%XBT>A29|ej>)ft%-NY>ax|&ma-u&Aa)GuAJIPa<%M?*a7=C0r)`)XlJqsHz{6IN!86!n#piE)m5v zNi>_(RTAw3E#x(oyVW%^v0bYW+E!(qM7-8!3GIE#MwyteRSNC>%4UfOuFWnjUbv_s z+NLNP;~P{K)=g@a{I5y-DJ!ub*sny_YwSAaKtThRVHG0S{EA9z+}o>_!R$ zMA&vd7|wo9>o|=;4z}@NsqQq<226T1-wY~eFJaeZM=hb$LV_+pQAK|tlg8z ziti?pwHVJ^rfnUhzB0Kdn+L5MK%hd{*7NiK)|v1BZy;h|8XyoL@P9)9m9coNon}4L zJC&cc!;}Xo^Th4Og!Ejfm~;_9?eRYhsU9X%?i2Opn2^*%=|8^+`1{vq@cp0gqc!;c Kdvv^IioXCcl16d> literal 0 HcmV?d00001 diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml new file mode 100644 index 0000000..1eba859 --- /dev/null +++ b/test/.eslintrc.yml @@ -0,0 +1,8 @@ +extends: eslint:recommended +installedESLint: true +env: + es6: true + node: true + mocha: true +rules: + no-console: off diff --git a/test/CUBRID.createConnection.js b/test/CUBRID.createConnection.js new file mode 100644 index 0000000..8c306c7 --- /dev/null +++ b/test/CUBRID.createConnection.js @@ -0,0 +1,144 @@ +'use strict'; + +const expect = require('chai').expect; +const CUBRID = require('../'); +const testSetup = require('./testSetup'); + +describe('CUBRID', function () { + describe('createConnection', function () { + it('should succeed to create and close several client connections', function (done) { + const config = testSetup.config; + let closedCount = 0; + + // Create a connection by passing a list of parameters. + const client1 = new CUBRID.createCUBRIDConnection(config.hosts, config.port, config.user, config.password, config.database); + + // Create a connection by passing an object of parameters. + const client2 = new CUBRID.createCUBRIDConnection({ + host: config.hosts, + port: config.port, + user: config.user, + password: config.password, + database: config.database + }); + + // Now test the alias function. + // Create a connection by passing a list of parameters. + const client3 = new CUBRID.createConnection(config.hosts, config.port, config.user, config.password, config.database); + + // Create a connection by passing an object of parameters. + const client4 = new CUBRID.createConnection({ + hosts: config.hosts, + port: config.port, + user: config.user, + password: config.password, + database: config.database + }); + + // Default `host`, `port`, `user`, `password`, and `database` + // values should be used when not provided. + const client5 = new CUBRID.createConnection(); + + // Create a connection by passing an object of parameters. + const client6 = new CUBRID.createConnection({ + hosts: config.hosts, + port: config.port, + user: config.user, + password: config.password, + database: config.database, + connectionTimeout: 2000, + maxConnectionRetryCount: 2, + }); + + // Ensure the options reached the client. + expect(client6) + .to.have.property('connectionTimeout') + .to.equal(2000); + + expect(client6) + .to.have.property('maxConnectionRetryCount') + .to.equal(2); + + expect(client6) + .to.have.property('hosts') + .to.be.an('array') + .with.length(1); + + const clients = [client1, client2, client3, client4, client5, client6]; + + let promise = Promise.resolve(); + + clients.forEach(client => { + promise = promise.then(() => { + return client + .connect() + .then(() => { + return client.getEngineVersion(); + }) + .then(() => { + return client.close(); + }) + .then(() => { + ++closedCount; + }); + }); + }); + + promise + .then(() => { + expect(closedCount).to.equal(clients.length); + + done(); + }) + .catch(done); + }); + + it('should auto connect to the second host when the first host is down', function () { + const config = testSetup.config; + + const client = new CUBRID.createConnection({ + hosts: ['80.80.80.80'].concat(config.hosts), + port: config.port, + user: config.user, + password: config.password, + database: config.database, + connectionTimeout: 2000, + maxConnectionRetryCount: 2, + }); + + // Ensure the options reached the client. + expect(client) + .to.have.property('connectionTimeout') + .to.equal(2000); + + expect(client) + .to.have.property('maxConnectionRetryCount') + .to.equal(2); + + expect(client) + .to.have.property('hosts') + .to.be.an('array') + .with.length(2); + + return client + .connect() + .then(() => { + return client.getActiveHost(); + }) + .then(host => { + expect(host) + .to.be.an('object') + .to.have.property('host') + .to.be.a('string') + .to.equal(config.hosts[0]); + + expect(host) + .to.have.property('port') + .to.be.a('number') + .to.equal(config.port); + + return client.close(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.batchExecuteNoQuery.js b/test/CUBRIDConnection.batchExecuteNoQuery.js new file mode 100644 index 0000000..cf5f829 --- /dev/null +++ b/test/CUBRIDConnection.batchExecuteNoQuery.js @@ -0,0 +1,918 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('batchExecuteNoQuery', function () { + const TABLE_NAME = 'tbl_test'; + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + it('should verify there are no query packets after calling batchExecuteNoQuery(sqls) with multiple queries', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT)`, + `INSERT INTO ${TABLE_NAME} (id) VALUES (1), (2), (3)`, + `DROP TABLE ${TABLE_NAME}` + ]; + + return client.batchExecuteNoQuery(queries) + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + + it('should verify there are no query packets after calling batchExecuteNoQuery(sqls, callback) with multiple queries', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT)`, + `INSERT INTO ${TABLE_NAME} (id) VALUES (1), (2), (3)`, + `DROP TABLE ${TABLE_NAME}` + ]; + + client.batchExecuteNoQuery(queries, function (err) { + if (err) { + return done(err); + } + + client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }) + .then(done) + .catch(done); + }); + }); + + it('should succeed to call batchExecuteNoQuery(sqls) with no queries', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = []; + + return client.batchExecuteNoQuery(queries) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call batchExecuteNoQuery(sqls, callback) with no queries', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = []; + + client.batchExecuteNoQuery(queries, (err) => { + if (err) { + return done(err); + } + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + client.close(done); + }); + }); + + it('should succeed to call batchExecuteNoQuery() and let another client see the writes', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let client2 = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT)`, + `INSERT INTO ${TABLE_NAME} (id) VALUES (1), (2), (3)`, + ]; + + client.batchExecuteNoQuery(queries) + .then(() => { + return client2.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(11); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(11); + + expect(client2) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + expect(tables).to.contain(TABLE_NAME); + + return client2.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(3); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(3); + + expect(client2) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client2._queryResultSets)) + .to.have.length(2); + + // If the table exists, delete it. + let ids = result.ColumnValues.map(row => row[0]); + + expect(ids) + .to.be.an('array') + .with.length(3); + + expect(ids).to.contain(1); + expect(ids).to.contain(2); + expect(ids).to.contain(3); + + return client2.execute(`DROP table ${TABLE_NAME}`); + }) + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + expect(tables).to.not.contain(TABLE_NAME); + + return client.close(); + }) + .then(() => { + return client2.close(); + }) + .then(done) + .catch(done); + }); + + describe('when SQL is not a string', function () { + function verifyError(client, err) { + console.log(err); + console.log('client.brokerInfo.protocolVersion', client.brokerInfo.protocolVersion); + + let error = new Error(); + error.code = -493; + + switch (client.brokerInfo.protocolVersion) { + case 1: + error.message = 'Syntax: syntax error, unexpected UNSIGNED_INTEGER '; + break; + case 2: + error.message = "Syntax: In line 1, column 1 before END OF STATEMENT\nSyntax error: unexpected '1234', expecting SELECT or VALUE or VALUES or '(' "; + + break; + case 3: + error.message = 'Syntax: syntax error, unexpected UNSIGNED_INTEGER '; + + expect(err) + .to.be.an('array') + .with.length(1); + + err = err[0]; + break; + default: + // There is a space at the end. + error.message = "Syntax: In line 1, column 1 before END OF STATEMENT\nSyntax error: unexpected '1234', expecting SELECT or VALUE or VALUES or '(' "; + + expect(err) + .to.be.an('array') + .with.length(1); + + err = err[0]; + } + + expect(err).to.be.an.instanceOf(Error); + + // There is a space at the end. + expect(err.code).to.equal(error.code); + expect(err.message).to.equal(error.message); + } + + it('should fail to call batchExecuteNoQuery(sqls, callback) when SQL is not a string but an array of an integer', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [1234]; + + client.batchExecuteNoQuery(queries, (err) => { + verifyError(client, err); + + client.close(done); + }); + }); + + it('should fail to call batchExecuteNoQuery(sqls) when SQL is not a string but an array of an integer', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [1234]; + + return client.batchExecuteNoQuery(queries) + .then(() => { + throw new Error('Batch execute should have failed.') + }) + .catch(err => { + verifyError(client, err); + + return client.close(); + }); + }); + + it('should fail to call batchExecuteNoQuery(sqls, callback) when SQL is not a string but an integer', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = 1234; + + client.batchExecuteNoQuery(queries, (err) => { + verifyError(client, err); + + client.close(done); + }); + }); + + it('should fail to call batchExecuteNoQuery(sqls) when SQL is not a string but an integer', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = 1234; + + return client.batchExecuteNoQuery(queries) + .then(() => { + throw new Error('Batch execute should have failed.') + }) + .catch(err => { + verifyError(client, err); + + return client.close(); + }); + }); + }); + + describe('no SQL is specified', function () { + function verifyError(client, err) { + console.log(err); + console.log('client.brokerInfo.protocolVersion', client.brokerInfo.protocolVersion); + + let error = new Error('No statement to execute.'); + error.code = -424; + + switch (client.brokerInfo.protocolVersion) { + case 1: + case 2: + break; + default: + expect(err) + .to.be.an('array') + .with.length(1); + + err = err[0]; + } + + expect(err).to.be.an.instanceOf(Error); + + // There is a space at the end. + expect(err.code).to.equal(error.code); + expect(err.message).to.equal(error.message); + } + + it('should fail to call batchExecuteNoQuery(sqls, callback) when SQL is not specified', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = ''; + + client.batchExecuteNoQuery(queries, (err) => { + verifyError(client, err); + + client.close(done); + }); + }); + + it('should fail to call batchExecuteNoQuery(sqls) when SQL is not specified', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = ''; + + return client.batchExecuteNoQuery(queries) + .then(() => { + throw new Error('Batch execute should have failed.') + }) + .catch(err => { + verifyError(client, err); + + return client.close(); + }); + }); + }); + + describe('when one of the batch queries has an invalid syntax', function () { + function verifyError(client, err) { + console.log(err); + console.log('client.brokerInfo.protocolVersion', client.brokerInfo.protocolVersion); + + let error = new Error(); + error.code = -493; + + switch (client.brokerInfo.protocolVersion) { + case 1: + error.message = 'Syntax: syntax error, unexpected $end '; + break; + case 2: + error.message = 'Syntax: Syntax error: unexpected END OF STATEMENT '; + break; + case 3: + error.message = 'Syntax: syntax error, unexpected $end '; + + expect(err) + .to.be.an('array') + .with.length(1); + + err = err[0]; + break; + default: + // There is a space at the end. + error.message = 'Syntax: Syntax error: unexpected END OF STATEMENT '; + + expect(err) + .to.be.an('array') + .with.length(1); + + err = err[0]; + } + + expect(err).to.be.an.instanceOf(Error); + + // There is a space at the end. + expect(err.code).to.equal(error.code); + expect(err.message).to.equal(error.message); + } + + it('should commit only the first SQL while the second SQL is invalid when calling batchExecuteNoQuery()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT)`, + `INSERT INTO ${TABLE_NAME} (id)`, + ]; + + return client + .batchExecuteNoQuery(queries) + .catch(err => { + verifyError(client, err); + + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(11); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(11); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + // The first query should be committed. + expect(tables).to.contain(TABLE_NAME); + + // But no records should be inserted due to + // an invalid SQL. + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(2); + + return client.execute(`DROP table ${TABLE_NAME}`); + }) + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(3); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + expect(tables).to.not.contain(TABLE_NAME); + + return client.close(); + }); + }); + }); + + it('should commit only the first SQL while the second SQL is invalid when calling batchExecuteNoQuery(callback)', function (done) { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT)`, + `INSERT INTO ${TABLE_NAME} (id)`, + ]; + + client.batchExecuteNoQuery(queries, function (err) { + verifyError(client, err); + + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(11); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(11); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + // The first query should be committed. + expect(tables).to.contain(TABLE_NAME); + + // But no records should be inserted due to + // an invalid SQL. + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(2); + + return client.execute(`DROP table ${TABLE_NAME}`); + }) + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(3); + + // If the table exists, delete it. + let tables = result.ColumnValues.map(row => row[0]); + + expect(tables).to.not.contain(TABLE_NAME); + + return client.close(); + }) + .then(done) + .catch(done); + }); + }); + }); + + describe('when multiple queries in the batch have an invalid syntax', function () { + function getColumnTypeError(client, invalidType) { + let error = new Error(); + error.code = -494; + + switch (client.brokerInfo.protocolVersion) { + case 1: /* 8.4.1 */ + case 3: /* 8.4.3 */ + error.message = `Semantic: ${invalidType} is not defined. create class ${TABLE_NAME} ( id ${invalidType} ) `; + break; + case 2: /* 9.0.0 */ + case 4: /* 9.1.0 */ + default: /* since 9.2.0 */ + error.message = `Semantic: before ' ${invalidType})'\n${invalidType} is not defined. create class ${TABLE_NAME} ( id ${invalidType} ) `; + } + + return error; + } + + function verifyError(client, err, queriesCount) { + console.log(err); + console.log('client.brokerInfo.protocolVersion', client.brokerInfo.protocolVersion); + + let e = getColumnTypeError(client, 'xyz'); + + switch (client.brokerInfo.protocolVersion) { + case 1: /* 8.4.1 */ + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(e.code); + expect(err.message).to.equal(e.message); + break; + case 2: /* 9.0.0 */ + case 4: /* 9.1.0 */ + break; + default: /* 8.4.3 && since 9.2.0 */ + expect(err) + .to.be.an('array') + .with.length(queriesCount); + + err.forEach(e => { + expect(e).to.be.an.instanceOf(Error); + }); + + expect(err[0].code).to.equal(e.code); + expect(err[0].message).to.equal(e.message); + + e = getColumnTypeError(client, 'abc'); + expect(err[1].code).to.equal(e.code); + expect(err[1].message).to.equal(e.message); + } + } + + it('should fail all queries when they contain invalid syntax when calling batchExecuteNoQuery(queries)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + `CREATE TABLE ${TABLE_NAME}(id xyz)`, + `CREATE TABLE ${TABLE_NAME}(id abc)`, + ]; + + return client + .batchExecuteNoQuery(queries) + .then(() => { + throw new Error('batchExecuteNoQuery(queries) should have failed with an invalid syntax error.') + }) + .catch(err => { + verifyError(client, err, queries.length); + + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + let tables = result.ColumnValues.map(row => row[0]); + + // The first query should be committed. + expect(tables).to.not.contain(TABLE_NAME); + + return client.close(); + }); + }); + }); + }); + + describe('when data includes Unicode characters', function () { + beforeEach(testSetup.cleanup(TABLE_NAME)); + + const unicodeDataArr = [ + // The following sentences mean: 'I would like to send off this package.' + { + lang: 'Korean', + string: '이 소포를 부치고 싶은데요.', + }, + { + lang: 'Russian', + string: 'Я хотел бы отослать этот пакет', + }, + ]; + + unicodeDataArr.forEach(data => { + const testData = data.string; + + it(`should succeed to properly encode ${data.lang} characters`, function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(`CREATE TABLE ${TABLE_NAME}(str VARCHAR(256))`) + .then(() => { + return client.batchExecuteNoQuery(`INSERT INTO ${TABLE_NAME} VALUES('${testData}')`); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME} WHERE str = ?`, [testData]); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]).to.equal(testData); + + return client.close(); + }); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.beginTransaction.js b/test/CUBRIDConnection.beginTransaction.js new file mode 100644 index 0000000..fdfc7f0 --- /dev/null +++ b/test/CUBRIDConnection.beginTransaction.js @@ -0,0 +1,245 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('beginTransaction', function () { + const TABLE_NAME = 'test_tran'; + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + it('should succeed to automatically rollback the changes when the connection has been abruptly disconnected without commit after using beginTransaction()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.beginTransaction(); + }) + .then(() => { + return client.execute(`INSERT INTO ${TABLE_NAME} VALUES(1)`); + }) + .then(() => { + // Abruptly close the connection to make sure the + // changes are rolled back on the server side. + return client.close(); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + // Calling `query` above will reestablish the connection + // which in turn will set auto commit mode back to true. + expect(client.getAutoCommitMode()).to.be.true; + + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.execute(`DROP TABLE ${TABLE_NAME}`); + }) + .then(() => { + // Abruptly close the connection again to see if the + // changes are persisted or not. + return client.close(); + }) + .then(() => { + return client.query(`SELECT COUNT(*) FROM db_class WHERE class_name = '${TABLE_NAME}'`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + // No such table should exist. + .to.equal(0); + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnNames[0]) + .to.equal('count(*)'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + + it('should succeed to automatically rollback the changes when the connection has been abruptly disconnected without commit after using beginTransaction(callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return new Promise((resolve, reject) => { + client.beginTransaction(function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + return client.execute(`INSERT INTO ${TABLE_NAME} VALUES(1)`); + }) + .then(() => { + // Abruptly close the connection to make sure the + // changes are rolled back on the server side. + return client.close(); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + // Calling `query` above will reestablish the connection + // which in turn will set auto commit mode back to true. + expect(client.getAutoCommitMode()).to.be.true; + + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.execute(`DROP TABLE ${TABLE_NAME}`); + }) + .then(() => { + // Abruptly close the connection again to see if the + // changes are persisted or not. + return client.close(); + }) + .then(() => { + return client.query(`SELECT COUNT(*) FROM db_class WHERE class_name = '${TABLE_NAME}'`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + // No such table should exist. + .to.equal(0); + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnNames[0]) + .to.equal('count(*)'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.close.js b/test/CUBRIDConnection.close.js new file mode 100644 index 0000000..305c1b8 --- /dev/null +++ b/test/CUBRIDConnection.close.js @@ -0,0 +1,44 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('close', function () { + it('should emit the "disconnect" event on close()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let disconnected = false; + + return client + .connect() + .then(() => { + client.once('disconnect', function () { + disconnected = true; + }); + + return client.close(); + }) + .then(() => { + return new Promise(resolve => { + setTimeout(() => { + expect(disconnected).to.be.true; + + resolve(); + }, 300); + }); + }); + }); + + it('should succeed to close() when a connection is not established', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.close(); + }); + + it('should succeed to close(callback) when a connection is not established', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.close(done); + }); + }); +}); diff --git a/test/CUBRIDConnection.closeQuery.js b/test/CUBRIDConnection.closeQuery.js new file mode 100644 index 0000000..df15c93 --- /dev/null +++ b/test/CUBRIDConnection.closeQuery.js @@ -0,0 +1,61 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('closeQuery', function () { + it('should fail to closeQuery() with an invalid query handle', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + const queryHandle = 1234; + + return client.closeQuery(queryHandle) + .then(() => { + throw new Error('Should have failed to close the query with an invalid query handle.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`${ErrorMessages.ERROR_NO_ACTIVE_QUERY}: ${queryHandle}`); + }); + }); + + it('should fail to closeQuery(callback) with an invalid query handle', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + const queryHandle = 1234; + + client.closeQuery(queryHandle, function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`${ErrorMessages.ERROR_NO_ACTIVE_QUERY}: ${queryHandle}`); + + done(); + }); + }); + + it('should fail to closeQuery() with an undefined query handle', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queryHandle; + + return client.closeQuery(queryHandle) + .then(() => { + throw new Error('Should have failed to close the query with an invalid query handle.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`${ErrorMessages.ERROR_NO_ACTIVE_QUERY}: ${queryHandle}`); + }); + }); + + it('should fail to closeQuery(callback) with an invalid query handle', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queryHandle; + + client.closeQuery(queryHandle, function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`${ErrorMessages.ERROR_NO_ACTIVE_QUERY}: ${queryHandle}`); + + done(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.commit.js b/test/CUBRIDConnection.commit.js new file mode 100644 index 0000000..1603a6f --- /dev/null +++ b/test/CUBRIDConnection.commit.js @@ -0,0 +1,75 @@ +'use strict'; + +const expect = require('chai').expect; +const ErrorMessages = require('../src/constants/ErrorMessages'); +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('commit', function () { + it('should fail to commit() when a connection is offline', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.commit() + .then(() => { + throw new Error(ErrorMessages.ERROR_CLOSED_CONNECTION_COMMIT); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CLOSED_CONNECTION_COMMIT); + }); + }); + + it('should fail to commit(callback) when a connection is offline', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.commit(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CLOSED_CONNECTION_COMMIT); + + done(); + }); + }); + + it('should fail to commit() when a auto commit mode is enabled', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.commit(); + }) + .then(() => { + throw new Error(ErrorMessages.ERROR_AUTO_COMMIT_ENABLED_COMMIT); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_AUTO_COMMIT_ENABLED_COMMIT); + }); + }); + + it('should fail to commit(callback) when a auto commit mode is enabled', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return new Promise((resolve, reject) => { + client.commit(function (err) { + if (err) { + return reject(err); + } + + resolve(); + }) + }); + }) + .then(() => { + throw new Error(ErrorMessages.ERROR_AUTO_COMMIT_ENABLED_COMMIT); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_AUTO_COMMIT_ENABLED_COMMIT); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.connect.js b/test/CUBRIDConnection.connect.js new file mode 100644 index 0000000..785f805 --- /dev/null +++ b/test/CUBRIDConnection.connect.js @@ -0,0 +1,277 @@ +'use strict'; + +const expect = require('chai').expect; +const CUBRID = require('../'); +const ErrorMessages = require('../src/constants/ErrorMessages'); +const testSetup = require('./testSetup'); +const config = testSetup.config; + +describe('CUBRIDConnection', function () { + describe('connect', function () { + describe('to a non-existing database', function () { + const nonExistingDatabase = 'demodb_xyz'; + + let nonExistingDatabaseError = new Error(`Failed to connect to database server, '${nonExistingDatabase}', on the following host(s): localhost:localhost`); + let nonExistingDatabaseErrorShort = new Error(`Failed to connect to database server, '${nonExistingDatabase}', on the following host(s): localhost`); + nonExistingDatabaseError.code = -677; + + // const errors = [ + // // This is the correct message, CUBRID should return when a database is not found. + // "-677:Failed to connect to database server, 'demodb_xyz', on the following host(s): localhost:localhost", + // // When CUBRID is installed and started as a root, the following error is returned. + // // This may be a CUBRID bug or a spec. Need to keep these until we figure out + // // whether this is a bug or not. + // '-985:The hostname on the database connection string should be specified when multihost is set in "databases.txt".', + // // On CUBRID 9.1 and 8.4.1 the following error is returned. + // "-985:No error message available."]; + + it('should fail to connect to a non-existing database using a callback', function (done) { + const client = CUBRID.createConnection(config.hosts, config.port, config.user, config.password, nonExistingDatabase, 0, config.maxConnectionRetryCount, config.logger); + + client.connect(function (err) { + if (err) { + expect(err).to.be.an.instanceOf(Error); + // Error `-191` is `ER_NET_CANT_CONNECT_SERVER` + // Error `-677` is `ER_BO_CONNECT_FAILED` + // https://github.com/CUBRID/cubrid/blob/2b45b718bb50abef0ede89f3920b3501b7302ca3/src/base/error_code.h + expect([-191, -677]).to.include(err.code); + + if (err.code === -191) { + expect(err.message).to.equal(nonExistingDatabaseErrorShort.message); + } else { + expect(err.message).to.equal(nonExistingDatabaseError.message); + } + + return done(); + } + + done(new Error('The connection should have failed to a non-existing database.')); + }); + }); + + it('should fail to connect to a non-existing database using a promise', function () { + const client = CUBRID.createConnection(config.hosts, config.port, config.user, config.password, nonExistingDatabase, 0, config.maxConnectionRetryCount, config.logger); + + return client + .connect() + .then(() => { + throw new Error('The connection should have failed to a non-existing database.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + // Error `-191` is `ER_NET_CANT_CONNECT_SERVER` + // Error `-677` is `ER_BO_CONNECT_FAILED` + // https://github.com/CUBRID/cubrid/blob/2b45b718bb50abef0ede89f3920b3501b7302ca3/src/base/error_code.h + expect([-191, -677]).to.include(err.code); + + if (err.code === -191) { + expect(err.message).to.equal(nonExistingDatabaseErrorShort.message); + } else { + expect(err.message).to.equal(nonExistingDatabaseError.message); + } + }); + }); + }); + + describe('to a wrong port', function () { + const port = 80; + const connectionTimeout = 5000; + + this.timeout(connectionTimeout * 2); + + it('should fail to connect to an incorrect port using a callback', function (done) { + const client = CUBRID.createConnection(config.hosts, port, config.user, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.maxConnectionRetryCount, config.logger); + + client.connect(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.contain('connect ECONNREFUSED'); + + done(); + }); + }); + + it('should fail to connect to an incorrect port using a promise', function () { + const client = CUBRID.createConnection(config.hosts, port, config.user, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.logger); + + return client + .connect() + .then(() => { + throw new Error('The connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.contain('connect ECONNREFUSED'); + }); + }); + }); + + describe('to a wrong host', function () { + const host = '80.80.80.80'; + const connectionTimeout = 5000; + + this.timeout(connectionTimeout * 2); + + it('should fail to connect to an incorrect port using a callback', function (done) { + const client = CUBRID.createConnection(host, config.port, config.user, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.logger); + + client.connect(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`connect ECONNREFUSED ${host}:${config.port}`); + + done(); + }); + }); + + it('should fail to connect to an incorrect port using a promise', function () { + const client = CUBRID.createConnection(host, config.port, config.user, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.logger); + + return client + .connect() + .then(() => { + throw new Error('The connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(`connect ECONNREFUSED ${host}:${config.port}`); + }); + }); + + it('should fail to connect to a valid but non-CUBRID host within 1.5 seconds', function () { + const client = new CUBRID.createConnection('www.google.com'); + const newTimeoutValue = 1500; + + client.setConnectionTimeout(newTimeoutValue); + expect(client.getConnectionTimeout()).to.equal(newTimeoutValue); + + // By default the client will retry the connection one more time + // if it failed, so the timeout should be increased. + this.timeout(newTimeoutValue * 3); + + return client + .connect() + .then(() => { + throw new Error('Connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CONNECTION_TIMEOUT); + expect(client.connectionOpened).to.be.false; + }); + }); + }); + + describe('when a username is invalid', function () { + const username = 'unknown_user'; + const connectionTimeout = 5000; + const errors = [`User "${username}" is invalid.`, 'Your transaction has been aborted by the system due to server failure or mode change.']; + + this.timeout(connectionTimeout * 2); + + it('should fail to connect(callback) when a username is invalid', function (done) { + const client = CUBRID.createConnection(config.hosts, config.port, username, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.logger); + + client.connect(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-165); + expect(errors).to.include(err.message); + + done(); + }); + }); + + it('should fail to connect() when a username is invalid', function () { + const client = CUBRID.createConnection(config.hosts, config.port, username, config.password, config.database, connectionTimeout, config.maxConnectionRetryCount, config.logger); + + return client + .connect() + .then(() => { + throw new Error('The connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-165); + expect(errors).to.include(err.message); + }); + }); + }); + + describe('to a valid server', function () { + it('should succeed to connect to a valid server using a callback', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.connect(function (err) { + if (err) { + return done(err); + } + + client.close(done); + }); + }); + + it('should succeed to connect to a valid server using a promise', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.close(); + }); + }); + + it('should fail to call connect() second time if the first connection request is in progress, i.e. pending', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.connect(); + + return client + .connect() + .then(() => { + throw new Error('The second connection should have failed.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CONNECTION_ALREADY_PENDING); + + return client.close(); + }); + }); + + it('should fail to call connect() using a callback second time if the first connection request is in progress, i.e. pending', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + client.connect(); + + client.connect(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CONNECTION_ALREADY_PENDING); + + client.close(done); + }); + }); + + it('should succeed to call connect() as a promise second time if the first connection request is completed, i.e. opened', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.connect(); + }); + }); + + it('should succeed to call connect(callback) second time if the first connection request is completed, i.e. opened', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.connect(function (err) { + if (err) { + return done(err); + } + + client.connect(done); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.end.js b/test/CUBRIDConnection.end.js new file mode 100644 index 0000000..2b0b7c4 --- /dev/null +++ b/test/CUBRIDConnection.end.js @@ -0,0 +1,107 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('end', function () { + it('should succeed to close the connection using end(callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.query('SELECT * FROM nation'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return new Promise((resolve, reject) => { + client.end(function (err) { + if (err) { + return reject(err); + } + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + resolve(); + }); + }); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to close the connection using end(callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.query('SELECT * FROM nation'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client + .end() + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.execute.js b/test/CUBRIDConnection.execute.js new file mode 100644 index 0000000..67d0724 --- /dev/null +++ b/test/CUBRIDConnection.execute.js @@ -0,0 +1,541 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('execute', function () { + const TABLE_NAME = 'tbl_test'; + + before(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + describe('when using the new protocol', function () { + it('should verify there are no query packets after calling execute(sql)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return client.execute(`DELETE FROM code WHERE s_name = 'ZZZZ'`); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should verify there are no query packets after calling execute(sql, callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return new Promise((resolve, reject) => { + client.execute(`DELETE FROM code WHERE s_name = 'ZZZZ'`, function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should verify there are no query packets after calling execute(sql) multiple times', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + { + sql: `CREATE TABLE ${TABLE_NAME}(id INT)` + }, + { + sql: `INSERT INTO ${TABLE_NAME} (id) VALUES (1), (2), (3)` + }, + { + sql: `DROP TABLE ${TABLE_NAME}` + } + ]; + + let queriesCount = queries.length; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.shift(); + + return client + .execute(query.sql) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + } + + return promise + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + + it('should verify there are no query packets after calling execute(sql, callback) multiple times', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + { + sql: `CREATE TABLE ${TABLE_NAME}(id INT)` + }, + { + sql: `INSERT INTO ${TABLE_NAME} (id) VALUES (?), (?), (?)`, + params: [1, 2, 3] + }, + { + sql: `DROP TABLE ${TABLE_NAME}` + } + ]; + + let queriesCount = queries.length; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.shift(); + + return new Promise((resolve, reject) => { + client.execute(query.sql, query.params, function (err) { + if (err) { + return reject(err); + } + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + resolve(); + }); + }); + }); + } + + return promise + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + + it('should succeed to call execute(sql, params)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return client.execute(`DELETE FROM code WHERE s_name = ?`, ['ZZZZ']); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sql, params, callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return new Promise((resolve, reject) => { + client.execute(`DELETE FROM code WHERE s_name = ?`, ['ZZZZ'], function (err) { + if (err) { + return reject(err); + } + + resolve(); + }) + }); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sql, params) with literal params', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return client.execute(`DELETE FROM code WHERE s_name = ?`, 'ZZZZ'); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sql, params, callback) with literal params', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return new Promise((resolve, reject) => { + client.execute(`DELETE FROM code WHERE s_name = ?`, 'ZZZZ', function (err) { + if (err) { + return reject(err); + } + + resolve(); + }) + }); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sqls)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + const queries = [ + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + ]; + + return client.execute(queries); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sqls, callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + const queries = [ + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + ]; + + return new Promise((resolve, reject) => { + client.execute(queries, function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + }); + + describe('when using the old protocol', function () { + it('should verify there are no query packets after calling execute(sql)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return client.execute(`DELETE FROM code WHERE s_name = 'ZZZZ'`); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should verify there are no query packets after calling execute(sql) multiple times', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + { + sql: `CREATE TABLE ${TABLE_NAME}(id INT)` + }, + { + sql: `INSERT INTO ${TABLE_NAME} (id) VALUES (1), (2), (3)` + }, + { + sql: `DROP TABLE ${TABLE_NAME}` + } + ]; + + let queriesCount = queries.length; + let promise = Promise.resolve(); + + client.setEnforceOldQueryProtocol(true); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.shift(); + + return client + .execute(query.sql) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + } + + return promise + .then(() => { + return client.query('SHOW TABLES'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }); + }); + + it('should succeed to call execute(sql, params)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + return client.execute(`DELETE FROM code WHERE s_name = ?`, ['ZZZZ']); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to call execute(sqls)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + const queries = [ + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + ]; + + return client.execute(queries); + }) + .then(() => { + throw new Error('Should have failed to execute multiple queries when using an old protocol.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_MULTIPLE_QUERIES); + }); + }); + + it('should succeed to call execute(sqls, callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client + // Disable the autocommit mode to make sure the changes + // are not applied. + .setAutoCommitMode(false) + .then(() => { + const queries = [ + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + `DELETE FROM code WHERE s_name = 'ZZZZ'`, + ]; + + return new Promise((resolve, reject) => { + client.execute(queries, function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + throw new Error('Should have failed to execute multiple queries when using an old protocol.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_MULTIPLE_QUERIES); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.executeWithTypedParams.js b/test/CUBRIDConnection.executeWithTypedParams.js new file mode 100644 index 0000000..b326dcb --- /dev/null +++ b/test/CUBRIDConnection.executeWithTypedParams.js @@ -0,0 +1,589 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('executeWithTypedParams', function () { + const TABLE_NAME = 'tbl_test'; + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + const BIG_STRING_LENGTH = 10; + const query = ` + CREATE TABLE ${TABLE_NAME}( + a BIGINT, + b BIT(8), + c BIT VARYING(8), + d CHARACTER(1), + e DATE, + f DATETIME, + g DOUBLE, + h FLOAT, + i INTEGER, + j MONETARY, + k NATIONAL CHARACTER(1), + l NATIONAL CHARACTER VARYING(100), + m NUMERIC(15,0), + n CHARACTER VARYING(100), + o TIME, + p TIMESTAMP, + q CHARACTER VARYING(4096), + r CHAR(${BIG_STRING_LENGTH})${/* big string test */''} + ) + `; + + let bitValue = new Buffer(1); + let date = new Date(); + let varBitValue = new Buffer(1); + + bitValue[0] = 0; + date.setUTCFullYear(2012, /* 0 based; 9 is for October */9, 2); + date.setUTCHours(13, 25, 45, 100); + varBitValue[0] = 128; + + const valueMappings = [ + { + type: 'bigint', + value: 15 + }, + { + type: 'bit', + value: bitValue + }, + { + type: 'varbit', + value: varBitValue + }, + { + type: 'char', + value: 'a' + }, + { + type: 'date', + value: date + }, + { + type: 'datetime', + value: date + }, + { + type: 'double', + value: 1.5 + }, + { + type: 'float', + value: 2.5 + }, + { + type: 'int', + value: 14 + }, + { + type: 'monetary', + value: 3.14 + }, + { + type: 'nchar', + value: '9' + }, + { + type: 'varnchar', + value: '95' + }, + { + type: 'numeric', + value: 16 + }, + { + type: 'varchar', + value: 'varnchar' + }, + { + type: 'time', + value: date + }, + { + type: 'timestamp', + value: date + }, + { + type: 'varchar', + value: 'varchar' + }, + { + type: 'char', + value: (function getRandomChars(charsCount) { + let value = ''; + + while (charsCount--) { + value += 'A'; + } + + return value; + })(BIG_STRING_LENGTH) + } + ]; + + it('should succeed calling executeWithTypedParams(sql, params, delimiters)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(query) + .then(() => { + const sql = `INSERT INTO ${TABLE_NAME} VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; + let params = []; + let types = []; + + valueMappings.forEach(mapping => { + params.push(mapping.value); + types.push(mapping.type); + }); + + return client.executeWithTypedParams(sql, params, types); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + const values = result.ColumnValues[0]; + + expect(values) + .to.be.an('array') + .with.length(valueMappings.length); + + expect(values[0]) + .to.be.a('number') + .to.equal(valueMappings[0].value); + + expect(values[1]) + .to.be.an.instanceOf(Buffer); + + expect(values[1]) + .to.have.length(1); + + expect(values[1][0]) + .to.equal(valueMappings[1].value[0]); + + expect(values[2]) + .to.be.an.instanceOf(Buffer); + + expect(values[2]) + .to.have.length(1); + + expect(values[2][0]) + .to.equal(valueMappings[2].value[0]); + + expect(values[3]) + .to.be.a('string') + .to.equal(valueMappings[3].value); + + expect(values[4]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes time information when + // storing the data in CUBRID into `DATE` type. + let dateOnly = new Date(valueMappings[4].value); + dateOnly.setUTCHours(0, 0, 0, 0); + + expect(values[4]) + .to.deep.equal(dateOnly); + + expect(values[5]) + .to.be.an.instanceOf(Date); + + expect(values[5]) + .to.deep.equal(valueMappings[5].value); + + expect(values[6]) + .to.be.a('number') + .to.equal(valueMappings[6].value); + + expect(values[7]) + .to.be.a('number') + .to.equal(valueMappings[7].value); + + expect(values[8]) + .to.be.a('number') + .to.equal(valueMappings[8].value); + + expect(values[9]) + .to.be.a('number') + .to.equal(valueMappings[9].value); + + expect(values[10]) + .to.be.a('string') + .to.equal(valueMappings[10].value); + + expect(values[11]) + .to.be.a('string') + .to.equal(valueMappings[11].value); + + expect(values[12]) + .to.be.a('number') + .to.equal(valueMappings[12].value); + + expect(values[13]) + .to.be.a('string') + .to.equal(valueMappings[13].value); + + expect(values[14]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes date information when + // storing the data in CUBRID as a `TIME` type. + let timeOnly = new Date(valueMappings[14].value); + timeOnly.setUTCFullYear(1970, 0, 1); + // `TIME` in CUBRID does not include the millisecond part. + timeOnly.setMilliseconds(0); + + expect(values[14]) + .to.deep.equal(timeOnly); + + expect(values[15]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes millisecond information when + // storing the data in CUBRID as a `TIMESTAMP` type. + let timestamp = new Date(valueMappings[15].value); + timestamp.setMilliseconds(0); + + expect(values[15]) + .to.deep.equal(timestamp); + + expect(values[16]) + .to.be.a('string') + .to.equal(valueMappings[16].value); + + expect(values[17]) + .to.be.a('string') + .with.length(BIG_STRING_LENGTH); + + expect(values[17]).to.satisfy(function (str) { + return str.indexOf(valueMappings[17].value) === 0; + }); + + return client.close(); + }); + }); + + it('should succeed calling executeWithTypedParams(sql, params, delimiters, callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(query) + .then(() => { + const sql = `INSERT INTO ${TABLE_NAME} VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; + let params = []; + let types = []; + + valueMappings.forEach(mapping => { + params.push(mapping.value); + types.push(mapping.type); + }); + + return new Promise((resolve, reject) => { + client.executeWithTypedParams(sql, params, types, function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + const values = result.ColumnValues[0]; + + expect(values) + .to.be.an('array') + .with.length(valueMappings.length); + + expect(values[0]) + .to.be.a('number') + .to.equal(valueMappings[0].value); + + expect(values[1]) + .to.be.an.instanceOf(Buffer); + + expect(values[1]) + .to.have.length(1); + + expect(values[1][0]) + .to.equal(valueMappings[1].value[0]); + + expect(values[2]) + .to.be.an.instanceOf(Buffer); + + expect(values[2]) + .to.have.length(1); + + expect(values[2][0]) + .to.equal(valueMappings[2].value[0]); + + expect(values[3]) + .to.be.a('string') + .to.equal(valueMappings[3].value); + + expect(values[4]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes time information when + // storing the data in CUBRID into `DATE` type. + let dateOnly = new Date(valueMappings[4].value); + dateOnly.setUTCHours(0, 0, 0, 0); + + expect(values[4]) + .to.deep.equal(dateOnly); + + expect(values[5]) + .to.be.an.instanceOf(Date); + + expect(values[5]) + .to.deep.equal(valueMappings[5].value); + + expect(values[6]) + .to.be.a('number') + .to.equal(valueMappings[6].value); + + expect(values[7]) + .to.be.a('number') + .to.equal(valueMappings[7].value); + + expect(values[8]) + .to.be.a('number') + .to.equal(valueMappings[8].value); + + expect(values[9]) + .to.be.a('number') + .to.equal(valueMappings[9].value); + + expect(values[10]) + .to.be.a('string') + .to.equal(valueMappings[10].value); + + expect(values[11]) + .to.be.a('string') + .to.equal(valueMappings[11].value); + + expect(values[12]) + .to.be.a('number') + .to.equal(valueMappings[12].value); + + expect(values[13]) + .to.be.a('string') + .to.equal(valueMappings[13].value); + + expect(values[14]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes date information when + // storing the data in CUBRID as a `TIME` type. + let timeOnly = new Date(valueMappings[14].value); + timeOnly.setUTCFullYear(1970, 0, 1); + // `TIME` in CUBRID does not include the millisecond part. + timeOnly.setMilliseconds(0); + + expect(values[14]) + .to.deep.equal(timeOnly); + + expect(values[15]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes millisecond information when + // storing the data in CUBRID as a `TIMESTAMP` type. + let timestamp = new Date(valueMappings[15].value); + timestamp.setMilliseconds(0); + + expect(values[15]) + .to.deep.equal(timestamp); + + expect(values[16]) + .to.be.a('string') + .to.equal(valueMappings[16].value); + + expect(values[17]) + .to.be.a('string') + .with.length(BIG_STRING_LENGTH); + + expect(values[17]).to.satisfy(function (str) { + return str.indexOf(valueMappings[17].value) === 0; + }); + + return client.close(); + }); + }); + + it('should fail calling executeWithTypedParams(sql, params, delimiters) when the INSERT query has less "?" parameter placeholders than the provided number of parameters', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(query) + .then(() => { + const sql = `INSERT INTO ${TABLE_NAME} VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; + let params = []; + let types = []; + + valueMappings.forEach(mapping => { + params.push(mapping.value); + types.push(mapping.type); + }); + + return client.executeWithTypedParams(sql, params, types); + }) + .then(() => { + return new Error('executeWithTypedParams() should have failed with an invalid query.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + + expect(err) + .to.have.property('code') + .to.be.a('number'); + + if (client.brokerInfo.protocolVersion === 2) { + expect(err.code) + .to.equal(-10007); + } else { + expect(err.code) + .to.equal(-1007); + } + + expect(err) + .to.have.property('message') + .to.be.a('string') + .to.equal('CAS_ER_NUM_BIND'); + }); + }); + + it('should fail calling executeWithTypedParams(sql, params, delimiters, callback) when the INSERT query has less "?" parameter placeholders than the provided number of parameters', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(query) + .then(() => { + const sql = `INSERT INTO ${TABLE_NAME} VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`; + let params = []; + let types = []; + + valueMappings.forEach(mapping => { + params.push(mapping.value); + types.push(mapping.type); + }); + + return new Promise((resolve, reject) => { + client.executeWithTypedParams(sql, params, types, function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + return new Error('executeWithTypedParams() should have failed with an invalid query.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + + expect(err) + .to.have.property('code') + .to.be.a('number'); + + if (client.brokerInfo.protocolVersion === 2) { + expect(err.code) + .to.equal(-10007); + } else { + expect(err.code) + .to.equal(-1007); + } + + expect(err) + .to.have.property('message') + .to.be.a('string') + .to.equal('CAS_ER_NUM_BIND'); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.fetch.js b/test/CUBRIDConnection.fetch.js new file mode 100644 index 0000000..7bd9f9a --- /dev/null +++ b/test/CUBRIDConnection.fetch.js @@ -0,0 +1,1145 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('fetch', function () { + describe('when using the new protocol', function () { + // The new protocol returns less records than when using the old protocol. + let fetchedRecordsCount = 235; + + it('should succeed to execute fetch(queryHandle) after query(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + return client + .query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14457); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('ITA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('G'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + // Now fetch the rest rows. + function fetch(queryHandle) { + return client + .fetch(queryHandle) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.equal(queryHandle); + + expect(response) + .to.have.property('result'); + + if (response.result) { + expect(response.result) + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.not.have.property('RowsCount'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.not.have.property('ColumnNames'); + + expect(result) + .to.not.have.property('ColumnDataTypes'); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length.above(0); + + return fetch(queryHandle); + } else { + expect(response.result) + .to.be.null; + + return response; + } + }); + } + + return fetch(response.queryHandle); + }) + .then(response => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + + it('should succeed to execute fetch(queryHandle, callback) after query(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + return client + .query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14457); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('ITA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('G'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + // Now fetch the rest rows. + function fetch(queryHandle) { + return new Promise((resolve, reject) => { + client.fetch(response.queryHandle, function (err, result, queryHandle) { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }) + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.equal(queryHandle); + + expect(response) + .to.have.property('result'); + + if (response.result) { + expect(response.result) + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.not.have.property('RowsCount'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.not.have.property('ColumnNames'); + + expect(result) + .to.not.have.property('ColumnDataTypes'); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length.above(0); + + return fetch(queryHandle); + } else { + expect(response.result) + .to.be.null; + + return response; + } + }); + } + + return fetch(response.queryHandle); + }) + .then(response => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + + it('should fail prematurely when fetch(queryHandle, callback) with an invalid queryHandle', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14457); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('ITA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('G'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + return new Promise((resolve, reject) => { + client.fetch(-1234, function (err, result, queryHandle) { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }); + }); + }) + .then(() => { + throw new Error('fetch() should have failed when providing an invalid queryHandle'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_NO_ACTIVE_QUERY); + }); + }); + + it('should fail prematurely when fetch(queryHandle) with an invalid queryHandle', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14457); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('ITA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('G'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + return client.fetch(-1234); + }) + .then(() => { + throw new Error('fetch() should have failed when providing an invalid queryHandle'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_NO_ACTIVE_QUERY); + }); + }); + }); + + describe('when using the old protocol', function () { + let fetchedRecordsCount = 241; + + it('should succeed to execute fetch(queryHandle) after query(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + this.timeout(4000); + + return client + .query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(12906); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('USA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + // Now fetch the rest rows. + function fetch(queryHandle) { + return client + .fetch(response.queryHandle) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.equal(queryHandle); + + expect(response) + .to.have.property('result'); + + if (response.result) { + expect(response.result) + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.not.have.property('RowsCount'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.not.have.property('ColumnNames'); + + expect(result) + .to.not.have.property('ColumnDataTypes'); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length.above(0); + + return fetch(queryHandle); + } else { + expect(response.result) + .to.be.null; + + return response; + } + }); + } + + return fetch(response.queryHandle); + }) + .then(response => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + + it('should succeed to execute fetch(queryHandle, callback) after query(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + this.timeout(3000); + + return client + .query('SELECT * FROM game') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + const TOTAL_ROWS = 8653; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(fetchedRecordsCount); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20317); + + expect(columns[2]) + .to.be.a('number') + .to.equal(12906); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30124); + + expect(columns[4]) + .to.be.a('string') + .to.equal('USA'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-26T09:00:00+0900')); + + return true; + }); + + // Now fetch the rest rows. + function fetch(queryHandle) { + return new Promise((resolve, reject) => { + client.fetch(response.queryHandle, function (err, result, queryHandle) { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }) + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.equal(queryHandle); + + expect(response) + .to.have.property('result'); + + if (response.result) { + expect(response.result) + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.not.have.property('RowsCount'); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.not.have.property('ColumnNames'); + + expect(result) + .to.not.have.property('ColumnDataTypes'); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length.above(0); + + return fetch(queryHandle); + } else { + expect(response.result) + .to.be.null; + + return response; + } + }); + } + + return fetch(response.queryHandle); + }) + .then(response => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.getConnectionTimeout.js b/test/CUBRIDConnection.getConnectionTimeout.js new file mode 100644 index 0000000..e5addba --- /dev/null +++ b/test/CUBRIDConnection.getConnectionTimeout.js @@ -0,0 +1,19 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('getConnectionTimeout', function () { + it('should succeed to get the connection timeout value', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + const newTimeoutValue = 2000; + + expect(client.getConnectionTimeout()).to.equal(0); + + client.setConnectionTimeout(newTimeoutValue); + + expect(client.getConnectionTimeout()).to.equal(newTimeoutValue); + }); + }); +}); diff --git a/test/CUBRIDConnection.getDatabaseParameter.js b/test/CUBRIDConnection.getDatabaseParameter.js new file mode 100644 index 0000000..8c5fe65 --- /dev/null +++ b/test/CUBRIDConnection.getDatabaseParameter.js @@ -0,0 +1,47 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const CAS = require('../src/constants/CASConstants'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('getDatabaseParameter', function () { + it(`should succeed to set and get the database parameter`, function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const isolationLevel = CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL; + const tranRepClassCommitInstance = CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE; + + return client + .setDatabaseParameter(isolationLevel, tranRepClassCommitInstance) + .then(() => { + return client.getDatabaseParameter(isolationLevel); + }) + .then(value => { + expect(value).to.equal(tranRepClassCommitInstance); + + return client.close(); + }); + }); + + it(`should fail to get the database parameter`, function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const paramName = CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH; + + return client + .getDatabaseParameter(paramName, 0) + .then(() => { + return new Error('Should have failed to set the database parameter.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-1011); + expect(err.message).to.equal(ErrorMessages.resolveErrorCode(err.code)); + + return client.close(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.getEngineVersion.js b/test/CUBRIDConnection.getEngineVersion.js new file mode 100644 index 0000000..62f8665 --- /dev/null +++ b/test/CUBRIDConnection.getEngineVersion.js @@ -0,0 +1,71 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const CUBRID = require('../'); + +describe('CUBRIDConnection', function () { + describe('getEngineVersion', function () { + it('should succeed to call getEngineVersion()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .getEngineVersion() + .then(version => { + expect(version) + .to.be.a('string') + .with.length.above(0); + }); + }); + + it('should succeed to call getEngineVersion(callback)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.getEngineVersion(function (err, version) { + if (err) { + return done(err); + } + + expect(version) + .to.be.a('string') + .with.length.above(0); + + done(); + }); + }); + + it('should fail to getEngineVersion() when the connection is not established', function () { + const client = new CUBRID.createConnection('zzz host'); + const timeout = 3000; + + this.timeout(timeout * 2); + client.setConnectionTimeout(timeout); + + return client + .getEngineVersion() + .then(() => { + throw new Error('The connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.contain('getaddrinfo ENOTFOUND'); + }); + }); + + it('should fail to getEngineVersion(callback) when the connection is not established', function (done) { + const client = new CUBRID.createConnection('zzz host'); + const timeout = 3000; + + this.timeout(timeout * 2); + client.setConnectionTimeout(timeout); + + client.getEngineVersion(function (err, version) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.contain('getaddrinfo ENOTFOUND'); + expect(version).to.be.undefined; + + done(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.getSchema.js b/test/CUBRIDConnection.getSchema.js new file mode 100644 index 0000000..bf820f0 --- /dev/null +++ b/test/CUBRIDConnection.getSchema.js @@ -0,0 +1,84 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const CAS = require('../src/constants/CASConstants'); + +describe('CUBRIDConnection', function () { + describe('getSchema', function () { + it('should succeed to getSchema()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(10000); + + return client + .getSchema(CAS.CUBRIDSchemaType.CCI_SCH_CLASS) + .then(schema => { + if ([/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) > -1) { + expect(schema) + .to.be.an('array') + .with.length(32); + } else { + expect(schema) + .to.be.an('array') + .with.length(33); + } + + return client.getSchema(CAS.CUBRIDSchemaType.CCI_SCH_VCLASS); + }) + .then(schema => { + if ([/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) > -1) { + expect(schema) + .to.be.an('array') + .with.length(16); + } else { + expect(schema) + .to.be.an('array') + .with.length(17); + } + + return client.close(); + }); + }); + + it('should succeed to getSchema(callback)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(10000); + + client.getSchema(CAS.CUBRIDSchemaType.CCI_SCH_CLASS, function (err, schema) { + if (err) { + return done(err); + } + + if ([/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) > -1) { + expect(schema) + .to.be.an('array') + .with.length(32); + } else { + expect(schema) + .to.be.an('array') + .with.length(33); + } + + client.getSchema(CAS.CUBRIDSchemaType.CCI_SCH_VCLASS, function (err, schema) { + if (err) { + return done(err); + } + + if ([/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) > -1) { + expect(schema) + .to.be.an('array') + .with.length(16); + } else { + expect(schema) + .to.be.an('array') + .with.length(17); + } + + client.close(done); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.lobRead.js b/test/CUBRIDConnection.lobRead.js new file mode 100644 index 0000000..64b6e82 --- /dev/null +++ b/test/CUBRIDConnection.lobRead.js @@ -0,0 +1,535 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('lobRead', function () { + const TABLE_NAME = 'tbl_test'; + let data = ''; + + const bytesCount = 5120; + + for (var i = 0; i < bytesCount; i++) { + // These are 8 bits representing a single byte `255`. + // This means the `data` will have `5120` bytes stored + // because we are storing it as a binary not text. + data += '11111111'; + } + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + describe('BLOB (Binary Large Object)', function () { + const queries = [ + `CREATE TABLE ${TABLE_NAME}(lob BLOB)`, + `INSERT INTO ${TABLE_NAME} VALUES(BIT_TO_BLOB(B'${data}'))` + ]; + + it('should succeed to lobRead() binary data', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number'); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.an.instanceOf(Buffer); + + const buffer = response.data; + + expect(buffer) + .to.have.length(bytesCount); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(bytesCount); + + for (let i = 0; i < bytesCount; ++i) { + expect(buffer[i] === 255); + } + + return client.close(); + }); + }); + + it('should succeed to lobRead(callback) binary data', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number'); + + return new Promise((resolve, reject) => { + client.lobRead(lobObject, 0, lobObject.lobLength, function (err, data, length) { + if (err) { + return reject(err); + } + + resolve({ + data, + length, + }); + }); + }); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.an.instanceOf(Buffer); + + const buffer = response.data; + + expect(buffer) + .to.have.length(bytesCount); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(bytesCount); + + for (let i = 0; i < bytesCount; ++i) { + expect(buffer[i] === 255); + } + + return client.close(); + }); + }); + + it('should fail to lobRead() when the `position` is invalid', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number'); + + // `10 + lobObject.lobLength` is already beyond the + // maximum bytes the data has. + return client.lobRead(lobObject, 10, lobObject.lobLength); + }) + .then(() => { + throw new Error('Should have failed to lobRead() when the `position` is invalid'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_POSITION); + }); + }); + + it('should fail to lobRead(callback) when the `position` is invalid', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number'); + + return new Promise((resolve, reject) => { + // `10 + lobObject.lobLength` is already beyond the + // maximum bytes the data has. + client.lobRead(lobObject, 10, lobObject.lobLength, function (err, data, length) { + if (err) { + return reject(err); + } + + resolve({ + data, + length, + }); + }); + }); + }) + .then(() => { + throw new Error('Should have failed to lobRead() when the `position` is invalid'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_POSITION); + }); + }); + }); + + describe('CLOB (Character Large Object)', function () { + const queries = [ + `CREATE TABLE ${TABLE_NAME}(lob CLOB)`, + `INSERT INTO ${TABLE_NAME} VALUES(CHAR_TO_CLOB('${data}'))` + ]; + const lobLength = data.length; + + it('should succeed to lobRead() text data', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(lobLength); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(lobLength); + + const text = response.data; + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(lobLength); + + for (let i = 0; i < lobLength; ++i) { + expect(text[i] === '1'); + } + + return client.close(); + }); + }); + + it('should succeed to lobRead(callback) binary data', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + // The first query should be committed. + expect(columns) + .to.be.an('array') + .with.length(1); + + const lobObject = result.ColumnValues[0][0]; + + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number'); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number'); + + return new Promise((resolve, reject) => { + client.lobRead(lobObject, 0, lobObject.lobLength, function (err, data, length) { + if (err) { + return reject(err); + } + + resolve({ + data, + length, + }); + }); + }); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(lobLength); + + const text = response.data; + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(lobLength); + + for (let i = 0; i < lobLength; ++i) { + expect(text[i] === '1'); + } + + return client.close(); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.lobWrite.js b/test/CUBRIDConnection.lobWrite.js new file mode 100644 index 0000000..c995845 --- /dev/null +++ b/test/CUBRIDConnection.lobWrite.js @@ -0,0 +1,975 @@ +'use strict'; + +const expect = require('chai').expect; +const CAS = require('../src/constants/CASConstants'); +const ErrorMessages = require('../src/constants/ErrorMessages'); +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('lobWrite', function () { + const TABLE_NAME = 'tbl_test'; + const tempTableName = 'ces_temp'; + const tempLOBFileLocatorRE = new RegExp(`file:.+/demodb/.+/${tempTableName}\.[\\d_]+`); + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + function validateLOBObject(lobObject, type, length, re) { + expect(lobObject) + .to.be.an('object') + .to.have.property('lobType') + .to.equal(type); + + if (!re) { + re = new RegExp(`file:.+/demodb/.+/${TABLE_NAME}\.[\\d_]+`); + } + + expect(lobObject) + .to.have.property('fileLocator') + .to.be.a('string') + .to.match(re); + + expect(lobObject) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(length); + + expect(lobObject) + .to.have.property('packedLobHandle') + .to.be.an.instanceOf(Buffer); + + expect(lobObject.packedLobHandle) + .to.have.length(lobObject.fileLocator.length + /* db_type */4 + /* log size*/ 8 + /* locator size */ 4 + /* null */1); + } + + describe('BLOB (Binary Large Object)', function () { + const queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT, lob BLOB)`, + ]; + + it('should succeed to write a new BLOB object using lobWrite()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = new Buffer(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + data[i] = i % 8; + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, data); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['blob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.an.instanceOf(Buffer); + + const buffer = response.data; + + expect(buffer) + .to.have.length(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + expect(buffer[i] === i % 8); + } + + return client.close(); + }); + }); + + it('should succeed to write a new BLOB object using lobWrite(callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = new Buffer(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + data[i] = i % 8; + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return new Promise((resolve, reject) => { + client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, function (err, lobObject) { + if (err) { + return reject(err); + } + + resolve(lobObject); + }); + }); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + return new Promise((resolve, reject) => { + client.lobWrite(lobObject, 0, data, function (err, lobObject, length) { + if (err) { + return reject(err); + } + + resolve({ + length, + lobObject, + }); + }); + }); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['blob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.an.instanceOf(Buffer); + + const buffer = response.data; + + expect(buffer) + .to.have.length(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + expect(buffer[i] === i % 8); + } + + return client.close(); + }); + }); + + it('should fail to write a new BLOB object using lobWrite(callback) when an invalid "offset" is provided', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = new Buffer(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + data[i] = i % 8; + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return new Promise((resolve, reject) => { + client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, function (err, lobObject) { + if (err) { + return reject(err); + } + + resolve(lobObject); + }); + }); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + return new Promise((resolve, reject) => { + /* pass an invalid offset, i.e. not equal to `lobObject.lobLength`. */ + client.lobWrite(lobObject, 1, data, function (err, lobObject, length) { + if (err) { + return reject(err); + } + + resolve({ + length, + lobObject, + }); + }); + }); + }) + .then(() => { + throw new Error('Should have failed to `lobWrite` when an invalid "offset" is provided.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_POSITION); + }); + }); + + it('should fail to write a new BLOB object using lobWrite() when an invalid "offset" is provided', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = new Buffer(maxBytes); + + for (let i = 0; i < maxBytes; ++i) { + data[i] = i % 8; + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + /* pass an invalid offset, i.e. not equal to `lobObject.lobLength`. */ + return client.lobWrite(lobObject, 1, data); + }) + .then(() => { + throw new Error('Should have failed to `lobWrite` when an invalid "offset" is provided.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_POSITION); + }); + }); + + it('should fail to write a new BLOB object using lobWrite() when an invalid LOB data is provided', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, /* LOB data */1234); + }) + .then(() => { + throw new Error('Should have failed to `lobWrite` when an invalid LOB data is provided.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_DATA); + }); + }); + + it('should fail to write a new BLOB object using lobWrite(callback) when an invalid "lobType" is provided', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, /* initial size */0, tempLOBFileLocatorRE); + + return new Promise((resolve, reject) => { + client.lobWrite(lobObject, 0, /* LOB data */1234, function (err, lobObject, length) { + if (err) { + return reject(err); + } + + resolve({ + length, + lobObject, + }); + }); + }); + }) + .then(() => { + throw new Error('Should have failed to `lobWrite` when an invalid LOB data is provided.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_INVALID_LOB_DATA); + }); + }); + }); + + describe('CLOB (Character Large Object)', function () { + const queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT, lob CLOB)`, + ]; + + it('should succeed to write a new CLOB object using lobWrite()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = ''; + const CAPITAL_LETTERS_ASCII_RANGE = /* letter Z*/90 - /* letter A*/65; + + for (let i = 0; i < maxBytes; ++i) { + data += String.fromCharCode(65 + i % CAPITAL_LETTERS_ASCII_RANGE); + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, data); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['clob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + const text = response.data; + + for (let i = 0; i < maxBytes; ++i) { + expect(text[i]).to.equal(String.fromCharCode(65 + i % CAPITAL_LETTERS_ASCII_RANGE)); + } + + return client.close(); + }); + }); + + it('should succeed to write a new CLOB object using lobWrite(callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const maxBytes = 2 * client._LOB_MAX_IO_LENGTH; + let data = ''; + const CAPITAL_LETTERS_ASCII_RANGE = /* letter Z*/90 - /* letter A*/65; + + for (let i = 0; i < maxBytes; ++i) { + data += String.fromCharCode(65 + i % CAPITAL_LETTERS_ASCII_RANGE); + } + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return new Promise((resolve, reject) => { + client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, function (err, lobObject) { + if (err) { + return reject(err); + } + + resolve(lobObject); + }); + }); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, /* initial size */0, tempLOBFileLocatorRE); + + return new Promise((resolve, reject) => { + client.lobWrite(lobObject, 0, data, function (err, lobObject, length) { + if (err) { + return reject(err); + } + + resolve({ + length, + lobObject, + }); + }); + }); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['clob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + const text = response.data; + + for (let i = 0; i < maxBytes; ++i) { + expect(text[i]).to.equal(String.fromCharCode(65 + i % CAPITAL_LETTERS_ASCII_RANGE)); + } + + return client.close(); + }); + }); + + it('should succeed to write a new Korean Unicode CLOB using lobWrite()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + let data = ''; + + for (let i = 0; i < client._LOB_MAX_IO_LENGTH; ++i) { + // These are 3-byte characters. + data += '이'; + } + + // Ensure the data is bigger than the `client._LOB_MAX_IO_LENGTH`. + data += '이렇께'; + + let maxBytes = Buffer.byteLength(data); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, data); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['clob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(data.length); + + expect(response.data).to.equal(data); + + expect(Buffer.byteLength(response.data)) + .to.equal(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + return client.close(); + }); + }); + + it('should succeed to write a new Russian Unicode CLOB using lobWrite()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + let data = ''; + + for (let i = 0; i < client._LOB_MAX_IO_LENGTH; ++i) { + // These are 2-byte characters. + data += 'Щ'; + } + + // Ensure the data is bigger than the `client._LOB_MAX_IO_LENGTH`. + data += 'подъезд'; + + let maxBytes = Buffer.byteLength(data); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, data); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['clob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(data.length); + + expect(response.data).to.equal(data); + + expect(Buffer.byteLength(response.data)) + .to.equal(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + return client.close(); + }); + }); + + it('should succeed to write a new Chinese Unicode CLOB using lobWrite()', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + let data = ''; + + for (let i = 0; i < client._LOB_MAX_IO_LENGTH; ++i) { + // These are 3-byte characters. + data += '梯'; + } + + // Ensure the data is bigger than the `client._LOB_MAX_IO_LENGTH`. + data += '电梯'; + + let maxBytes = Buffer.byteLength(data); + + return client + .batchExecuteNoQuery(queries) + .then(() => { + return client.lobNew(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + }) + .then(lobObject => { + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, /* initial size */0, tempLOBFileLocatorRE); + + return client.lobWrite(lobObject, 0, data); + }) + .then(response => { + validateLOBObject(response.lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, + /* all bytes should be written */maxBytes, tempLOBFileLocatorRE); + + expect(response) + .to.have.property('length') + .to.equal(maxBytes); + + const params = [response.lobObject]; + const types = ['clob']; + + return client.executeWithTypedParams(`INSERT INTO ${TABLE_NAME} VALUES(1, ?)`, params, types); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + const columns = result.ColumnValues[0]; + + expect(columns) + .to.be.an('array') + .with.length(2); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1); + + const lobObject = columns[1]; + + validateLOBObject(lobObject, CAS.CUBRIDDataType.CCI_U_TYPE_CLOB, maxBytes); + + return client.lobRead(lobObject, 0, lobObject.lobLength); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('data') + .to.be.a('string') + .with.length(data.length); + + expect(response.data).to.equal(data); + + expect(Buffer.byteLength(response.data)) + .to.equal(maxBytes); + + expect(response) + .to.have.property('length') + .to.be.a('number') + .to.equal(maxBytes); + + return client.close(); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.query.js b/test/CUBRIDConnection.query.js new file mode 100644 index 0000000..c17384f --- /dev/null +++ b/test/CUBRIDConnection.query.js @@ -0,0 +1,2029 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const CAS = require('../src/constants/CASConstants'); + +describe('CUBRIDConnection', function () { + describe('query', function () { + const TABLE_NAME = 'tbl_test'; + + function getDate() { + let d = new Date; + d.setUTCFullYear(2004, /* 7 is for August */7, 28); + + return d; + } + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + function verifyError(client, err) { + console.log(err); + console.log('client.brokerInfo.protocolVersion', client.brokerInfo.protocolVersion); + + let error = new Error(); + error.code = -493; + + switch (client.brokerInfo.protocolVersion) { + case 1: + case 3: + error.message = `Syntax: syntax error, unexpected '*' `; + break; + default: + // There is a space at the end. + error.message = `Syntax: In line 1, column 20 before ') FROM game'\nSyntax error: unexpected '*', expecting SELECT or VALUE or VALUES or '(' `; + break; + } + + expect(err).to.be.an.instanceOf(Error); + + // There is a space at the end. + expect(err.code).to.equal(error.code); + expect(err.message).to.equal(error.message); + } + + describe('when using the new protocol', function () { + it('should succeed to execute query(sql)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to execute query(sql, callback)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.query('SHOW TABLES', function (err, result, queryHandle) { + if (err) { + return done(err); + } + + expect(queryHandle) + .to.be.a('number') + .to.be.above(0); + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + queryHandle]); + + client.closeQuery(queryHandle, function (err) { + if (err) { + return done(err); + } + + client.close(done); + }); + }); + }); + + it('should succeed to execute query(sql, callback) multiple times with closeQuery', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queriesCount = 10; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should succeed to execute SHOW TABLES query(sql, callback) multiple times', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queriesCount = 10; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + return client.query('SHOW TABLES').then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.not.empty; + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object'); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(queriesCount); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should succeed to execute query(sql, params)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .query('SELECT * FROM nation WHERE continent = ?', ['Asia']) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(47); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to execute query(sql, params, callback)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const promise = new Promise((resolve, reject) => { + client.query('SELECT * FROM nation WHERE continent = ?', ['Asia'], function (err, result, queryHandle) { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }); + }); + + return promise + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(47); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to execute query(sql, params) multiple times without closeQuery', function (done) { + this.timeout(100000000); + + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + let queries = [ + { + sql: "SHOW TABLES", + params: null, + rowsCount: 10 + }, + { + sql: "SELECT * FROM nation", + params: [], + rowsCount: 215 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: ['Asia'], + rowsCount: 47 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: 'Asia', + rowsCount: 47 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: [2004], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: 2004, + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: ['2004'], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: '2004', + rowsCount: 64 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: ['08/28/2004'], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: '08/28/2004', + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [getDate()], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: getDate(), + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [new Date()], + rowsCount: 0 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: new Date(), + rowsCount: 0 + } + ]; + const queriesCount = queries.length; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.pop(); + + return client + .query(query.sql, query.params) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(query.rowsCount); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.not.empty; + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object'); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(queriesCount); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should succeed to execute query(sql, params, callback) multiple times without closeQuery', function (done) { + this.timeout(100000000); + + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + let queries = [ + { + sql: "SHOW TABLES", + params: null, + rowsCount: 10 + }, + { + sql: "SELECT * FROM nation", + params: [], + rowsCount: 215 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: undefined, + rowsCount: 0 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: null, + rowsCount: 0 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: ['Asia'], + rowsCount: 47 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: 'Asia', + rowsCount: 47 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: [2004], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: 2004, + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: ['2004'], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: '2004', + rowsCount: 64 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: ['08/28/2004'], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: '08/28/2004', + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [getDate()], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: getDate(), + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [new Date()], + rowsCount: 0 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: new Date(), + rowsCount: 0 + } + ]; + const queriesCount = queries.length; + let promise = Promise.resolve(); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.pop(); + + const queryPromise = new Promise((resolve, reject) => { + client.query(query.sql, query.params, function (err, result, queryHandle) { + if (err) { + return reject(err); + } + + resolve({ + queryHandle, + result, + }); + }); + }); + + return queryPromise + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(query.rowsCount); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.not.empty; + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object'); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(queriesCount); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should fail to execute query(sql) against a non existing table', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + return client.query('SELECT * FROM game_xyz') + .then(() => { + throw new Error('Executing query() should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-493); + expect(err.message).to.equal('Syntax: Unknown class "game_xyz". select * from game_xyz'); + }); + }); + + it('should fail to execute query(sql, callback) against a non existing table', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + client.query('SELECT * FROM game_xyz', (err) => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-493); + expect(err.message).to.equal('Syntax: Unknown class "game_xyz". select * from game_xyz'); + + done(); + }); + }); + + it('should fail to execute query(sql) when the query has a syntax error', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .query('SELECT wrong_count(*) FROM game') + .then(() => { + throw new Error('Should have failed due to a syntax error.') + }) + .catch(err => { + verifyError(client, err); + }); + }); + + it('should fail to execute query(sql, callback) when the query has a syntax error', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.query('SELECT wrong_count(*) FROM game', (err) => { + verifyError(client, err); + + done(); + }); + }); + + it('should succeed to query(sql) multiple queries in the same order they were queued', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let query1Response; + + client + .query('SELECT * FROM event') + .then(response => { + query1Response = response; + }); + + expect(query1Response).to.be.undefined; + + return client + .query('SELECT * FROM record') + .then(response => { + // When the second query results are returned, the + // previous query should already be fullfilled. + expect(query1Response) + .to.be.an('object'); + + expect(response) + .to.be.an('object'); + }); + }); + + it('should succeed to query(sql) the LAST_INSERT_ID()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + const queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, text VARCHAR(32))`, + `INSERT INTO ${TABLE_NAME} VALUES(NULL, 'database'), (NULL, 'manager')`, + ]; + + return client.batchExecuteNoQuery(queries) + .then(() => { + return client.query('SELECT LAST_INSERT_ID()'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) a constant value', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.query('SELECT 1') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) a NULL value', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client.query('SELECT null FROM nation WHERE rownum < 3') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(2); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(2); + + result.ColumnValues.forEach(columns => { + expect(columns) + .to.be.an('array') + .with.length(1); + + expect(columns[0]) + .to.be.null; + }); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) various data types', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const lobField = 'qwerty'; + const char = 'a'; + let date = new Date(); + date.setUTCFullYear(2012, /* 0 based; 9 is for October */9, 2); + date.setUTCHours(18, 25, 45, 100); + const double = 1.5; + const float = 2.5; + const int = 14; + const money = 3.14; + const numeric = 16; + const nChar = '9'; + const nVarChar = '95'; + const varChar = 'varchar'; + const enumString = 'blue'; + + let supportsENUM; + + return client + .connect() + .then(() => { + // CUBRID >=9.0 supports `ENUM`. + supportsENUM = [/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) === -1; + + const createTableQuery = + `CREATE TABLE ${TABLE_NAME}( + a BIGINT, + b BIT(1), + c BIT VARYING(1), + d BLOB, + e CHARACTER(1), + f CLOB, + g DATE, + h DATETIME, + i DOUBLE, + j FLOAT, + k INTEGER, + l MONETARY, + m NATIONAL CHARACTER(1), + o NATIONAL CHARACTER VARYING(100), + p NUMERIC(15,0), + r CHARACTER VARYING(100), + s TIME, + t TIMESTAMP, + ${supportsENUM ? "z ENUM('red', 'blue', 'yellow') DEFAULT 'red'," : ''} + u VARCHAR(4096) + )`; + + return client.execute(createTableQuery); + }) + .then(() => { + const insertQuery = `INSERT INTO ${TABLE_NAME} VALUES(15, B'0', B'0', ?, ?, ?, ?, ?, ?, ?, ?, ?, N'${nChar}', N'${nVarChar}', ?, ?, ?, ?, ${supportsENUM ? `'${enumString}', ` : ''} ?)`; + const params = [lobField, char, lobField, date, date, double, float, int, money, numeric, varChar, date, date, varChar]; + + return client.execute(insertQuery, params) + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + const values = result.ColumnValues[0]; + + expect(values) + .to.be.an('array') + .with.length(supportsENUM ? 20 : 19); + + expect(values[0]) + .to.be.a('number') + .to.equal(15); + + expect(values[1]) + .to.be.an.instanceOf(Buffer); + + expect(values[1]) + .to.have.length(1); + + expect(values[1][0]) + .to.equal(0); + + expect(values[2]) + .to.be.an.instanceOf(Buffer); + + expect(values[2]) + .to.have.length(1); + + expect(values[2][0]) + .to.equal(0); + + expect(values[3]) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number') + .to.equal(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + + expect(values[3]) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(lobField.length); + + const re = new RegExp(`file:.+/demodb/.+/${TABLE_NAME}\.[\\d_]+`); + + expect(values[3]) + .to.have.property('fileLocator') + .to.be.a('string') + .to.match(re); + + expect(values[3]) + .to.have.property('packedLobHandle') + .to.be.an.instanceOf(Buffer); + + expect(values[3].packedLobHandle) + .to.have.length(values[3].fileLocator.length + /* db_type */4 + /* log size*/ 8 + /* locator size */ 4 + /* null */1); + + expect(values[4]) + .to.be.a('string') + .to.equal(char); + + expect(values[5]) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number') + .to.equal(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + + expect(values[5]) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(lobField.length); + + expect(values[5]) + .to.have.property('fileLocator') + .to.be.a('string') + .to.match(re); + + expect(values[5]) + .to.have.property('packedLobHandle') + .to.be.an.instanceOf(Buffer); + + expect(values[5].packedLobHandle) + .to.have.length(values[5].fileLocator.length + /* db_type */4 + /* log size*/ 8 + /* locator size */ 4 + /* null */1); + + expect(values[6]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes time information when + // storing the data in CUBRID into `DATE` type. + let dateOnly = new Date(date); + dateOnly.setUTCHours(0, 0, 0, 0); + + expect(values[6]) + .to.deep.equal(dateOnly); + + expect(values[7]) + .to.be.an.instanceOf(Date); + + expect(values[7]) + .to.deep.equal(date); + + expect(values[8]) + .to.be.a('number') + .to.equal(double); + + expect(values[9]) + .to.be.a('number') + .to.equal(float); + + expect(values[10]) + .to.be.a('number') + .to.equal(int); + + expect(values[11]) + .to.be.a('number') + .to.equal(money); + + expect(values[12]) + .to.be.a('string') + .to.equal(nChar); + + expect(values[13]) + .to.be.a('string') + .to.equal(nVarChar); + + expect(values[14]) + .to.be.a('number') + .to.equal(numeric); + + expect(values[15]) + .to.be.a('string') + .to.equal(varChar); + + expect(values[16]) + .to.be.an.instanceOf(Date); + // We cannot directly compare the date values because + // an instance of `Date` removes date information when + // storing the data in CUBRID as a `TIME` type. + let timeOnly = new Date(date); + timeOnly.setUTCFullYear(1970, 0, 1); + // `TIME` in CUBRID does not include the millisecond part. + timeOnly.setMilliseconds(0); + + expect(values[16]) + .to.deep.equal(timeOnly); + + expect(values[17]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes millisecond information when + // storing the data in CUBRID as a `TIMESTAMP` type. + let timestamp = new Date(date); + timestamp.setMilliseconds(0); + + expect(values[17]) + .to.deep.equal(timestamp); + + if (supportsENUM) { + expect(values[18]) + .to.be.a('string') + .to.equal(enumString); + + expect(values[19]) + .to.be.a('string') + .to.equal(varChar); + } else { + expect(values[18]) + .to.be.a('string') + .to.equal(varChar); + } + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should fail to execute query(sql) when the socket connection has been destroyed', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + client._socket.destroy(); + + return client.query('SELECT * FROM nation'); + }) + .then(() => { + throw new Error('Should have failed to query when the socket connection has been destroyed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal('This socket is closed.'); + }); + }); + }); + + describe('when using the old protocol', function () { + it('should succeed to execute query(sql)', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + expect(client.shouldUseOldQueryProtocol()).to.be.true; + + return client.query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to execute query(sql, callback)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + client.query('SHOW TABLES', function (err, result, queryHandle) { + if (err) { + return done(err); + } + + expect(queryHandle) + .to.be.a('number') + .to.be.above(0); + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + queryHandle]); + + client.closeQuery(queryHandle, function (err) { + if (err) { + return done(err); + } + + client.close(done); + }); + }); + }); + + it('should succeed to execute query(sql, callback) multiple times with closeQuery', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queriesCount = 10; + let promise = Promise.resolve(); + + client.setEnforceOldQueryProtocol(true); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + return client + .query('SHOW TABLES') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should succeed to execute SHOW TABLES query(sql, callback) multiple times', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queriesCount = 10; + let promise = Promise.resolve(); + + client.setEnforceOldQueryProtocol(true); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + return client.query('SHOW TABLES').then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(10); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.not.empty; + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object'); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(queriesCount); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should succeed to execute query(sql, params)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + client.query('SELECT * FROM nation WHERE continent = ?', ['Asia']) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(47); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }) + .then(done) + .catch(done); + }); + + it('should succeed to execute query(sql, callback) multiple times', function (done) { + this.timeout(100000000); + + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let queries = [ + { + sql: "SHOW TABLES", + params: null, + rowsCount: 10 + }, + { + sql: "SELECT * FROM nation", + params: [], + rowsCount: 215 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: ['Asia'], + rowsCount: 47 + }, + { + sql: "SELECT * FROM nation WHERE continent = ?", + params: 'Asia', + rowsCount: 47 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: [2004], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: 2004, + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: ['2004'], + rowsCount: 64 + }, + { + sql: "SELECT * FROM history WHERE host_year = ?", + params: '2004', + rowsCount: 64 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: ['08/28/2004'], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: '08/28/2004', + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [getDate()], + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: getDate(), + rowsCount: 311 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: [new Date()], + rowsCount: 0 + }, + { + sql: "SELECT * FROM game WHERE game_date = ?", + params: new Date(), + rowsCount: 0 + } + ]; + let queriesCount = queries.length; + let promise = Promise.resolve(); + + client.setEnforceOldQueryProtocol(true); + + for (var i = 0; i < queriesCount; ++i) { + promise = promise.then(() => { + let query = queries.pop(); + + return client.query(query.sql, query.params) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(query.rowsCount); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.not.empty; + }); + }); + } + + promise + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object'); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(queriesCount); + + return client.close(); + }) + .then(() => { + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + done(); + }) + .catch(done); + }); + + it('should fail to execute query(sql) against a non existing table', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + this.timeout(3000); + + return client.query('SELECT * FROM game_xyz') + .then(() => { + throw new Error('Executing query() should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-493); + expect(err.message).to.equal('Syntax: Unknown class "game_xyz". select * from game_xyz'); + }); + }); + + it('should fail to execute query(sql, callback) against a non existing table', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.query('SELECT * FROM game_xyz', (err) => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-493); + expect(err.message).to.equal('Syntax: Unknown class "game_xyz". select * from game_xyz'); + + done(); + }); + }); + + it('should fail to execute query(sql) when the query has a syntax error', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client + .query('SELECT wrong_count(*) FROM game') + .then(() => { + throw new Error('Should have failed due to a syntax error.') + }) + .catch((err) => { + verifyError(client, err); + }); + }); + + it('should fail to execute query(sql, callback) when the query has a syntax error', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + client.query('SELECT wrong_count(*) FROM game', (err) => { + verifyError(client, err); + + done(); + }); + }); + + it('should succeed to query(sql) multiple queries in the same order they were queued', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + let query1Response; + + client.setEnforceOldQueryProtocol(true); + + client + .query('SELECT * FROM event') + .then(response => { + query1Response = response; + }); + + expect(query1Response).to.be.undefined; + + return client + .query('SELECT * FROM record') + .then(response => { + // When the second query results are returned, the + // previous query should already be fullfilled. + expect(query1Response) + .to.be.an('object'); + + expect(response) + .to.be.an('object'); + }); + }); + + it('should succeed to query(sql) the LAST_INSERT_ID()', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + const queries = [ + `CREATE TABLE ${TABLE_NAME}(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, text VARCHAR(32))`, + `INSERT INTO ${TABLE_NAME} VALUES(NULL, 'database'), (NULL, 'manager')`, + ]; + + client.setEnforceOldQueryProtocol(true); + + return client.batchExecuteNoQuery(queries) + .then(() => { + return client.query('SELECT LAST_INSERT_ID()'); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) a constant value', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client.query('SELECT 1') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) a NULL value', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + return client.query('SELECT null FROM nation WHERE rownum < 3') + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(2); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(2); + + result.ColumnValues.forEach(columns => { + expect(columns) + .to.be.an('array') + .with.length(1); + + expect(columns[0]) + .to.be.null; + }); + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to query(sql) various data types', function () { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + const lobField = 'qwerty'; + const char = 'a'; + let date = new Date(); + date.setUTCFullYear(2012, /* 0 based; 9 is for October */9, 2); + date.setUTCHours(18, 25, 45, 100); + const double = 1.5; + const float = 2.5; + const int = 14; + const money = 3.14; + const numeric = 16; + const nChar = '9'; + const nVarChar = '95'; + const varChar = 'varchar'; + const enumString = 'blue'; + + let supportsENUM; + + return client + .connect() + .then(() => { + // CUBRID >=9.0 supports `ENUM`. + supportsENUM = [/* 8.4.1 */1, /* 8.4.3 */3].indexOf(client.brokerInfo.protocolVersion) === -1; + + const createTableQuery = + `CREATE TABLE ${TABLE_NAME}( + a BIGINT, + b BIT(1), + c BIT VARYING(1), + d BLOB, + e CHARACTER(1), + f CLOB, + g DATE, + h DATETIME, + i DOUBLE, + j FLOAT, + k INTEGER, + l MONETARY, + m NATIONAL CHARACTER(1), + o NATIONAL CHARACTER VARYING(100), + p NUMERIC(15,0), + r CHARACTER VARYING(100), + s TIME, + t TIMESTAMP, + ${supportsENUM ? "z ENUM('red', 'blue', 'yellow') DEFAULT 'red'," : ''} + u VARCHAR(4096) + )`; + + return client.execute(createTableQuery); + }) + .then(() => { + const insertQuery = `INSERT INTO ${TABLE_NAME} VALUES(15, B'0', B'0', ?, ?, ?, ?, ?, ?, ?, ?, ?, N'${nChar}', N'${nVarChar}', ?, ?, ?, ?, ${supportsENUM ? `'${enumString}', ` : ''} ?)`; + const params = [lobField, char, lobField, date, date, double, float, int, money, numeric, varChar, date, date, varChar]; + + return client.execute(insertQuery, params) + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + const values = result.ColumnValues[0]; + + expect(values) + .to.be.an('array') + .with.length(supportsENUM ? 20 : 19); + + expect(values[0]) + .to.be.a('number') + .to.equal(15); + + expect(values[1]) + .to.be.an.instanceOf(Buffer); + + expect(values[1]) + .to.have.length(1); + + expect(values[1][0]) + .to.equal(0); + + expect(values[2]) + .to.be.an.instanceOf(Buffer); + + expect(values[2]) + .to.have.length(1); + + expect(values[2][0]) + .to.equal(0); + + expect(values[3]) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number') + .to.equal(CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); + + expect(values[3]) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(lobField.length); + + const re = new RegExp(`file:.+/demodb/.+/${TABLE_NAME}\.[\\d_]+`); + + expect(values[3]) + .to.have.property('fileLocator') + .to.be.a('string') + .to.match(re); + + expect(values[3]) + .to.have.property('packedLobHandle') + .to.be.an.instanceOf(Buffer); + + expect(values[3].packedLobHandle) + .to.have.length(values[3].fileLocator.length + /* db_type */4 + /* log size*/ 8 + /* locator size */ 4 + /* null */1); + + expect(values[4]) + .to.be.a('string') + .to.equal(char); + + expect(values[5]) + .to.be.an('object') + .to.have.property('lobType') + .to.be.a('number') + .to.equal(CAS.CUBRIDDataType.CCI_U_TYPE_CLOB); + + expect(values[5]) + .to.have.property('lobLength') + .to.be.a('number') + .to.equal(lobField.length); + + expect(values[5]) + .to.have.property('fileLocator') + .to.be.a('string') + .to.match(re); + + expect(values[5]) + .to.have.property('packedLobHandle') + .to.be.an.instanceOf(Buffer); + + expect(values[5].packedLobHandle) + .to.have.length(values[5].fileLocator.length + /* db_type */4 + /* log size*/ 8 + /* locator size */ 4 + /* null */1); + + expect(values[6]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes time information when + // storing the data in CUBRID into `DATE` type. + let dateOnly = new Date(date); + dateOnly.setUTCHours(0, 0, 0, 0); + + expect(values[6]) + .to.deep.equal(dateOnly); + + expect(values[7]) + .to.be.an.instanceOf(Date); + + expect(values[7]) + .to.deep.equal(date); + + expect(values[8]) + .to.be.a('number') + .to.equal(double); + + expect(values[9]) + .to.be.a('number') + .to.equal(float); + + expect(values[10]) + .to.be.a('number') + .to.equal(int); + + expect(values[11]) + .to.be.a('number') + .to.equal(money); + + expect(values[12]) + .to.be.a('string') + .to.equal(nChar); + + expect(values[13]) + .to.be.a('string') + .to.equal(nVarChar); + + expect(values[14]) + .to.be.a('number') + .to.equal(numeric); + + expect(values[15]) + .to.be.a('string') + .to.equal(varChar); + + expect(values[16]) + .to.be.an.instanceOf(Date); + // We cannot directly compare the date values because + // an instance of `Date` removes date information when + // storing the data in CUBRID as a `TIME` type. + let timeOnly = new Date(date); + timeOnly.setUTCFullYear(1970, 0, 1); + // `TIME` in CUBRID does not include the millisecond part. + timeOnly.setMilliseconds(0); + + expect(values[16]) + .to.deep.equal(timeOnly); + + expect(values[17]) + .to.be.an.instanceOf(Date); + + // We cannot directly compare the date values because + // an instance of `Date` removes millisecond information when + // storing the data in CUBRID as a `TIMESTAMP` type. + let timestamp = new Date(date); + timestamp.setMilliseconds(0); + + expect(values[17]) + .to.deep.equal(timestamp); + + if (supportsENUM) { + expect(values[18]) + .to.be.a('string') + .to.equal(enumString); + + expect(values[19]) + .to.be.a('string') + .to.equal(varChar); + } else { + expect(values[18]) + .to.be.a('string') + .to.equal(varChar); + } + + return client.closeQuery(response.queryHandle); + }) + .then(() => { + return client.close(); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.queryAll.js b/test/CUBRIDConnection.queryAll.js new file mode 100644 index 0000000..49d45b3 --- /dev/null +++ b/test/CUBRIDConnection.queryAll.js @@ -0,0 +1,224 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('queryAll', function () { + function validateFetchResults(result) { + expect(result) + .to.be.an('object') + .to.not.have.property('queryHandle'); + + const TOTAL_ROWS = 8653; + + expect(result) + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(TOTAL_ROWS); + + const COLUMNS_COUNT = 7; + const COLUMN_NAMES = ['host_year', 'event_code', 'athlete_code', 'stadium_code', 'nation_code', 'medal', 'game_date']; + const COLUMN_TYPES = ['Int', 'Int', 'Int', 'Int', 'Char', 'Char', 'Date']; + + expect(result) + .to.have.property('ColumnNames') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnNames) + .to.deep.equal(COLUMN_NAMES); + + expect(result) + .to.have.property('ColumnDataTypes') + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(result.ColumnDataTypes) + .to.deep.equal(COLUMN_TYPES); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(TOTAL_ROWS); + + // Validate the first row. + expect(result.ColumnValues[0]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(2004); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20021); + + expect(columns[2]) + .to.be.a('number') + .to.equal(14345); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30116); + + expect(columns[4]) + .to.be.a('string') + .to.equal('NGR'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('B'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('2004-08-28T09:00:00+0900')); + + return true; + }); + + // Validate the last row. + expect(result.ColumnValues[result.ColumnValues.length - 1]).to.satisfy(columns => { + expect(columns) + .to.be.an('array') + .with.length(COLUMNS_COUNT); + + expect(columns[0]) + .to.be.a('number') + .to.equal(1988); + + expect(columns[1]) + .to.be.a('number') + .to.equal(20084); + + expect(columns[2]) + .to.be.a('number') + .to.equal(16631); + + expect(columns[3]) + .to.be.a('number') + .to.equal(30060); + + expect(columns[4]) + .to.be.a('string') + .to.equal('AUS'); + + expect(columns[5]) + .to.be.a('string') + .to.equal('S'); + + expect(columns[6]) + .to.be.an.instanceOf(Date) + .to.deep.equal(new Date('1988-09-20T10:00:00+1000')); + + return true; + }); + } + + describe('when using the new protocol', function () { + it('should succeed to execute queryAll(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + return client + .queryAll('SELECT * FROM game') + .then(result => { + validateFetchResults(result); + + // The query should be closed automatically. + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to execute queryAll(sql, callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + this.timeout(3000); + + return new Promise((resolve, reject) => { + client.queryAll('SELECT * FROM game', function (err, result) { + if (err) { + return reject(err); + } + + resolve(result); + }) + }) + .then(result => { + validateFetchResults(result); + + // The query should be closed automatically. + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + }); + + describe('when using the old protocol', function () { + it('should succeed to execute queryAll(sql)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + this.timeout(3000); + + return client + .queryAll('SELECT * FROM game') + .then(result => { + validateFetchResults(result); + + // The query should be closed automatically. + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + + it('should succeed to execute queryAll(sql, callback)', function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client.setEnforceOldQueryProtocol(true); + + this.timeout(3000); + + return new Promise((resolve, reject) => { + client.queryAll('SELECT * FROM game', function (err, result) { + if (err) { + return reject(err); + } + + resolve(result); + }) + }) + .then(result => { + validateFetchResults(result); + + // The query should be closed automatically. + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.be.empty; + + return client.close(); + }); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.rollback.js b/test/CUBRIDConnection.rollback.js new file mode 100644 index 0000000..8f8aae5 --- /dev/null +++ b/test/CUBRIDConnection.rollback.js @@ -0,0 +1,257 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('rollback', function () { + const TABLE_NAME = 'test_tran'; + + beforeEach(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + it('should succeed to rollback()', function () { + const client = require('./testSetup').createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.setAutoCommitMode(false); + }) + .then(() => { + return client.batchExecuteNoQuery([`INSERT INTO ${TABLE_NAME} VALUES(1)`]); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return client.rollback(); + }) + .then(() => { + // After rollback the autocommit mode stay the same, i.e. OFF. + // If necessary, the user has to explicitly set it to `true` + // in order to enable the autocommit mode. + expect(client.getAutoCommitMode()).to.be.false; + + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(2); + + return client.setAutoCommitMode(true); + }) + .then(() => { + return client.close(); + }); + }); + + it('should succeed to rollback(callback)', function () { + const client = require('./testSetup').createDefaultCUBRIDDemodbConnection(); + + return client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.setAutoCommitMode(false); + }) + .then(() => { + return client.batchExecuteNoQuery([`INSERT INTO ${TABLE_NAME} VALUES(1)`]); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(1); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.have.all.keys(['' + response.queryHandle]); + + expect(result.ColumnValues[0]) + .to.be.an('array') + .with.length(1); + + expect(result.ColumnValues[0][0]) + .to.be.a('number') + .to.equal(1); + + return new Promise((resolve, reject) => { + client.rollback(function (err) { + if (err) { + return reject(err); + } + + resolve(); + }); + }); + }) + .then(() => { + // After rollback the autocommit mode stay the same, i.e. OFF. + // If necessary, the user has to explicitly set it to `true` + // in order to enable the autocommit mode. + expect(client.getAutoCommitMode()).to.be.false; + + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(0); + + expect(result) + .to.have.property('ColumnValues') + .to.be.an('array') + .with.length(0); + + expect(client) + .to.be.an('object') + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + expect(Object.keys(client._queryResultSets)) + .to.have.length(2); + + return client.setAutoCommitMode(true); + }) + .then(() => { + return client.close(); + }); + }); + + it('should fail to rollback() when the connection is in AUTO_COMMIT_ON mode', function () { + const client = require('./testSetup').createDefaultCUBRIDDemodbConnection(); + + return client + .rollback() + .then(() => { + throw new Error('Should have failed to rollback() when the connection is in AUTO_COMMIT_ON mode.') + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_NO_ROLLBACK); + }); + }); + + it('should fail to rollback(callback) when the connection is in AUTO_COMMIT_ON mode', function (done) { + const client = require('./testSetup').createDefaultCUBRIDDemodbConnection(); + + client.rollback(function (err) { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_NO_ROLLBACK); + + done(); + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.setAutoCommitMode.js b/test/CUBRIDConnection.setAutoCommitMode.js new file mode 100644 index 0000000..b8bbac1 --- /dev/null +++ b/test/CUBRIDConnection.setAutoCommitMode.js @@ -0,0 +1,193 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); + +describe('CUBRIDConnection', function () { + describe('setAutoCommitMode', function () { + const TABLE_NAME = 'tbl_test'; + + before(testSetup.cleanup(TABLE_NAME)); + after(testSetup.cleanup(TABLE_NAME)); + + it('should succeed to disable the auto commit mode and commit manually', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.setAutoCommitMode(false); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.false; + + return client.execute(`INSERT INTO ${TABLE_NAME} VALUES(1)`); + }) + .then(() => { + return client.commit(); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + return client.setAutoCommitMode(true); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.true; + + return client.batchExecuteNoQuery([`DROP TABLE ${TABLE_NAME}`]); + }) + .then(() => { + return client.close(); + }) + .then(done) + .catch(done); + }); + + it('should succeed to disable the auto commit mode and commit manually by providing a falsy parameter 0', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.setAutoCommitMode(0); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.false; + + return client.execute(`INSERT INTO ${TABLE_NAME} VALUES(1)`); + }) + .then(() => { + return client.commit(); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + return client.setAutoCommitMode(true); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.true; + + return client.batchExecuteNoQuery([`DROP TABLE ${TABLE_NAME}`]); + }) + .then(() => { + return client.close(); + }) + .then(done) + .catch(done); + }); + + it('should succeed to disable the auto commit mode and commit manually by providing a falsy parameter "" (empty string)', function (done) { + const client = testSetup.createDefaultCUBRIDDemodbConnection(); + + client + .connect() + .then(() => { + return client.execute(`CREATE TABLE ${TABLE_NAME}(id INT)`); + }) + .then(() => { + return client.setAutoCommitMode(""); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.false; + + return client.execute(`INSERT INTO ${TABLE_NAME} VALUES(1)`); + }) + .then(() => { + return client.commit(); + }) + .then(() => { + return client.query(`SELECT * FROM ${TABLE_NAME}`); + }) + .then(response => { + expect(response) + .to.be.an('object') + .to.have.property('queryHandle') + .to.be.a('number') + .to.be.above(0); + + expect(response) + .to.have.property('result') + .to.be.an('object'); + + let result = response.result; + + expect(result) + .to.be.an('object') + .to.have.property('RowsCount') + .to.be.a('number') + .to.equal(1); + + expect(client) + .to.have.property('_queryResultSets') + .to.be.an('object') + .to.contain.keys(['' + response.queryHandle]); + + return client.setAutoCommitMode(true); + }) + .then(() => { + expect(client.getAutoCommitMode()).to.be.true; + + return client.batchExecuteNoQuery([`DROP TABLE ${TABLE_NAME}`]); + }) + .then(() => { + return client.close(); + }) + .then(done) + .catch(done); + }); + }); +}); diff --git a/test/CUBRIDConnection.setConnectionTimeout.js b/test/CUBRIDConnection.setConnectionTimeout.js new file mode 100644 index 0000000..94629c8 --- /dev/null +++ b/test/CUBRIDConnection.setConnectionTimeout.js @@ -0,0 +1,46 @@ +'use strict'; + +const expect = require('chai').expect; + +describe('CUBRIDConnection', function () { + describe('setConnectionTimeout', function () { + it('should succeed to set the connection timeout value', function () { + const CUBRID = require('../'); + const ErrorMessages = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/ErrorMessages'); + const client = new CUBRID.createCUBRIDConnection('www.google.com', 33000, 'public', '', 'demodb'); + const newTimeoutValue = 1500; + + expect(client.getConnectionTimeout()).to.equal(0); + + client.setConnectionTimeout(newTimeoutValue); + expect(client.getConnectionTimeout()).to.equal(newTimeoutValue); + + client.setConnectionTimeout(0); + expect(client.getConnectionTimeout()).to.equal(0); + + client.setConnectionTimeout(-3000); + expect(client.getConnectionTimeout()).to.equal(0); + + client.setConnectionTimeout(newTimeoutValue); + expect(client.getConnectionTimeout()).to.equal(newTimeoutValue); + + client.setConnectionTimeout(newTimeoutValue); + expect(client.getConnectionTimeout()).to.equal(newTimeoutValue); + + // By default the client will retry the connection one more time + // if it failed, so the timeout should be increased. + this.timeout(newTimeoutValue * 3); + + return client + .connect() + .then(() => { + throw new Error('Connection should have failed.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.message).to.equal(ErrorMessages.ERROR_CONNECTION_TIMEOUT); + expect(client.connectionOpened).to.be.false; + }); + }); + }); +}); diff --git a/test/CUBRIDConnection.setDatabaseParameter.js b/test/CUBRIDConnection.setDatabaseParameter.js new file mode 100644 index 0000000..1d4bd28 --- /dev/null +++ b/test/CUBRIDConnection.setDatabaseParameter.js @@ -0,0 +1,41 @@ +'use strict'; + +const expect = require('chai').expect; +const testSetup = require('./testSetup'); +const CAS = require('../src/constants/CASConstants'); +const ErrorMessages = require('../src/constants/ErrorMessages'); + +describe('CUBRIDConnection', function () { + describe('setDatabaseParameter', function () { + it(`should fail to set the database parameter`, function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const paramName = CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH; + + return client + .setDatabaseParameter(paramName, 0) + .then(() => { + return new Error('Should have failed to set the database parameter.'); + }) + .catch(err => { + expect(err).to.be.an.instanceOf(Error); + expect(err.code).to.equal(-1011); + expect(err.message).to.equal(ErrorMessages.resolveErrorCode(err.code)); + + return client.close(); + }); + }); + + it(`should succeed to set the isolation level parameter`, function () { + let client = testSetup.createDefaultCUBRIDDemodbConnection(); + + const paramName = CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL; + + return client + .setDatabaseParameter(paramName, CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE) + .then(() => { + return client.close(); + }); + }); + }); +}); diff --git a/test/Helpers.js b/test/Helpers.js new file mode 100644 index 0000000..f30c472 --- /dev/null +++ b/test/Helpers.js @@ -0,0 +1,92 @@ +'use strict'; + +let expect = require('chai').expect; + +const codeCoveragePath = process.env.CODE_COV ? '-cov' : ''; +const Helpers = require('../src' + codeCoveragePath + '/utils/Helpers'); + +it('should succeed to validate the input', function () { + let sql = 'INSERT INTO a VALUES(?, ?, ?)'; + let newSQL = Helpers._sqlFormat(sql, ['1', 2, null], ["'", '', '']); + + expect(newSQL).to.equal("INSERT INTO a VALUES('1', 2, NULL)"); + + expect(Helpers._escapeString('INSERT INTO "a VALUES(\b)')).to.equal('INSERT INTO ""a VALUES(\\b)'); + + sql = 'stringWithDouble"Quote'; + + // Should not escape the double quote if the delimiter is a single quote. + expect(Helpers._escapeString(sql, "'")).to.equal(sql); + + sql = "stringWithSingle'Quote"; + + // Should not escape the single quote if the delimiter is a double quote. + expect(Helpers._escapeString(sql, '"')).to.equal(sql); + + sql = 'INSERT INTO a VALUES(?, ?, ?)'; + newSQL = Helpers._sqlFormat(sql, ['stringWithDouble"Quote', 2, null]); + + expect(newSQL).to.equal("INSERT INTO a VALUES('stringWithDouble\"Quote', 2, NULL)"); + + // Test Input validation functions + expect(Helpers._validateInputBoolean(null)).to.be.false; + expect(Helpers._validateInputBoolean(4)).to.be.false; + expect(Helpers._validateInputBoolean(3.14)).to.be.false; + expect(Helpers._validateInputBoolean('qwerty')).to.be.false; + expect(Helpers._validateInputBoolean(true)).to.be.true; + expect(Helpers._validateInputBoolean(1)).to.be.true; + + expect(Helpers._validateInputPositive(null)).to.be.false; + expect(Helpers._validateInputPositive(3.14)).to.be.true; + expect(Helpers._validateInputPositive(-1)).to.be.false; + expect(Helpers._validateInputPositive(0)).to.be.true; + expect(Helpers._validateInputPositive(14)).to.be.true; + + expect(Helpers._validateInputTimeout(null)).to.be.false; + expect(Helpers._validateInputTimeout(3.14)).to.be.false; + expect(Helpers._validateInputTimeout(-1)).to.be.false; + expect(Helpers._validateInputTimeout(0)).to.be.true; + expect(Helpers._validateInputTimeout(14)).to.be.true; + + expect(Helpers._validateInputString(null)).to.be.false; + expect(Helpers._validateInputString(3)).to.be.false; + expect(Helpers._validateInputString(true)).to.be.false; + expect(Helpers._validateInputString('')).to.be.false; + expect(Helpers._validateInputString('querty')).to.be.true; + + expect(Helpers._validateInputSQLString(null)).to.be.false; + expect(Helpers._validateInputSQLString(3)).to.be.false; + expect(Helpers._validateInputSQLString(true)).to.be.false; + expect(Helpers._validateInputSQLString('')).to.be.false; + expect(Helpers._validateInputSQLString('a')).to.be.false; + expect(Helpers._validateInputSQLString('qwerty')).to.be.true; +}); + +//exports['_sqlFormat()'] = function (test) { +// var arr = [ +// { +// sql: 'INSERT INTO project (projectname, team, creator, description, log_limit, esm_code, sink_config, createtime, lastmodified) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', +// values: ['qqqesen', 'qa', 60136, '1234123412', 20000000, '123456', JSON.stringify({ +// type: "hdfs", +// server: [ +// { +// ip: "1.1.1.1", +// port: 2222 +// } +// ], +// user: "hadoop", +// path:"/data" +// }), '2013-09-25 17:00:52', '2013-09-25 17:00:52'], +// outputSQL: "INSERT INTO project (projectname, team, creator, description, log_limit, esm_code, sink_config, createtime, lastmodified) VALUES ('qqqesen', 'qa', 60136, '1234123412', 20000000, '123456', '{\"type\":\"hdfs\",\"server\":[{\"ip\":\"1.1.1.1\",\"port\":2222}],\"user\":\"hadoop\",\"path\":\"/data\"}', '2013-09-25 17:00:52', '2013-09-25 17:00:52')" +// } +// ]; +// +// test.expect(arr.length); +// +// async.each(arr, function(obj, done) { +// Helpers._sqlFormat(obj.sql, obj.values); +// }, function (err) { +// +// }); +// +//}; diff --git a/test/old_tests/packets/test_BatchExecuteNoQueryPacket.js b/test/old_tests/packets/test_BatchExecuteNoQueryPacket.js deleted file mode 100644 index 20c9cde..0000000 --- a/test/old_tests/packets/test_BatchExecuteNoQueryPacket.js +++ /dev/null @@ -1,46 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - BatchExecuteNoQueryPacket = require('../BatchExecuteNoQueryPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testBatchExecuteNoQueryPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {SQLs : ['create table t1(id int)', 'drop table t1'], - casInfo : [0, 255, 255, 255], autoCommitMode : 1, dbVersion : '8.4.1'}; - var batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket(options); - - batchExecuteNoQueryPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 52); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_EXECUTE_BATCH); - assert.equal(packetWriter._toBuffer()[13], 1); - assert.equal(packetWriter._toBuffer().slice(18, 41).toString(), 'create table t1(id int)'); - assert.equal(packetWriter._toBuffer().slice(41 + 1 + 4, 59).toString(), 'drop table t1'); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - batchExecuteNoQueryPacket.parse(packetReader); - - assert.equal(batchExecuteNoQueryPacket.casInfo[0], 0); // CasInfo - assert.equal(batchExecuteNoQueryPacket.casInfo[1], 255); // CasInfo - assert.equal(batchExecuteNoQueryPacket.casInfo[2], 255); // CasInfo - assert.equal(batchExecuteNoQueryPacket.casInfo[3], 255); // CasInfo - - assert.equal(batchExecuteNoQueryPacket.responseCode, 0); - - assert.equal(batchExecuteNoQueryPacket.errorCode, 0); - assert.equal(batchExecuteNoQueryPacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testBatchExecuteNoQueryPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_ClientInfoExchangePacket.js b/test/old_tests/packets/test_ClientInfoExchangePacket.js deleted file mode 100644 index 24264a8..0000000 --- a/test/old_tests/packets/test_ClientInfoExchangePacket.js +++ /dev/null @@ -1,25 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - ClientInfoExchange = require('../ClientInfoExchangePacket'), - assert = require('assert'); - -function testClientInfoExchangePacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var clientInfoExchange = new ClientInfoExchange(); - - clientInfoExchange.write(packetWriter); - assert.equal(packetWriter._toBuffer().slice(0, 5), 'CUBRK'); - assert.equal(packetWriter._toBuffer()[5], 3); - - packetReader.write(new Buffer([0, 0, 1, 2])); //=258 - clientInfoExchange.parse(packetReader); - assert.equal(clientInfoExchange.newConnectionPort, 258); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testClientInfoExchangePacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_CloseDatabasePacket.js b/test/old_tests/packets/test_CloseDatabasePacket.js deleted file mode 100644 index b7bfe7b..0000000 --- a/test/old_tests/packets/test_CloseDatabasePacket.js +++ /dev/null @@ -1,45 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - CloseDatabasePacket = require('../CloseDatabasePacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testCloseConnectionPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255]}; - var closeDatabasePacket = new CloseDatabasePacket(options); - - closeDatabasePacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 1); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_CON_CLOSE); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - assert.equal(packetReader._packetLength(), 12); - - closeDatabasePacket.parse(packetReader); - - assert.equal(closeDatabasePacket.casInfo[0], 0); // CasInfo - assert.equal(closeDatabasePacket.casInfo[1], 255); // CasInfo - assert.equal(closeDatabasePacket.casInfo[2], 255); // CasInfo - assert.equal(closeDatabasePacket.casInfo[3], 255); // CasInfo - - assert.equal(closeDatabasePacket.responseCode, 0); - - assert.equal(closeDatabasePacket.errorCode, 0); - assert.equal(closeDatabasePacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testCloseConnectionPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_CloseQueryPacket.js b/test/old_tests/packets/test_CloseQueryPacket.js deleted file mode 100644 index b5955ea..0000000 --- a/test/old_tests/packets/test_CloseQueryPacket.js +++ /dev/null @@ -1,49 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - CloseQueryPacket = require('../CloseQueryPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testCloseQueryPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255], dbVersion : '8.4.1'}; - var closeQueryPacket = new CloseQueryPacket(options); - - closeQueryPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 14); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_CLOSE_REQ_HANDLE); - assert.equal(packetWriter._toBuffer()[12], 4); - assert.equal(packetWriter._toBuffer()[16], 0); - assert.equal(packetWriter._toBuffer()[20], 1); - assert.equal(packetWriter._toBuffer()[21], 0); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - assert.equal(packetReader._packetLength(), 12); - - closeQueryPacket.parse(packetReader); - - assert.equal(closeQueryPacket.casInfo[0], 0); // CasInfo - assert.equal(closeQueryPacket.casInfo[1], 255); // CasInfo - assert.equal(closeQueryPacket.casInfo[2], 255); // CasInfo - assert.equal(closeQueryPacket.casInfo[3], 255); // CasInfo - - assert.equal(closeQueryPacket.responseCode, 0); - - assert.equal(closeQueryPacket.errorCode, 0); - assert.equal(closeQueryPacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testCloseQueryPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_CommitPacket.js b/test/old_tests/packets/test_CommitPacket.js deleted file mode 100644 index abfdeb0..0000000 --- a/test/old_tests/packets/test_CommitPacket.js +++ /dev/null @@ -1,47 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - CommitPacket = require('../CommitPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testCommitPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255], dbVersion : '8.4.1'}; - var commitPacket = new CommitPacket(options); - - commitPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 6); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_END_TRAN); - assert.equal(packetWriter._toBuffer()[12], 1); - assert.equal(packetWriter._toBuffer()[13], CAS.CCITransactionType.CCI_TRAN_COMMIT); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - assert.equal(packetReader._packetLength(), 12); - - commitPacket.parse(packetReader); - - assert.equal(commitPacket.casInfo[0], 0); // CasInfo - assert.equal(commitPacket.casInfo[1], 255); // CasInfo - assert.equal(commitPacket.casInfo[2], 255); // CasInfo - assert.equal(commitPacket.casInfo[3], 255); // CasInfo - - assert.equal(commitPacket.responseCode, 0); - - assert.equal(commitPacket.errorCode, 0); - assert.equal(commitPacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testCommitPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_ExecuteQueryPacket.js b/test/old_tests/packets/test_ExecuteQueryPacket.js deleted file mode 100644 index 8a6c1f8..0000000 --- a/test/old_tests/packets/test_ExecuteQueryPacket.js +++ /dev/null @@ -1,52 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - ExecuteQueryPacket = require('../ExecuteQueryPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testExecuteQueryPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {sql : 'select * from code', casInfo : [0, 255, 255, 255], autoCommitMode : 1, dbVersion : '8.4.1'}; - var executeQueryPacket = new ExecuteQueryPacket(options); - - executeQueryPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 87); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_PREPARE_AND_EXECUTE); - assert.equal(packetWriter._toBuffer()[16], 3); - assert.equal(packetWriter._toBuffer().slice(21, 39).toString(), 'select * from code'); - assert.equal(packetWriter._toBuffer()[44], 0); - assert.equal(packetWriter._toBuffer()[49], 1); - assert.equal(packetWriter._toBuffer()[54], CAS.CCIExecutionOption.CCI_EXEC_QUERY_ALL); - assert.equal(packetWriter._toBuffer()[62], 0); - assert.equal(packetWriter._toBuffer()[70], 0); - assert.equal(packetWriter._toBuffer()[82], 0); - assert.equal(packetWriter._toBuffer()[86], 0); - assert.equal(packetWriter._toBuffer()[94], 0); - - packetReader.write(new Buffer([0, 0, 1, 57, 0, 255, 255, 255, 0, 0, 0, 4, 255, 255, 255, 255, 21, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 115, 95, 110, 97, 109, 101, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 102, - 95, 110, 97, 109, 101, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 1, 21, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 88, 0, 0, 0, 0, 6, 77, 105, 120, 101, 100, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 87, 0, 0, - 0, 0, 6, 87, 111, 109, 97, 110, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 77, 0, 0, 0, 0, 4, 77, 97, 110, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 66, 0, 0, 0, 0, 7, 66, 114, 111, 110, 122, 101, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 83, 0, 0, 0, 0, 7, 83, 105, 108, 118, 101, 114, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 71, 0, 0, 0, 0, 5, - 71, 111, 108, 100, 0])); - - var resultSet = executeQueryPacket.parse(packetReader).resultSet; - assert.equal(resultSet, '{"ColumnNames":["s_name","f_name"],"ColumnDataTypes":["Char","String"],"RowsCount":6,"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"],["B","Bronze"],["S","Silver"],["G","Gold"]]}'); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testExecuteQueryPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_FetchPacket.js b/test/old_tests/packets/test_FetchPacket.js deleted file mode 100644 index 39f3100..0000000 --- a/test/old_tests/packets/test_FetchPacket.js +++ /dev/null @@ -1,66 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - ExecuteQueryPacket = require('../ExecuteQueryPacket'), - FetchPacket = require('../FetchPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testFetchPacket() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = - { - casInfo : [0, 255, 255, 255], - dbVersion : '8.4.1' - }; - - packetReader = new PacketReader(); - packetWriter = new PacketWriter(); - options = {sql : 'select * from code', casInfo : [0, 255, 255, 255], autoCommitMode : 1, dbVersion : '8.4.1'}; - var executeQueryPacket = new ExecuteQueryPacket(options); - executeQueryPacket.write(packetWriter); - packetReader.write(new Buffer([0, 0, 1, 57, 0, 255, 255, 255, 0, 0, 0, 4, 255, 255, 255, 255, 21, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 115, 95, 110, 97, 109, 101, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 102, - 95, 110, 97, 109, 101, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 1, 21, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 88, 0, 0, 0, 0, 6, 77, 105, 120, 101, 100, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 87, 0, 0, - 0, 0, 6, 87, 111, 109, 97, 110, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 77, 0, 0, 0, 0, 4, 77, 97, 110, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 66, 0, 0, 0, 0, 7, 66, 114, 111, 110, 122, 101, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 83, 0, 0, 0, 0, 7, 83, 105, 108, 118, 101, 114, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 71, 0, 0, 0, 0, 5, - 71, 111, 108, 100, 0])); - var resultSet = executeQueryPacket.parse(packetReader).resultSet; - assert.equal(resultSet, '{"ColumnNames":["s_name","f_name"],"ColumnDataTypes":["Char","String"],"RowsCount":6,"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"],["B","Bronze"],["S","Silver"],["G","Gold"]]}'); - - packetReader = new PacketReader(); - packetWriter = new PacketWriter(); - var fetchPacket = new FetchPacket(options); - fetchPacket.write(packetWriter, executeQueryPacket); - assert.equal(packetWriter._toBuffer()[3], 38); // Total length - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_FETCH); - assert.equal(packetWriter._toBuffer()[16], 4); - assert.equal(packetWriter._toBuffer()[24], 7); - assert.equal(packetWriter._toBuffer()[32], 100); - assert.equal(packetWriter._toBuffer()[37], 0); - assert.equal(packetWriter._toBuffer()[45], 0); - - packetReader.write(new Buffer([0, 0, 0, 0, - 0, 255, 255, 255, - 0, 0, 0, 0, - 0, 0, 0, 0])); - fetchPacket.parse(packetReader, executeQueryPacket); - - assert.equal(fetchPacket.casInfo[0], 0); // CasInfo - assert.equal(fetchPacket.casInfo[1], 255); // CasInfo - assert.equal(fetchPacket.casInfo[2], 255); // CasInfo - assert.equal(fetchPacket.casInfo[3], 255); // CasInfo - - assert.equal(fetchPacket.responseCode, 0); - assert.equal(fetchPacket.errorCode, 0); - assert.equal(fetchPacket.errorMsg, ''); - - assert.equal(fetchPacket.tupleCount, 0); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); -testFetchPacket(); -console.log('Unit test ended OK.'); diff --git a/test/old_tests/packets/test_GetDbParameterPacket.js b/test/old_tests/packets/test_GetDbParameterPacket.js deleted file mode 100644 index e36e0a9..0000000 --- a/test/old_tests/packets/test_GetDbParameterPacket.js +++ /dev/null @@ -1,43 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - GetDbParameterPacket = require('../GetDbParameterPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testGetDbParameter() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = - { - casInfo : [0, 255, 255, 255], - parameter : CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH - }; - var getDbParameterPacket = new GetDbParameterPacket(options); - - getDbParameterPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 9); // Total length - assert.equal(packetWriter._toBuffer()[8], 4); - assert.equal(packetWriter._toBuffer()[12], CAS.CASFunctionCode.CAS_FC_GET_DB_PARAMETER); - assert.equal(packetWriter._toBuffer()[16], CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH); - - packetReader.write(new Buffer([0, 0, 0, 0, - 0, 255, 255, 255, - 0, 0, 0, 0, - 0, 0, 0, 99])); - getDbParameterPacket.parse(packetReader); - - assert.equal(getDbParameterPacket.casInfo[0], 0); // CasInfo - assert.equal(getDbParameterPacket.casInfo[1], 255); // CasInfo - assert.equal(getDbParameterPacket.casInfo[2], 255); // CasInfo - assert.equal(getDbParameterPacket.casInfo[3], 255); // CasInfo - - assert.equal(getDbParameterPacket.responseCode, 0); - assert.equal(getDbParameterPacket.errorCode, 0); - assert.equal(getDbParameterPacket.errorMsg, ''); - - assert.equal(getDbParameterPacket.value, 99); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); -testGetDbParameter(); -console.log('Unit test ended OK.'); diff --git a/test/old_tests/packets/test_GetEngineVersionPacket.js b/test/old_tests/packets/test_GetEngineVersionPacket.js deleted file mode 100644 index 5ae8b76..0000000 --- a/test/old_tests/packets/test_GetEngineVersionPacket.js +++ /dev/null @@ -1,50 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - GetEngineVersionPacket = require('../GetEngineVersionPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testGetEngineVersionPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255]}; - var getEngineVersionPacket = new GetEngineVersionPacket(options); - - getEngineVersionPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 6); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_GET_DB_VERSION); - assert.equal(packetWriter._toBuffer()[12], 1); - assert.equal(packetWriter._toBuffer()[13], 1); - - packetReader.write(new Buffer([0, 0, 0, 15, - 0, 255, 255, 255, - 0, 0, 0, 0])); - packetReader._append(new Buffer('8.4.1.0056')); - packetReader._append(new Buffer([0])); - getEngineVersionPacket.parse(packetReader); - - assert.equal(getEngineVersionPacket.casInfo[0], 0); // CasInfo - assert.equal(getEngineVersionPacket.casInfo[1], 255); // CasInfo - assert.equal(getEngineVersionPacket.casInfo[2], 255); // CasInfo - assert.equal(getEngineVersionPacket.casInfo[3], 255); // CasInfo - - assert.equal(getEngineVersionPacket.responseCode, 0); - - assert.equal(getEngineVersionPacket.errorCode, 0); - assert.equal(getEngineVersionPacket.errorMsg, ''); - - assert.equal(getEngineVersionPacket.engineVersion, '8.4.1.0056'); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testGetEngineVersionPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_GetSchemaPacket.js b/test/old_tests/packets/test_GetSchemaPacket.js deleted file mode 100644 index 483de76..0000000 --- a/test/old_tests/packets/test_GetSchemaPacket.js +++ /dev/null @@ -1,68 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - GetSchemaPacket = require('../GetSchemaPacket.js'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function test_GetSchemaPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = { - casInfo : [0, 255, 255, 255], - tableNamePattern : null, - schemaType : CAS.CUBRIDSchemaType.CCI_SCH_CLASS, - dbVersion : '8.4.1'}; - var getSchemaPacket = new GetSchemaPacket(options); - - getSchemaPacket.writeRequestSchema(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 1 + 5 * 4 + 1); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_SCHEMA_INFO); - assert.equal(packetWriter._toBuffer()[16], CAS.CUBRIDSchemaType.CCI_SCH_CLASS); - assert.equal(packetWriter._toBuffer()[21], 0); - assert.equal(packetWriter._toBuffer()[28], 1); - assert.equal(packetWriter._toBuffer()[29], 3); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 1])); - - assert.equal(packetReader._packetLength(), 12); - - getSchemaPacket.parseRequestSchema(packetReader); - - assert.equal(getSchemaPacket.casInfo[0], 0); // CasInfo - assert.equal(getSchemaPacket.casInfo[1], 255); // CasInfo - assert.equal(getSchemaPacket.casInfo[2], 255); // CasInfo - assert.equal(getSchemaPacket.casInfo[3], 255); // CasInfo - - assert.equal(getSchemaPacket.responseCode, 1); - - assert.equal(getSchemaPacket.errorCode, 0); - assert.equal(getSchemaPacket.errorMsg, ''); - - packetWriter = new PacketWriter(); - getSchemaPacket.writeFetchSchema(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 38); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_FETCH); - assert.equal(packetWriter._toBuffer()[16], 1); - assert.equal(packetWriter._toBuffer()[24], 1); - assert.equal(packetWriter._toBuffer()[32], 0); - assert.equal(packetWriter._toBuffer()[37], 0); - assert.equal(packetWriter._toBuffer()[45], 0); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -test_GetSchemaPacket_01(); - -console.log('Unit test ended OK.'); diff --git a/test/old_tests/packets/test_LOBNewPacket.js b/test/old_tests/packets/test_LOBNewPacket.js deleted file mode 100644 index f57cdb5..0000000 --- a/test/old_tests/packets/test_LOBNewPacket.js +++ /dev/null @@ -1,52 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - LOBNewPacket = require('../LOBNewPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testLOBReadPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255], lobType : CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, dbVersion : '8.4.1'}; - var lobnewPacket = new LOBNewPacket(options); - - lobnewPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 9); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_LOB_NEW); - assert.equal(packetWriter._toBuffer()[12], 4); - assert.equal(packetWriter._toBuffer()[16], CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); - - packetReader.write(new Buffer([0, 0, 0, 99, 1, 255, 255, 255, 0, 0, 0, 95, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 79, 102, 105, 108, 101, 58, 67, 58, 92, 67, 85, 66, 82, 73, 68, 92, 100, 97, 116, - 97, 98, 97, 115, 101, 115, 92, 100, 101, 109, 111, 100, 98, 47, 108, 111, 98, 47, 99, - 101, 115, 95, 50, 49, 50, 47, 99, 101, 115, 95, 116, 101, 109, 112, 46, 48, 48, 48, 48, - 49, 51, 54, 50, 49, 51, 54, 54, 49, 51, 53, 52, 54, 48, 48, 48, 95, 48, 48, 52, 49, 0, - 0, 0, 0, 30, 0, 255, 255, 255, 0, 0, 0, 1, 0, 0, 0, 0, 1, 20, 0, 0, 0, 1, 0, 0, 22, 128, - 11, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])); - var lobHandle = lobnewPacket.parse(packetReader).result; - - assert.equal(lobnewPacket.casInfo[0], 1); // CasInfo - assert.equal(lobnewPacket.casInfo[1], 255); // CasInfo - assert.equal(lobnewPacket.casInfo[2], 255); // CasInfo - assert.equal(lobnewPacket.casInfo[3], 255); // CasInfo - - assert.equal(lobnewPacket.responseCode, 95); - assert.equal(lobnewPacket.errorCode, 0); - assert.equal(lobnewPacket.errorMsg, ''); - assert.equal(lobHandle.lobType, CAS.CUBRIDDataType.CCI_U_TYPE_BLOB); - assert.equal(lobHandle.fileLocator, "file:C:\\CUBRID\\databases\\demodb/lob/ces_212/ces_temp.00001362136613546000_0041"); - assert.equal(lobHandle.lobLength, 0); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testLOBReadPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_LOBReadPacket.js b/test/old_tests/packets/test_LOBReadPacket.js deleted file mode 100644 index 6f36066..0000000 --- a/test/old_tests/packets/test_LOBReadPacket.js +++ /dev/null @@ -1,75 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - LOBReadPacket = require('../LOBReadPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testLOBReadPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - - var packedLobHandle = new Buffer([0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 79, 102, 105, 108, 101, 58, - 67, 58, 92, 67, 85, 66, 82, 73, 68, 92, 100, 97, 116, 97, 98, 97, 115, 101, 115, 92, 100, 101, 109, 111, 100, - 98, 47, 108, 111, 98, 47, 99, 101, 115, 95, 48, 56, 50, 47, 116, 101, 115, 116, 95, 108, 111, 98, 46, 48, 48, - 48, 48, 49, 51, 54, 49, 57, 55, 54, 53, 52, 50, 48, 48, 48, 48, 48, 48, 95, 56, 49, 52, 53, 0 - ]); - var lobHandle = - { - lobType : CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, // BLOB type - packedLobHandle : packedLobHandle, - fileLocator : 'file:C:\\CUBRID\\databases\\demodb/lob/ces_670/test_lob.00001361976357078000_1538', - lobLength : 4 - }; - var options = { - casInfo : [0, 255, 255, 255], - lobObject : lobHandle, - position : 0, - lengthToRead : 4, - dbVersion : '8.4.1' - }; - var lobReadPacket = new LOBReadPacket(options); - lobReadPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 120); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_LOB_READ); - assert.equal(packetWriter._toBuffer()[12], 95); - for (var i = 0; i < packedLobHandle.length; i++) { - assert.equal(packetWriter._toBuffer().slice(13, 110)[i], packedLobHandle[i]); - } - assert.equal(packetWriter._toBuffer()[111], 8); - assert.equal(packetWriter._toBuffer()[119], 0); - assert.equal(packetWriter._toBuffer()[127], 4); - - packetReader.write(new Buffer([0, 0, 0, 15, - 0, 255, 255, 255, - 0, 0, 0, 4, - 1, 2, 3, 4])); - lobReadPacket.parse(packetReader); - - assert.equal(lobReadPacket.casInfo[0], 0); // CasInfo - assert.equal(lobReadPacket.casInfo[1], 255); // CasInfo - assert.equal(lobReadPacket.casInfo[2], 255); // CasInfo - assert.equal(lobReadPacket.casInfo[3], 255); // CasInfo - - assert.equal(lobReadPacket.responseCode, 4); - - assert.equal(lobReadPacket.errorCode, 0); - assert.equal(lobReadPacket.errorMsg, ''); - - assert.equal(lobReadPacket.lobBuffer[0], 1); - assert.equal(lobReadPacket.lobBuffer[1], 2); - assert.equal(lobReadPacket.lobBuffer[2], 3); - assert.equal(lobReadPacket.lobBuffer[3], 4); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testLOBReadPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_LOBWritePacket.js b/test/old_tests/packets/test_LOBWritePacket.js deleted file mode 100644 index cec92b7..0000000 --- a/test/old_tests/packets/test_LOBWritePacket.js +++ /dev/null @@ -1,77 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - LOBWritePacket = require('../LOBWritePacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testLOBReadPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var packedLobHandle = new Buffer([0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 79, 102, 105, 108, 101, 58, - 67, 58, 92, 67, 85, 66, 82, 73, 68, 92, 100, 97, 116, 97, 98, 97, 115, 101, 115, 92, 100, 101, 109, 111, 100, - 98, 47, 108, 111, 98, 47, 99, 101, 115, 95, 48, 56, 50, 47, 116, 101, 115, 116, 95, 108, 111, 98, 46, 48, 48, - 48, 48, 49, 51, 54, 49, 57, 55, 54, 53, 52, 50, 48, 48, 48, 48, 48, 48, 95, 56, 49, 52, 53, 0 - ]); - var lobHandle = - { - lobType : CAS.CUBRIDDataType.CCI_U_TYPE_BLOB, // BLOB type - packedLobHandle : packedLobHandle, - fileLocator : 'file:C:\\CUBRID\\databases\\demodb/lob/ces_670/test_lob.00001361976357078000_1538', - lobLength : 4 - }; - var value = new Buffer([1, 2, 3, 4]); - - var options = { - casInfo : [0, 255, 255, 255], - lobObject : lobHandle, - position : 0, - data : value, - writeLen : 4, - dbVersion : '8.4.1' - }; - var lobWritePacket = new LOBWritePacket(options); - - lobWritePacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 120); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_LOB_WRITE); - assert.equal(packetWriter._toBuffer()[12], 95); - for (var i = 0; i < packedLobHandle.length; i++) { - assert.equal(packetWriter._toBuffer().slice(13, 110)[i], packedLobHandle[i]); - } - assert.equal(packetWriter._toBuffer()[111], 8); - assert.equal(packetWriter._toBuffer()[119], 0); - assert.equal(packetWriter._toBuffer()[123], 4); - assert.equal(packetWriter._toBuffer()[124], 1); - assert.equal(packetWriter._toBuffer()[125], 2); - assert.equal(packetWriter._toBuffer()[126], 3); - assert.equal(packetWriter._toBuffer()[127], 4); - - packetReader.write(new Buffer([0, 0, 0, 4, - 0, 255, 255, 255, - 0, 0, 0, 4, - 1, 2, 3, 4])); - lobWritePacket.parse(packetReader); - - assert.equal(lobWritePacket.casInfo[0], 0); // CasInfo - assert.equal(lobWritePacket.casInfo[1], 255); // CasInfo - assert.equal(lobWritePacket.casInfo[2], 255); // CasInfo - assert.equal(lobWritePacket.casInfo[3], 255); // CasInfo - - assert.equal(lobWritePacket.responseCode, 4); - - assert.equal(lobWritePacket.errorCode, 0); - assert.equal(lobWritePacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testLOBReadPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_OpenDatabasePacket.js b/test/old_tests/packets/test_OpenDatabasePacket.js deleted file mode 100644 index 50ed2a6..0000000 --- a/test/old_tests/packets/test_OpenDatabasePacket.js +++ /dev/null @@ -1,44 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - OpenDatabasePacket = require('../OpenDatabasePacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testLoginToDatabasePacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {database : 'demodb', user : 'public', password : ''}; - var openDatabasePacket = new OpenDatabasePacket(options); - - openDatabasePacket.write(packetWriter); - assert.equal(packetWriter._toBuffer().slice(0, 6).toString(), options.database); - assert.equal(packetWriter._toBuffer().slice(32, 38).toString(), options.user); - assert.equal(packetWriter._toBuffer().slice(64, 65)[0], 0); - - packetReader.write(new Buffer([0, 0, 0, 15, - 0, 255, 255, 255, - 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, - 0, 0, 0, 3])); - openDatabasePacket.parse(packetReader); - - assert.equal(openDatabasePacket.casInfo[0], 0); // CasInfo - assert.equal(openDatabasePacket.casInfo[1], 255); // CasInfo - assert.equal(openDatabasePacket.casInfo[2], 255); // CasInfo - assert.equal(openDatabasePacket.casInfo[3], 255); // CasInfo - - assert.equal(openDatabasePacket.responseCode, 0); - - assert.equal(openDatabasePacket.errorCode, 0); - assert.equal(openDatabasePacket.errorMsg, ''); - - assert.equal(openDatabasePacket.brokerInfo[0], 5); - assert.equal(openDatabasePacket.sessionId, 3); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testLoginToDatabasePacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_PacketWriter_PacketReader.js b/test/old_tests/packets/test_PacketWriter_PacketReader.js deleted file mode 100644 index bbd4db0..0000000 --- a/test/old_tests/packets/test_PacketWriter_PacketReader.js +++ /dev/null @@ -1,301 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - assert = require('assert'); - -var bValue = 0xEF; //=239 -var cValue = 'x'; -var shortValue = 0x70; -var iValue = 0x7ABC; -var shortValueSigned = 0x8001; -var iValueSigned = 0x80000001; -var sValue = '0987654321'; -var dValue = new Date(2012, 1, 2, 0, 0, 0, 0); - -function createPacketReader(bytes) { - var buffer = new Buffer(bytes); - var parser = new PacketReader(); - - parser._append(buffer); - - return parser; -} - -function testByte(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeByte(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseByte(); - assert.equal(newValue, value); -} - -function testChar(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeChar(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseChar(); - assert.equal(newValue, value); -} - -function testShort(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeShort(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseShort(); - assert.equal(newValue, value); -} - -function testShortSigned(value, expectedValue) { - var packetWriter = new PacketWriter(); - packetWriter._writeShort(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseShort(); - assert.equal(newValue, expectedValue); -} - -function testInt(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeInt(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseInt(); - assert.equal(newValue, value); -} - -function testIntSigned(value, expectedValue) { - var packetWriter = new PacketWriter(); - packetWriter._writeInt(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseInt(); - assert.equal(newValue, expectedValue); -} - -function testDate(year, month, day) { - var packetWriter = new PacketWriter(); - packetWriter._writeDate(year, month, day); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseDate(); - assert.equal(newValue.getUTCFullYear(), year); - assert.equal(newValue.getUTCMonth(), month - 1); - assert.equal(newValue.getUTCDate(), day); -} - -function testTime(hour, min, sec) { - var packetWriter = new PacketWriter(); - packetWriter._writeTime(hour, min, sec); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseTime(); - assert.equal(newValue.getUTCHours(), hour); - assert.equal(newValue.getUTCMinutes(), min); - assert.equal(newValue.getUTCSeconds(), sec); -} - -function testDateTime(year, month, day, hour, min, sec, msec) { - var packetWriter = new PacketWriter(); - packetWriter._writeDateTime(year, month, day, hour, min, sec, msec); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseDateTime(); - assert.equal(newValue.getUTCFullYear(), year); - assert.equal(newValue.getUTCMonth(), month - 1); - assert.equal(newValue.getUTCDate(), day); - assert.equal(newValue.getUTCHours(), hour); - assert.equal(newValue.getUTCMinutes(), min); - assert.equal(newValue.getUTCSeconds(), sec); - assert.equal(newValue.getUTCMilliseconds(), msec); -} - -function testTimestamp(year, month, day, hour, min, sec) { - var packetWriter = new PacketWriter(); - packetWriter._writeTimestamp(year, month, day, hour, min, sec); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseTimeStamp(); - assert.equal(newValue.getUTCFullYear(), year); - assert.equal(newValue.getUTCMonth(), month - 1); - assert.equal(newValue.getUTCDate(), day); - assert.equal(newValue.getUTCHours(), hour); - assert.equal(newValue.getUTCMinutes(), min); - assert.equal(newValue.getUTCSeconds(), sec); -} - -function testString(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeNullTerminatedString(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var len = packetReader._parseInt(); - var newValue = packetReader._parseNullTerminatedString(len); - assert.equal(newValue, value); -} - -function testFixedLengthString(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeFixedLengthString(value, 'x', 15); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseString(15); - assert.equal(newValue, value + 'xxxxx'); -} - -function testFiller() { - var packetWriter = new PacketWriter(); - packetWriter._writeFiller(5, 'x'); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue = packetReader._parseString(5); - assert.equal(newValue, 'xxxxx'); - - packetWriter = new PacketWriter(); - packetWriter._writeFiller(5, 120); - packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - newValue = packetReader._parseString(5); - assert.equal(newValue, 'xxxxx'); -} - -function testAllTypes(value1, value2, value3) { - var packetWriter = new PacketWriter(); - packetWriter._writeByte(value1); - packetWriter._writeInt(value2); - packetWriter._writeNullTerminatedString(value3); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - - var newValue1 = packetReader._parseByte(); - assert.equal(newValue1, value1); - - var newValue2 = packetReader._parseInt(); - assert.equal(newValue2, value2); - - var len = packetReader._parseInt(); - var newValue3 = packetReader._parseNullTerminatedString(len); - assert.equal(newValue3, value3); -} - -function testPacketReaderBytes() { - var packetReader = createPacketReader([1, 2]); - - var newValue = packetReader._parseBytes(2); - assert.equal(newValue[0], 1); - assert.equal(newValue[1], 2); -} - -function testPacketReaderBuffer() { - var packetWriter = new PacketWriter(); - packetWriter._writeBuffer(new Buffer([1, 2])); - - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var newValue = packetReader._parseBuffer(2); - assert.equal(newValue[0], 1); - assert.equal(newValue[1], 2); -} - -function testLong(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeLong(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var newValue = packetReader._parseLong(); - assert.equal(newValue, value); -} - -function testFloat(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeFloat(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var newValue = packetReader._parseFloat(); - assert.equal(newValue, value); -} - -function testDouble(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeDouble(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var newValue = packetReader._parseDouble(); - assert.equal(newValue, value); -} - -function testNumeric(value) { - var packetWriter = new PacketWriter(); - packetWriter._writeNumeric(value); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var length = packetReader._parseInt(); - var newValue = packetReader._parseNumeric(length); - assert.equal(newValue, value); -} - -function testObject() { - var packetWriter = new PacketWriter(); - packetWriter._writeBuffer(new Buffer([0, 0, 0, 0, 0, 1, 0, 2])); - var packetReader = new PacketReader(); - packetReader.write(packetWriter._toBuffer()); - var newValue = packetReader._parseObject(); - assert.equal(newValue, 'OID:@0|1|2'); -} -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -// Test integer-types -testByte(bValue); -testShort(shortValue); -testInt(iValue); - -// Test signed integer-types -testShortSigned(shortValueSigned, -32767); -//testShortSigned(shortValueSigned, -1); -testIntSigned(iValueSigned, -2147483647); -//testIntSigned(iValueSigned, -1); - -// Test strings -testChar(cValue); -testString(sValue); -testFixedLengthString(sValue); - -// Test dates -testDate(dValue.getFullYear(), dValue.getMonth(), dValue.getDate()); -testTime(dValue.getHours(), dValue.getMinutes(), dValue.getSeconds()); -testDateTime(dValue.getFullYear(), dValue.getMonth(), dValue.getDate(), - dValue.getHours(), dValue.getMinutes(), dValue.getSeconds(), dValue.getMilliseconds()); -testTimestamp(dValue.getFullYear(), dValue.getMonth(), dValue.getDate(), - dValue.getHours(), dValue.getMinutes(), dValue.getSeconds()); - -// Other tests -testAllTypes(bValue, iValue, sValue); -testPacketReaderBytes(); -testPacketReaderBuffer(); -testFiller(); - -testLong(Math.pow(2, 53) - 152156); -testLong(Math.pow(2, 53) + 100); // Overflow -testFloat(4.5); -testDouble(3.14); -testNumeric(1.5); -testObject(); - -console.log('Unit test ended OK.'); diff --git a/test/old_tests/packets/test_PrepareExecuteOldProtocolPacket.js b/test/old_tests/packets/test_PrepareExecuteOldProtocolPacket.js deleted file mode 100644 index 57d762a..0000000 --- a/test/old_tests/packets/test_PrepareExecuteOldProtocolPacket.js +++ /dev/null @@ -1,103 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - PrepareExecuteOldProtocolPacket = require('../PrepareExecuteOldProtocolPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testExecuteQueryPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {sql : 'select * from code', - casInfo : [0, 255, 255, 255], - autoCommitMode : 1, - dbVersion : '8.4.1', - paramValues : {}, - paramTypes : {} - }; - var prepareExecuteOldProtocolPacket = new PrepareExecuteOldProtocolPacket(options); - - prepareExecuteOldProtocolPacket.writePrepare(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 34); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_PREPARE); - assert.equal(packetWriter._toBuffer()[12], 19); - assert.equal(packetWriter._toBuffer().slice(13, 31).toString(), 'select * from code'); - assert.equal(packetWriter._toBuffer()[35], 1); - assert.equal(packetWriter._toBuffer()[36], CAS.CCIPrepareOption.CCI_PREPARE_NORMAL); - assert.equal(packetWriter._toBuffer()[40], 1); - assert.equal(packetWriter._toBuffer()[41], 1); - - packetReader.write(new Buffer([0, 0, 0, 108, 1, 255, 255, 255, 0, 0, 0, 1, 255, 255, 255, 255, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 115, 95, 110, 97, 109, 101, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 7, 102, 95, 110, 97, 109, 101, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, - 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])); - - prepareExecuteOldProtocolPacket.parsePrepare(packetReader); - assert.equal(prepareExecuteOldProtocolPacket.queryHandle, 1); - assert.equal(prepareExecuteOldProtocolPacket.resultCacheLifetime, -1); - assert.equal(prepareExecuteOldProtocolPacket.statementType, 21); - assert.equal(prepareExecuteOldProtocolPacket.bindCount, 0); - assert.equal(prepareExecuteOldProtocolPacket.isUpdatable, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].ColumnType, 1); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].Scale, -1); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].Name, "s_name"); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].RealName, ""); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].TableName, "code"); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsNullable, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].DafaultValue, ""); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsAutoIncrement, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsUniqueKey, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsPrimaryKey, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsReverseIndex, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsReverseUnique, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsForeignKey, false); - assert.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsShared, false); - - packetReader = new PacketReader(); - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getExecuteBufferLength()); - prepareExecuteOldProtocolPacket.writeExecute(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 69); // Total length - - assert.equal(packetWriter._toBuffer()[4], 1); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_EXECUTE); - assert.equal(packetWriter._toBuffer()[16], 1); - assert.equal(packetWriter._toBuffer()[21], CAS.CCIExecutionOption.CCI_EXEC_NORMAL); - assert.equal(packetWriter._toBuffer()[29], 0); - assert.equal(packetWriter._toBuffer()[37], 0); - assert.equal(packetWriter._toBuffer()[41], 0); - assert.equal(packetWriter._toBuffer()[46], 1); - assert.equal(packetWriter._toBuffer()[51], 1); - assert.equal(packetWriter._toBuffer()[56], 1); - assert.equal(packetWriter._toBuffer()[68], 0); - assert.equal(packetWriter._toBuffer()[76], 0); - - packetReader.write(new Buffer([0, 0, 0, 205, 0, 255, 255, 255, 0, 0, 0, 6, 0, 0, 0, 0, 1, 21, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 88, 0, 0, 0, 0, 6, 77, 105, 120, 101, 100, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 87, 0, 0, 0, 0, 6, 87, 111, 109, 97, 110, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 77, 0, 0, 0, 0, 4, 77, 97, 110, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 66, 0, 0, 0, 0, 7, 66, 114, 111, 110, 122, 101, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 83, 0, 0, 0, 0, 7, 83, 105, 108, 118, 101, 114, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 71, 0, 0, 0, 0, 5, 71, 111, 108, 100, 0])); - - var resultSet = prepareExecuteOldProtocolPacket.parseExecute(packetReader).resultSet; - - assert.equal(resultSet, '{"ColumnNames":["s_name","f_name"],"ColumnDataTypes":["Char","String"],"RowsCount":6,"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"],["B","Bronze"],["S","Silver"],["G","Gold"]]}'); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testExecuteQueryPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_RollbackPacket.js b/test/old_tests/packets/test_RollbackPacket.js deleted file mode 100644 index 344964e..0000000 --- a/test/old_tests/packets/test_RollbackPacket.js +++ /dev/null @@ -1,47 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - RollbackPacket = require('../RollbackPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testRollbackPacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255]}; - var rollbackPacket = new RollbackPacket(options); - - rollbackPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 6); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_END_TRAN); - assert.equal(packetWriter._toBuffer()[12], 1); - assert.equal(packetWriter._toBuffer()[13], CAS.CCITransactionType.CCI_TRAN_ROLLBACK); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - assert.equal(packetReader._packetLength(), 12); - - rollbackPacket.parse(packetReader); - - assert.equal(rollbackPacket.casInfo[0], 0); // CasInfo - assert.equal(rollbackPacket.casInfo[1], 255); // CasInfo - assert.equal(rollbackPacket.casInfo[2], 255); // CasInfo - assert.equal(rollbackPacket.casInfo[3], 255); // CasInfo - - assert.equal(rollbackPacket.responseCode, 0); - - assert.equal(rollbackPacket.errorCode, 0); - assert.equal(rollbackPacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testRollbackPacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_SetAutoCommitMode.js b/test/old_tests/packets/test_SetAutoCommitMode.js deleted file mode 100644 index 20437ee..0000000 --- a/test/old_tests/packets/test_SetAutoCommitMode.js +++ /dev/null @@ -1,48 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - SetAutoCommitModePacket = require('../SetAutoCommitModePacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testSetAutoCommitModePacket_01() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255], autoCommitMode : 1, dbVersion : '8.4.1'}; - var setAutoCommitModePacket = new SetAutoCommitModePacket(options); - - setAutoCommitModePacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 1 + 4 * 4); // Total length - - assert.equal(packetWriter._toBuffer()[4], 0); // CasInfo - assert.equal(packetWriter._toBuffer()[5], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[6], 255); // CasInfo - assert.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_SET_DB_PARAMETER); - assert.equal(packetWriter._toBuffer()[16], CAS.CCIDbParam.CCI_PARAM_AUTO_COMMIT); - assert.equal(packetWriter._toBuffer()[20], 4); - assert.equal(packetWriter._toBuffer()[24], 1); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - assert.equal(packetReader._packetLength(), 12); - - setAutoCommitModePacket.parse(packetReader); - - assert.equal(setAutoCommitModePacket.casInfo[0], 0); // CasInfo - assert.equal(setAutoCommitModePacket.casInfo[1], 255); // CasInfo - assert.equal(setAutoCommitModePacket.casInfo[2], 255); // CasInfo - assert.equal(setAutoCommitModePacket.casInfo[3], 255); // CasInfo - - assert.equal(setAutoCommitModePacket.responseCode, 0); - - assert.equal(setAutoCommitModePacket.errorCode, 0); - assert.equal(setAutoCommitModePacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -testSetAutoCommitModePacket_01(); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/packets/test_SetAutoCommitModePacket.js b/test/old_tests/packets/test_SetAutoCommitModePacket.js deleted file mode 100644 index 21dfd54..0000000 --- a/test/old_tests/packets/test_SetAutoCommitModePacket.js +++ /dev/null @@ -1,45 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - SetAutoCommitModePacket = require('../SetAutoCommitModePacket'), - CAS = require('../../constants/CASConstants'); - -exports['test_SetAutoCommitModePacket'] = function (test) { - test.expect(17); - console.log('Unit test ' + module.filename.toString() + ' started...'); - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = {casInfo : [0, 255, 255, 255], autoCommitMode : 1}; - var setAutoCommitModePacket = new SetAutoCommitModePacket(options); - - setAutoCommitModePacket.write(packetWriter); - test.equal(packetWriter._toBuffer()[3], 1 + 4 * 4); //total length - - test.equal(packetWriter._toBuffer()[4], 0); //casInfo - test.equal(packetWriter._toBuffer()[5], 255); //casInfo - test.equal(packetWriter._toBuffer()[6], 255); //casInfo - test.equal(packetWriter._toBuffer()[7], 255); //casInfo - - test.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_SET_DB_PARAMETER); - test.equal(packetWriter._toBuffer()[16], CAS.CCIDbParam.CCI_PARAM_AUTO_COMMIT); - test.equal(packetWriter._toBuffer()[20], 4); - test.equal(packetWriter._toBuffer()[24], 1); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - test.equal(packetReader._packetLength(), 12); - - setAutoCommitModePacket.parse(packetReader); - - test.equal(setAutoCommitModePacket.casInfo[0], 0); //casInfo - test.equal(setAutoCommitModePacket.casInfo[1], 255); //casInfo - test.equal(setAutoCommitModePacket.casInfo[2], 255); //casInfo - test.equal(setAutoCommitModePacket.casInfo[3], 255); //casInfo - - test.equal(setAutoCommitModePacket.responseCode, 0); - - test.equal(setAutoCommitModePacket.errorCode, 0); - test.equal(setAutoCommitModePacket.errorMsg, ''); - console.log('Unit test ended OK.'); - test.done(); -}; - diff --git a/test/old_tests/packets/test_SetDbParameterPacket.js b/test/old_tests/packets/test_SetDbParameterPacket.js deleted file mode 100644 index 7d9a2be..0000000 --- a/test/old_tests/packets/test_SetDbParameterPacket.js +++ /dev/null @@ -1,43 +0,0 @@ -var PacketReader = require('../PacketReader'), - PacketWriter = require('../PacketWriter'), - SetDbParameterPacket = require('../SetDbParameterPacket'), - CAS = require('../../constants/CASConstants'), - assert = require('assert'); - -function testSetDbParameter() { - var packetReader = new PacketReader(); - var packetWriter = new PacketWriter(); - var options = - { - casInfo : [0, 255, 255, 255], - parameter : CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH, - value : 99 - }; - var setDbParameterPacket = new SetDbParameterPacket(options); - - setDbParameterPacket.write(packetWriter); - assert.equal(packetWriter._toBuffer()[3], 17); // Total length - assert.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_SET_DB_PARAMETER); - assert.equal(packetWriter._toBuffer()[12], 4); - assert.equal(packetWriter._toBuffer()[16], CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH); - assert.equal(packetWriter._toBuffer()[20], 4); - assert.equal(packetWriter._toBuffer()[24], 99); - - packetReader.write(new Buffer([0, 0, 0, 0, - 0, 255, 255, 255, - 0, 0, 0, 0])); - setDbParameterPacket.parse(packetReader); - - assert.equal(setDbParameterPacket.casInfo[0], 0); // CasInfo - assert.equal(setDbParameterPacket.casInfo[1], 255); // CasInfo - assert.equal(setDbParameterPacket.casInfo[2], 255); // CasInfo - assert.equal(setDbParameterPacket.casInfo[3], 255); // CasInfo - - assert.equal(setDbParameterPacket.responseCode, 0); - assert.equal(setDbParameterPacket.errorCode, 0); - assert.equal(setDbParameterPacket.errorMsg, ''); -} - -console.log('Unit test ' + module.filename.toString() + ' started...'); -testSetDbParameter(); -console.log('Unit test ended OK.'); diff --git a/test/old_tests/test_Async.js b/test/old_tests/test_Async.js deleted file mode 100644 index ffde6ff..0000000 --- a/test/old_tests/test_Async.js +++ /dev/null @@ -1,94 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, -//TODO Update this with your own async installation path - Async = require('c:/Program Files (x86)/nodejs/node_modules/async/index.js'), -//Async = require('C:/Documents and Settings/Ovidiu/node_modules/async/index.js'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var returnedQueryHandle; -var fetchResult; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -Async.waterfall( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.getEngineVersion(cb); - }, - - function (engineVersion, cb) { - Helpers.logInfo('Engine version is: ' + engineVersion); - CUBRIDClient.query('select * from game', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.RowsArray(result).length === 235); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - assert(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - returnedQueryHandle = queryHandle; - Async.whilst( - function () { - return fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(returnedQueryHandle, function (err, result) { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - ); - }, - - function (err) { - if (err) { - throw err.message; - } else { - cb.call(err); - } - } - ); - }, - - function (cb) { - CUBRIDClient.closeQuery(returnedQueryHandle, cb); - }, - - function (queryHandle, cb) { - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw 'Error executing test!'; - } - } -); diff --git a/test/old_tests/test_AutoCommitMode.js b/test/old_tests/test_AutoCommitMode.js deleted file mode 100644 index 26597f4..0000000 --- a/test/old_tests/test_AutoCommitMode.js +++ /dev/null @@ -1,70 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.setAutoCommitMode(false, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.commit(function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.query('select * from node_test', function (err, result) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 1, 'Didn\'t commit!!!'); - CUBRIDClient.setAutoCommitMode(true, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - diff --git a/test/old_tests/test_BadConnect.js b/test/old_tests/test_BadConnect.js deleted file mode 100644 index 3c12583..0000000 --- a/test/old_tests/test_BadConnect.js +++ /dev/null @@ -1,17 +0,0 @@ -var assert = require('assert'), - CUBRIDConnection = require('../../src/CUBRIDConnection'), - Helpers = require('../../src/utils/Helpers'); - -var client = new CUBRIDConnection('localhost', 33000, 'public', 'xyz', 'demodb_xyz'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -client.connect(function (err) { - if (err) { - assert(err.message === '-677:Failed to connect to database server, \'demodb_xyz\', on the following host(s): localhost:localhost'); - Helpers.logInfo('Test passed.'); - } else { - throw 'We should not get here!'; - } -}); - diff --git a/test/old_tests/test_BadPort.js b/test/old_tests/test_BadPort.js deleted file mode 100644 index 68cbb81..0000000 --- a/test/old_tests/test_BadPort.js +++ /dev/null @@ -1,18 +0,0 @@ -var assert = require('assert'), - CUBRIDConnection = require('../../src/CUBRIDConnection'), - Helpers = require('../../src/utils/Helpers'); - -var client = new CUBRIDConnection('localhost', 80, 'public', '', 'demodb'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -client.connect(function (err) { - if (err) { - - assert(err.message === 'connect ECONNREFUSED'); - Helpers.logInfo('Test passed.'); - } else { - throw 'We should not get here!'; - } -}); - diff --git a/test/old_tests/test_BadSQLSyntax.js b/test/old_tests/test_BadSQLSyntax.js deleted file mode 100644 index 2dc5510..0000000 --- a/test/old_tests/test_BadSQLSyntax.js +++ /dev/null @@ -1,34 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - Helpers.logError(err.message); -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from game_xyz'); - CUBRIDClient.query('select * from game_xyz', function (err) { - if (err) { - errorHandler(err); - assert(err.message === '-493:Syntax: Unknown class "game_xyz". select * from game_xyz'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } - }); - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } else { - throw 'We should never get here!'; - } - }); - } -}); - diff --git a/test/old_tests/test_BasicBatchExecute.js b/test/old_tests/test_BasicBatchExecute.js deleted file mode 100644 index 99fee6d..0000000 --- a/test/old_tests/test_BasicBatchExecute.js +++ /dev/null @@ -1,45 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicBatchExecute_ImplicitConnect.js b/test/old_tests/test_BasicBatchExecute_ImplicitConnect.js deleted file mode 100644 index 05b88ae..0000000 --- a/test/old_tests/test_BasicBatchExecute_ImplicitConnect.js +++ /dev/null @@ -1,39 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -Helpers.logInfo('Connected.'); -CUBRIDClient.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicConnect.js b/test/old_tests/test_BasicConnect.js deleted file mode 100644 index 0d85957..0000000 --- a/test/old_tests/test_BasicConnect.js +++ /dev/null @@ -1,34 +0,0 @@ -var CUBRIDClient = require('../../index.js').createCUBRIDConnection('127.0.0.1', 33000, 'public', '', 'demodb'), - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicEvents.js b/test/old_tests/test_BasicEvents.js deleted file mode 100644 index 8fc312b..0000000 --- a/test/old_tests/test_BasicEvents.js +++ /dev/null @@ -1,26 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function () { - CUBRIDClient.close(function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - diff --git a/test/old_tests/test_BasicEvents_Error.js b/test/old_tests/test_BasicEvents_Error.js deleted file mode 100644 index 0f33ff6..0000000 --- a/test/old_tests/test_BasicEvents_Error.js +++ /dev/null @@ -1,29 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.user = 'unknown_user'; - -CUBRIDClient.connect(function (err) { - if (!err) { - CUBRIDClient.close(function () { - }); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - assert(err.message === '-165:User "unknown_user" is invalid.'); - Helpers.logInfo('Test passed.'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - throw 'We should not get here!'; -}); - diff --git a/test/old_tests/test_BasicEvents_Error_2.js b/test/old_tests/test_BasicEvents_Error_2.js deleted file mode 100644 index 168d615..0000000 --- a/test/old_tests/test_BasicEvents_Error_2.js +++ /dev/null @@ -1,25 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.user = 'unknown_user'; - -CUBRIDClient.connect(null); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - assert(err.message === '-165:User "unknown_user" is invalid.'); - Helpers.logInfo('Test passed.'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - throw 'We should not get here!'; -}); - diff --git a/test/old_tests/test_BasicExecute.js b/test/old_tests/test_BasicExecute.js deleted file mode 100644 index 28e1758..0000000 --- a/test/old_tests/test_BasicExecute.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.execute('drop table if exists node_test', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.execute('create table node_test(id int)', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.execute('insert into node_test values(1)', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.execute('drop table node_test', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicExecute_2.js b/test/old_tests/test_BasicExecute_2.js deleted file mode 100644 index 5eb3e10..0000000 --- a/test/old_tests/test_BasicExecute_2.js +++ /dev/null @@ -1,38 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - var sqlsArr = []; - sqlsArr.push('drop table if exists node_test'); - sqlsArr.push('create table node_test(id int)'); - sqlsArr.push('insert into node_test values(2)'); - sqlsArr.push('drop table if exists node_test'); - CUBRIDClient.batchExecuteNoQuery(sqlsArr, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicExtendedSelect.js b/test/old_tests/test_BasicExtendedSelect.js deleted file mode 100644 index aa9ef48..0000000 --- a/test/old_tests/test_BasicExtendedSelect.js +++ /dev/null @@ -1,81 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - Helpers.logInfo('Querying: select * from game'); - CUBRIDClient.query('select * from game', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - assert(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - errorHandler(err); - } else { - if (result) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241); - assert(arr[0].toString().startsWith('2004,20317,14375,30124,GRE,S,2004-08-26T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20060,14340,30125,JPN,B,2004-08-25T') === true); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicExtendedSelect_Sequence.js b/test/old_tests/test_BasicExtendedSelect_Sequence.js deleted file mode 100644 index 4b934dc..0000000 --- a/test/old_tests/test_BasicExtendedSelect_Sequence.js +++ /dev/null @@ -1,56 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.getEngineVersion(cb); - }, - - function (engineVersion, cb) { - Helpers.logInfo('Engine version is: ' + engineVersion); - CUBRIDClient.query('select * from code', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - assert(arr[0].toString() === 'X,Mixed'); - assert(arr[1].toString() === 'W,Woman'); - assert(arr[2].toString() === 'M,Man'); - assert(arr[3].toString() === 'B,Bronze'); - assert(arr[4].toString() === 'S,Silver'); - assert(arr[5].toString() === 'G,Gold'); - for (var k = 0; k < arr.length; k++) { - Helpers.logInfo(arr[k].toString()); - } - CUBRIDClient.closeQuery(queryHandle, cb); - Helpers.logInfo('Query closed.'); - }, - - function (queryHandle,cb) { - CUBRIDClient.close(cb); - Helpers.logInfo('Connection closed.'); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_BasicMultiFetch.js b/test/old_tests/test_BasicMultiFetch.js deleted file mode 100644 index 631c1dc..0000000 --- a/test/old_tests/test_BasicMultiFetch.js +++ /dev/null @@ -1,100 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - ActionQueue = require('../../src/utils/ActionQueue'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var fetchResult; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - var errHandler = function (err) { - Helpers.logInfo('Error - ' + err.message); - throw err.message; - }; - - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.getEngineVersion(function (err, result) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - CUBRIDClient.query('select * from game', function (err, result, queryHandle) { - if (err) { - errHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - assert(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - - ActionQueue.while( - function () { - return fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - errHandler(err); - } else { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - }); - }, - - function (err) { - if (err) { - errHandler(err); - } else { - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - } - ); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicMultiFetch_Sequence.js b/test/old_tests/test_BasicMultiFetch_Sequence.js deleted file mode 100644 index 066d36b..0000000 --- a/test/old_tests/test_BasicMultiFetch_Sequence.js +++ /dev/null @@ -1,92 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var returnedQueryHandle; -var fetchResult; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.getEngineVersion(cb); - }, - - function (engineVersion, cb) { - Helpers.logInfo('EngineVersion is: ' + engineVersion); - CUBRIDClient.query('select * from game', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.RowsArray(result).length === 235); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - assert(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - returnedQueryHandle = queryHandle; - ActionQueue.while( - function () { - return fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(returnedQueryHandle, function (err, result) { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - ); - }, - - function (err) { - if (err) { - throw err.message; - } else { - cb.call(err); - } - } - ); - }, - - function (cb) { - CUBRIDClient.closeQuery(returnedQueryHandle, cb); - }, - - function (queryHandle,cb) { - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw 'Error executing test!'; - } - } -); diff --git a/test/old_tests/test_BasicMultifetchOldProtocol.js b/test/old_tests/test_BasicMultifetchOldProtocol.js deleted file mode 100644 index e9785c1..0000000 --- a/test/old_tests/test_BasicMultifetchOldProtocol.js +++ /dev/null @@ -1,101 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - ActionQueue = require('../../src/utils/ActionQueue'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var fetchResult; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - var errHandler = function (err) { - Helpers.logInfo('Error - ' + err.message); - throw err.message; - }; - - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.getEngineVersion(function (err, result) { - if (err) { - errHandler(err); - } else { - CUBRIDClient.setEnforceOldQueryProtocol(true); - Helpers.logInfo('CUBRID engine version: ' + result); - CUBRIDClient.query('select * from game', function (err, result, queryHandle) { - if (err) { - errHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - assert(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241); - assert(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - assert(arr[arr.length - 1].toString().startsWith('2004,20317,12906,30124,USA,B,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - - ActionQueue.while( - function () { - return fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - errHandler(err); - } else { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 241 || arr.length === 218); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - }); - }, - - function (err) { - if (err) { - errHandler(err); - } else { - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - } - ); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicQueriesQueue.js b/test/old_tests/test_BasicQueriesQueue.js deleted file mode 100644 index f88e130..0000000 --- a/test/old_tests/test_BasicQueriesQueue.js +++ /dev/null @@ -1,52 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_1 = 'SELECT COUNT(*) FROM [code]'; -var SQL_2 = 'SELECT * FROM [code] WHERE s_name = \'X\''; -var SQL_3 = 'SELECT COUNT(*) FROM [code] WHERE f_name LIKE \'M%\''; - -CUBRIDClient.connect(function () { - Helpers.logInfo('Connection opened...'); - - Helpers.logInfo('Executing: ' + SQL_1); - CUBRIDClient.addQuery(SQL_1, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result: ' + arr); - assert(arr[0][0].toString() === '6'); - } - }); - - Helpers.logInfo('Executing: ' + SQL_2); - CUBRIDClient.addQuery(SQL_2, function (err, result) { - if (err) { - throw err; - } else { - Helpers.logInfo('Result: ' + Result2Array.RowsArray(result)); - assert(Result2Array.RowsArray(result).toString() === 'X,Mixed'); - } - }); - - Helpers.logInfo('Executing: ' + SQL_3); - CUBRIDClient.addQuery(SQL_3, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result: ' + Result2Array.RowsArray(result)); - assert(arr[0][0].toString() === '2'); - CUBRIDClient.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); -}); diff --git a/test/old_tests/test_BasicQueriesQueue_ImplicitConnect.js b/test/old_tests/test_BasicQueriesQueue_ImplicitConnect.js deleted file mode 100644 index 53439c5..0000000 --- a/test/old_tests/test_BasicQueriesQueue_ImplicitConnect.js +++ /dev/null @@ -1,52 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_1 = 'SELECT COUNT(*) FROM [code]'; -var SQL_2 = 'SELECT * FROM [code] WHERE s_name = \'X\''; -var SQL_3 = 'SELECT COUNT(*) FROM [code] WHERE f_name LIKE \'M%\''; - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo('Executing [1]: ' + SQL_1); -CUBRIDClient.addQuery(SQL_1, function (err, result) { - if (err) { - errorHandler(err); - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result [1]: ' + Result2Array.RowsArray(result)); - assert(arr[0][0].toString() === '6'); - } -}); - -Helpers.logInfo('Executing [2]: ' + SQL_2); -CUBRIDClient.addQuery(SQL_2, function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Result [2]: ' + Result2Array.RowsArray(result)); - assert(Result2Array.RowsArray(result).toString() === 'X,Mixed'); - } -}); - -Helpers.logInfo('Executing [3]: ' + SQL_3); -CUBRIDClient.addQuery(SQL_3, function (err, result) { - if (err) { - errorHandler(err); - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result [3]: ' + Result2Array.RowsArray(result)); - assert(arr[0][0].toString() === '2'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } -}); diff --git a/test/old_tests/test_BasicSelect.js b/test/old_tests/test_BasicSelect.js deleted file mode 100644 index 2a3c0a6..0000000 --- a/test/old_tests/test_BasicSelect.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - assert(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicSelect_Cache.js b/test/old_tests/test_BasicSelect_Cache.js deleted file mode 100644 index ed0bb0a..0000000 --- a/test/old_tests/test_BasicSelect_Cache.js +++ /dev/null @@ -1,66 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from game'); - var startTime1 = (new Date()).getTime(); - CUBRIDClient.query('select * from game', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - var endTime1 = (new Date()).getTime(); - Helpers.logInfo('[First] query execution time (ms): ' + (endTime1 - startTime1).toString()); - assert(Result2Array.TotalRowsCount(result) === 8653); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - // Repeat query - results expected to come from cache this time - var startTime2 = (new Date()).getTime(); - CUBRIDClient.query('select * from game', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - var endTime2 = (new Date()).getTime(); - Helpers.logInfo('[Second] query execution time (ms): ' + (endTime2 - startTime2).toString()); - assert(endTime2 - startTime2 <= endTime1 - startTime1); - - assert(Result2Array.TotalRowsCount(result) === 8653); - - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BasicSelect_Events.js b/test/old_tests/test_BasicSelect_Events.js deleted file mode 100644 index 5be6f2e..0000000 --- a/test/old_tests/test_BasicSelect_Events.js +++ /dev/null @@ -1,67 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function () { -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from game'); - CUBRIDClient.query('select * from game', function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('Fetching more rows...'); - CUBRIDClient.fetch(queryHandle, function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('*** Fetch data received for query: ' + queryHandle); - Helpers.logInfo('*** Current fetch of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - // Continue to fetch... - Helpers.logInfo('...'); - Helpers.logInfo('...fetching more rows...'); - Helpers.logInfo('...'); - setTimeout(function () { - CUBRIDClient.fetch(queryHandle, function () { - }); - }, Math.random() * 500); // Simulate different responses time for each fetch -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('No more data to fetch.'); - Helpers.logInfo('Closing query: ' + queryHandle); - CUBRIDClient.closeQuery(queryHandle, function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo('Query closed: ' + queryHandle); - Helpers.logInfo('Closing connection...'); - - // We had only one query opened - we can now close the connection - CUBRIDClient.close(function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_BasicSelect_ImplicitConnect.js b/test/old_tests/test_BasicSelect_ImplicitConnect.js deleted file mode 100644 index d3fd740..0000000 --- a/test/old_tests/test_BasicSelect_ImplicitConnect.js +++ /dev/null @@ -1,46 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo('Connected.'); -Helpers.logInfo('Querying: select * from nation'); -CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - assert(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } -}); - - - diff --git a/test/old_tests/test_Basic_QueriesQueue_Events.js b/test/old_tests/test_Basic_QueriesQueue_Events.js deleted file mode 100644 index ea9bd5e..0000000 --- a/test/old_tests/test_Basic_QueriesQueue_Events.js +++ /dev/null @@ -1,63 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_A = 'SELECT * FROM event'; -var SQL_B = 'SELECT * FROM record'; - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw err; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.addQuery(SQL_A, null); - CUBRIDClient.addQuery(SQL_B, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle, sql) { - Helpers.logInfo('[' + sql + '] executed - query handle is: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Query result first row: ' + arr[0]); - switch (sql) { - case SQL_A: - assert(Result2Array.TotalRowsCount(result) === 422); - assert(arr[0].toString() === '20421,Wrestling,Greco-Roman 97kg,M,1'); - break; - case SQL_B: - assert(Result2Array.TotalRowsCount(result) === 2000); - assert(arr[0].toString() === '2000,20243,14214,G,681.1,Score'); - } - Helpers.logInfo('...let\'s fetch more data...'); - CUBRIDClient.fetch(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - CUBRIDClient.closeQuery(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('There is no more data to fetch for query with handle: ' + queryHandle); - CUBRIDClient.closeQuery(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo('Query with handle: ' + queryHandle + ' was closed!'); - if (CUBRIDClient.queriesQueueIsEmpty()) { - CUBRIDClient.close(); - } else { - Helpers.logInfo('(...it\'s not the right time to close the connection! - there are some queries still pending execution...)'); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); diff --git a/test/old_tests/test_Basic_QueriesQueue_Events_Error.js b/test/old_tests/test_Basic_QueriesQueue_Events_Error.js deleted file mode 100644 index 46dc5a1..0000000 --- a/test/old_tests/test_Basic_QueriesQueue_Events_Error.js +++ /dev/null @@ -1,28 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_A = 'SELECT * from x_code'; - -CUBRIDClient.connect(function () { -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - assert(err.message === '-493:Syntax: Unknown class "x_code". select * from x_code'); - CUBRIDClient.close(); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.addQuery(SQL_A, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - setTimeout(function () { - process.exit(); - }, 1000); -}); diff --git a/test/old_tests/test_BatchExecuteVariant.js b/test/old_tests/test_BatchExecuteVariant.js deleted file mode 100644 index 59603ff..0000000 --- a/test/old_tests/test_BatchExecuteVariant.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery('drop table if exists node_test', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery('create table node_test(id int)', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery('insert into node_test values(1)', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery('drop table node_test', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_BatchExecute_Error.js b/test/old_tests/test_BatchExecute_Error.js deleted file mode 100644 index b1dfba2..0000000 --- a/test/old_tests/test_BatchExecute_Error.js +++ /dev/null @@ -1,43 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - var sqlsArr = []; - sqlsArr.push('drop table if exists node_test'); - sqlsArr.push('create table node_test(id xyz)'); - sqlsArr.push('create table node_test(id abc)'); - CUBRIDClient.batchExecuteNoQuery(sqlsArr, function (err) { - if (err instanceof Array) { // Driver version in 8.4.3 - assert(err[0].message === '-494:Semantic: before \' xyz)\'\nxyz is not defined. create class node_test ( id xyz ) '); - assert(err[1].message === '-494:Semantic: before \' abc)\'\nabc is not defined. create class node_test ( id abc ) '); - } else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(err.message === '-494:Semantic: before \' xyz)\'\nxyz is not defined. create class node_test ( id xyz ) '); - } else { - assert(err.message === '-494:Semantic: xyz is not defined. create class node_test ( id xyz ) '); - } - } - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - }); - } -}); - - diff --git a/test/old_tests/test_BigString.js b/test/old_tests/test_BigString.js deleted file mode 100644 index 6b42f7a..0000000 --- a/test/old_tests/test_BigString.js +++ /dev/null @@ -1,69 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Creating the test table...'); - CUBRIDClient.batchExecuteNoQuery( - [ - 'drop table if exists test_big_string', - 'CREATE TABLE test_big_string(str char(1000000))', - 'INSERT INTO test_big_string VALUES(\'QWERTY\')' - ], - function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Querying: select * from test_big_string'); - CUBRIDClient.query('select * from test_big_string', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 1); - assert(arr[0][0].startsWith('QWERTY') === true); - assert(arr[0][0].length === 1000000); - - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.batchExecuteNoQuery('drop table test_big_string', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - } - ); - } -}); - - diff --git a/test/old_tests/test_Blob.js b/test/old_tests/test_Blob.js deleted file mode 100644 index 1791f3e..0000000 --- a/test/old_tests/test_Blob.js +++ /dev/null @@ -1,60 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - var data = ''; - for (var i = 0; i < 5120; i++) { - data += '11111111'; - } - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_lob', - 'create table test_lob(bl BLOB)', - 'insert into test_lob values(BIT_TO_BLOB(B\'' + data + '\'))'], cb); - }, - - function (cb) { - Helpers.logInfo('Create table and insert done.'); - CUBRIDClient.query('select * from test_lob', cb); - }, - - function (result, queryHandle, cb) { - Helpers.logInfo('Query executed.'); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - CUBRIDClient.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - - function (buff, read_length, cb) { - Helpers.logInfo('LOB Read done.'); - assert(read_length === 5120); - assert(buff.length === 5120); - for (var i = 0; i < read_length; i++) { - assert(buff[i] === 255); - } - CUBRIDClient.batchExecuteNoQuery(['DROP TABLE test_lob'], cb); - }, - - function (cb) { - Helpers.logInfo('Drop table done.'); - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_Blob_Insert.js b/test/old_tests/test_Blob_Insert.js deleted file mode 100644 index 0bc0fa7..0000000 --- a/test/old_tests/test_Blob_Insert.js +++ /dev/null @@ -1,75 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_blob', - 'create table test_blob(id int, bl blob)'], cb); - }, - - function (cb) { - Helpers.logInfo('Create table done.'); - CUBRIDClient.lobNew(CUBRIDClient.LOB_TYPE_BLOB, cb); - }, - - function (lobObject, cb) { - Helpers.logInfo('LobNew done.'); - Helpers.logInfo('Number of bytes to write: ' + 2 * CUBRIDClient._LOB_MAX_IO_LENGTH); - var data = new Buffer(2 * CUBRIDClient._LOB_MAX_IO_LENGTH); - for (var i = 0; i < 2 * CUBRIDClient._LOB_MAX_IO_LENGTH; i++) { - data[i] = i; - } - CUBRIDClient.lobWrite(lobObject, 1, data, cb); - }, - - function (lobObject, written_length, cb) { - Helpers.logInfo('LobWrite done.'); - CUBRIDClient.executeWithTypedParams('insert into test_blob values(1, ?)', [lobObject], ['blob'], cb); - }, - - function (cb) { - Helpers.logInfo('Querying: select bl test_blob.'); - CUBRIDClient.query('select bl from test_blob', cb); - }, - - function (result, queryhandle, cb) { - Helpers.logInfo("Query executed."); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - CUBRIDClient.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - - function (buf, readLength, cb) { - Helpers.logInfo("LobRead done.."); - Helpers.logInfo('Number of bytes read: ' + readLength); - assert(readLength === 2 * CUBRIDClient._LOB_MAX_IO_LENGTH); - for (var i = 0; i < buf.length; i++) { - assert(buf[i] === i % 256); - } - CUBRIDClient.batchExecuteNoQuery(['DROP TABLE test_blob'], cb); - }, - - function (cb) { - Helpers.logInfo('Drop table done.'); - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_Clob.js b/test/old_tests/test_Clob.js deleted file mode 100644 index 3edfd62..0000000 --- a/test/old_tests/test_Clob.js +++ /dev/null @@ -1,54 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_lob', - 'create table test_lob(cl CLOB)', - 'insert into test_lob values(CHAR_TO_CLOB(\'Clob test\'))'], cb); - }, - - function (cb) { - Helpers.logInfo('Batch execute done.'); - CUBRIDClient.query('select * from test_lob', cb); - }, - - function (result, queryHandle, cb) { - Helpers.logInfo('Query executed.'); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - CUBRIDClient.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - - function (str, read_length, cb) { - Helpers.logInfo('LOB Read done.'); - assert(read_length === 9); - assert(str === 'Clob test'); - - CUBRIDClient.batchExecuteNoQuery(['DROP TABLE test_lob'], cb); - }, - - function (cb) { - Helpers.logInfo('Drop table done.'); - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_Clob_Insert.js b/test/old_tests/test_Clob_Insert.js deleted file mode 100644 index 3065173..0000000 --- a/test/old_tests/test_Clob_Insert.js +++ /dev/null @@ -1,69 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_clob', - 'create table test_clob(id int, cl clob)'], cb); - }, - - function (cb) { - Helpers.logInfo('Create table done.'); - CUBRIDClient.lobNew(CUBRIDClient.LOB_TYPE_CLOB, cb); - }, - - function (lobObject, cb) { - Helpers.logInfo('LobNew done.'); - var data = 'Test CLOB content.'; - CUBRIDClient.lobWrite(lobObject, 1, data, cb); - }, - - function (lobObject, written_length, cb) { - Helpers.logInfo('LobWrite done.'); - CUBRIDClient.executeWithTypedParams('insert into test_clob values(1, ?)', [lobObject], ['clob'], cb); - }, - - function (cb) { - Helpers.logInfo('Querying: select cl test_clob.'); - CUBRIDClient.query('select cl from test_clob', cb); - }, - - function (result, queryhandle, cb) { - Helpers.logInfo("Query executed."); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - CUBRIDClient.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - - function (string, readLength, cb) { - Helpers.logInfo("LobRead done.."); - Helpers.logInfo('Number of bytes read: ' + readLength); - assert(readLength === 'Test CLOB content.'.length); - assert(string === 'Test CLOB content.'); - CUBRIDClient.batchExecuteNoQuery(['DROP TABLE test_clob'], cb); - }, - - function(cb) { - Helpers.logInfo('Drop table done.'); - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_CloseDefault.js b/test/old_tests/test_CloseDefault.js deleted file mode 100644 index 7d3a481..0000000 --- a/test/old_tests/test_CloseDefault.js +++ /dev/null @@ -1,48 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Executing query...'); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - var foundQueryHandle = false; - for (var i = 0; i < CUBRIDClient._queriesPacketList.length; i++) { - if (CUBRIDClient._queriesPacketList[i].queryHandle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - assert(foundQueryHandle === true); - - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - foundQueryHandle = false; - for (var i = 0; i < CUBRIDClient._queriesPacketList.length; i++) { - if (CUBRIDClient._queriesPacketList[i].handle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - assert(foundQueryHandle === false); - - Helpers.logInfo('Test passed.'); - } - }); - } - }); -}); diff --git a/test/old_tests/test_ConcurrentFetch_Events.js b/test/old_tests/test_ConcurrentFetch_Events.js deleted file mode 100644 index ccda9bc..0000000 --- a/test/old_tests/test_ConcurrentFetch_Events.js +++ /dev/null @@ -1,80 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -var queriesOpened = 0; -var queriesClosed = 0; - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - throw err.message; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - - setTimeout(function(){ - Helpers.logInfo('Querying 1: select * from game'); - CUBRIDClient.query('select * from game', function () { - queriesOpened++; - }); - }, 0); - - setTimeout(function(){ - Helpers.logInfo('Querying 2: select * from game'); - CUBRIDClient.query('select * from game', function () { - queriesOpened++; - }); - }, 1000); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received for query handle: ' + queryHandle); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - - Helpers.logInfo('Fetching more rows...'); - CUBRIDClient.fetch(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('*** Fetch data received for query: ' + queryHandle + '[' + Result2Array.RowsArray(result).length + ' rows]'); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - - // Continue to fetch... - Helpers.logInfo('*** fetching more rows...'); - CUBRIDClient.fetch(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('No more data to fetch for query handle: ' + queryHandle); - - Helpers.logInfo('Closing query: ' + queryHandle); - CUBRIDClient.closeQuery(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo('Query closed: ' + queryHandle); - Helpers.logInfo('Closing connection...'); - - queriesClosed++; - if (queriesOpened === queriesClosed) { - setTimeout(function () { - if (CUBRIDClient.connectionOpened) { - CUBRIDClient.close(); - } else { - Helpers.logInfo('Connection already closed.'); - } - }, 1000); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_ConcurrentSelect_Events.js b/test/old_tests/test_ConcurrentSelect_Events.js deleted file mode 100644 index d7b9d31..0000000 --- a/test/old_tests/test_ConcurrentSelect_Events.js +++ /dev/null @@ -1,76 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -global.queriesOpened = 0; -global.queriesClosed = 0; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - throw err.message; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - - setTimeout(function () { - Helpers.logInfo('[1] Querying: select * from game'); - global.queriesOpened++; - CUBRIDClient.query('select * from game'); - }, 0); - - setTimeout(function () { - Helpers.logInfo('[2] Querying: select * from game'); - global.queriesOpened++; - CUBRIDClient.query('select * from game'); - }, 2000); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received for query handle: ' + queryHandle); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - - Helpers.logInfo('Fetching more rows...'); - CUBRIDClient.fetch(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('*** Fetch data received for query: ' + queryHandle + '[' + Result2Array.RowsArray(result).length + ' rows]'); - // Continue to fetch... - Helpers.logInfo('*** fetching more rows...'); - CUBRIDClient.fetch(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('No more data to fetch for query handle: ' + queryHandle); - - Helpers.logInfo('Closing query: ' + queryHandle); - CUBRIDClient.closeQuery(queryHandle); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo('Query closed: ' + queryHandle); - Helpers.logInfo('Closing connection...'); - - global.queriesClosed++; - if (global.queriesOpened === global.queriesClosed) { - setTimeout(function () { - if (CUBRIDClient.connectionOpened) { - CUBRIDClient.close(); - } else { - Helpers.logInfo('Connection already closed.'); - } - }, 5000); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_Connect.js b/test/old_tests/test_Connect.js deleted file mode 100644 index 7a70c36..0000000 --- a/test/old_tests/test_Connect.js +++ /dev/null @@ -1,34 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_ConnectCollision.js b/test/old_tests/test_ConnectCollision.js deleted file mode 100644 index c4fb2bf..0000000 --- a/test/old_tests/test_ConnectCollision.js +++ /dev/null @@ -1,35 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - ErrorMessages = require('../../src/constants/ErrorMessages'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function () { - Helpers.logInfo('Connected the first time.'); - Helpers.logInfo('Connecting the second time...'); - CUBRIDClient.connect(function (err) { - if (err !== null) { - Helpers.logInfo('Error: ' + err.message); - assert(err.message === ErrorMessages.ERROR_CONNECTION_ALREADY_OPENED); - } else { - throw 'We should not get here!'; - } - - Helpers.logInfo('Closing first connection...'); - CUBRIDClient.close(function () { - Helpers.logInfo('First connection closed.'); - Helpers.logInfo('Trying to close connection the second time...'); - CUBRIDClient.close(function (err) { - if (err !== null) { - Helpers.logInfo('Error: ' + err.message); - assert(err.message === ErrorMessages.ERROR_CONNECTION_ALREADY_CLOSED); - } else { - throw 'We should not get here!'; - } - }); - Helpers.logInfo('Test passed.'); - }); - }); -}); - diff --git a/test/old_tests/test_ConnectTimeout.js b/test/old_tests/test_ConnectTimeout.js deleted file mode 100644 index e266002..0000000 --- a/test/old_tests/test_ConnectTimeout.js +++ /dev/null @@ -1,20 +0,0 @@ -var assert = require('assert'), - CUBRIDConnection = require('../../src/CUBRIDConnection'), - ErrorMessages = require('../../src/constants/ErrorMessages'), - Helpers = require('../../src/utils/Helpers'); - -//var client = new CUBRIDConnection('www.google.com', 81, 'public', '', 'demodb'); -var client = new CUBRIDConnection('10.255.255.1', 33000, 'public', '', 'demodb'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -client.setConnectionTimeout(2000); -client.connect(function (err) { - if (err) { - assert(err.message === ErrorMessages.ERROR_CONNECTION_TIMEOUT); - Helpers.logInfo('Test passed.'); - } else { - throw 'We should not get here!'; - } -}); - diff --git a/test/old_tests/test_Connect_Events.js b/test/old_tests/test_Connect_Events.js deleted file mode 100644 index 6ac7390..0000000 --- a/test/old_tests/test_Connect_Events.js +++ /dev/null @@ -1,31 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - throw err.message; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connection opened.'); - CUBRIDClient.query('select * from game'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - CUBRIDClient.closeQuery(queryHandle, function () { - }); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function () { - CUBRIDClient.close(); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed'); - Helpers.logInfo('Test passed'); -}); - - diff --git a/test/old_tests/test_Connect_Sequence.js b/test/old_tests/test_Connect_Sequence.js deleted file mode 100644 index 1c9390e..0000000 --- a/test/old_tests/test_Connect_Sequence.js +++ /dev/null @@ -1,31 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getEngineVersion(callback); - }, - - function (version, callback) { - Helpers.logInfo('Engine version: ' + version); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); - diff --git a/test/old_tests/test_ConnectionPool.js b/test/old_tests/test_ConnectionPool.js deleted file mode 100644 index 067f437..0000000 --- a/test/old_tests/test_ConnectionPool.js +++ /dev/null @@ -1,135 +0,0 @@ -var Helpers = require('../../src/utils/Helpers'), - EventEmitter = require('events').EventEmitter, -//pooling = require('connection_pool'), - pooling = require('c:/Program Files (x86)/nodejs/node_modules/pooling'), - CUBRIDConnection = require('../../src/CUBRIDConnection'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var conn_idx = 1; -var pool = pooling.createPool({ - checkInterval : 1 * 1000, - max : 2, - maxIdleTime : 30 * 1000, - name : 'my pool', - create : function create(callback) { - var client = new EventEmitter(); - client.id = conn_idx++; - Helpers.logInfo('Creating pool client id: ' + client.id); - return callback(null, client); - }, - destroy : function destroy(client) { - Helpers.logInfo('Destroyed pool client id: ' + client.id); - client.was = client.id; - client.id = -1; - } -}); - -pool.acquire(function (err, client) { - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err === null) { - Helpers.logInfo('Database connection acquired for pool client id: ' + client.id); - Helpers.logInfo('Executing query: select * from code'); - CUBRIDClient.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query results rows count for pool client id: ' + client.id + ' is: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query closed for pool client id: ' + client.id); - CUBRIDClient.close(function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Connection closed for pool client id: ' + client.id); - Helpers.logInfo('Waiting some time before releasing the pool client id: ' + client.id + '...'); - setTimeout(function () { - Helpers.logInfo('Releasing pool client id: ' + client.id); - pool.release(client); - }, 10 * 1000); - } - }); - } - }); - } - }); - } - }); -}); - -pool.acquire(function (err, client) { - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err === null) { - Helpers.logInfo('Database connection acquired for pool client id: ' + client.id); - Helpers.logInfo('Executing query: select * from game'); - CUBRIDClient.query("select * from game", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query results rows count for pool client id: ' + client.id + ' is: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query closed for pool client id: ' + client.id); - CUBRIDClient.close(function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Connection closed for pool client id: ' + client.id); - Helpers.logInfo('Waiting some time before releasing the pool client id: ' + client.id + '...'); - setTimeout(function () { - Helpers.logInfo('Releasing pool client id: ' + client.id); - pool.release(client); - }, 10 * 1000); - } - }); - } - }); - } - }); - } - }); -}); - -pool.acquire(function (err, client) { - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err === null) { - Helpers.logInfo('Database connection acquired for pool client id: ' + client.id); - Helpers.logInfo('Executing query: select * from nation'); - CUBRIDClient.query("select * from nation", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query results rows count for pool client id: ' + client.id + ' is: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Query closed for pool client id: ' + client.id); - CUBRIDClient.close(function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Connection closed for pool client id: ' + client.id); - Helpers.logInfo('Waiting some time before releasing the pool client id: ' + client.id + '...'); - setTimeout(function () { - Helpers.logInfo('Releasing pool client id: ' + client.id); - pool.release(client); - }, 10 * 1000); - } - }); - } - }); - } - }); - } - }); -}); - diff --git a/test/old_tests/test_DataTypes.js b/test/old_tests/test_DataTypes.js deleted file mode 100644 index d4dd9ad..0000000 --- a/test/old_tests/test_DataTypes.js +++ /dev/null @@ -1,111 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Creating the test table...'); - CUBRIDClient.batchExecuteNoQuery( - [ - 'drop table if exists test_data_types', - 'CREATE TABLE test_data_types(' + - 'a bigint,' + - 'b bit(1),' + - 'c bit varying(1),' + - 'd blob,' + - 'e character(1),' + - 'f clob,' + - 'g date,' + - 'h datetime,' + - 'i double,' + - 'j float,' + - 'k integer,' + - 'l monetary,' + - 'm national character(1),' + - 'o national character varying(100),' + - 'p numeric(15,0),' + - 'r character varying(100),' + - 's time,' + - 't timestamp,' + - 'u character varying(4096))', - 'insert into test_data_types values(15, B\'0\',B\'0\', \'qwerty\', \'a\', \'qwerty\', \'2012-10-02\',' + - '\'2012-10-02 13:25:45\', 1.5, 2.5, 14, 3.14, N\'9\', N\'95\', 16, \'varchar\', \'1899-12-31 13:25:45\',' + - '\'2012-10-02 13:25:45\', \'varchar\')' - ], - function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from test_data_types'); - CUBRIDClient.query('select * from test_data_types', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 1); - assert(arr[0][0] === 15); - assert(arr[0][1][0] === 0); - assert(arr[0][2][0] === 0); - assert(typeof(arr[0][3]) === 'object'); - assert(arr[0][4] === 'a'); - assert(typeof(arr[0][5]) === 'object'); - assert(arr[0][6].toString() === '2012-10-02T00:00:00.000Z'); - assert(arr[0][7].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[0][8] === 1.5); - assert(arr[0][9] === 2.5); - assert(arr[0][10] === 14); - assert(arr[0][11] === 3.14); - assert(arr[0][12] === '9'); - assert(arr[0][13] === '95'); - assert(arr[0][14] === 16); - assert(arr[0][15] === 'varchar'); - assert(arr[0][16].toString() === '1899-12-31T13:25:45.000Z'); - assert(arr[0][17].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[0][18] === 'varchar'); - - for (var j = 0; j < arr.length; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.batchExecuteNoQuery('drop table test_data_types', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - } - ); - } -}); - - diff --git a/test/old_tests/test_DataTypesEvents.js b/test/old_tests/test_DataTypesEvents.js deleted file mode 100644 index 49a9fd4..0000000 --- a/test/old_tests/test_DataTypesEvents.js +++ /dev/null @@ -1,107 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -global.savedQueryHandle = null; -global.batchExecuteNo = 0; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(null); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Batch execute: create table and insert.'); - CUBRIDClient.batchExecuteNoQuery( - [ - 'drop table if exists test_data_types', - 'CREATE TABLE test_data_types(' + - 'a bigint,' + - 'b bit(1),' + - 'c bit varying(1),' + - 'd blob,' + - 'e character(1),' + - 'f clob,' + - 'g date,' + - 'h datetime,' + - 'i double,' + - 'j float,' + - 'k integer,' + - 'l monetary,' + - 'm national character(1),' + - 'o national character varying(100),' + - 'p numeric(15,0),' + - 'r character varying(100),' + - 's time,' + - 't timestamp,' + - 'u character varying(4096))', - 'insert into test_data_types values(15, B\'0\',B\'0\', \'qwerty\', \'a\', \'qwerty\', \'2012-10-02\',' + - '\'2012-10-02 13:25:45\', 1.5, 2.5, 14, 3.14, N\'9\', N\'95\', 16, \'varchar\', \'1899-12-31 13:25:45\',' + - '\'2012-10-02 13:25:45\', \'varchar\')' - ], - null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_BATCH_COMMANDS_COMPLETED, function () { - if (global.batchExecuteNo === 0) { - Helpers.logInfo('Batch execute done.'); - Helpers.logInfo('Querying: select * from test_data_types'); - global.batchExecuteNo = 1; - CUBRIDClient.query('select * from test_data_types', null); - } else { - Helpers.logInfo('Batch execute done.'); - Helpers.logInfo('Closing query...'); - CUBRIDClient.closeQuery(global.savedQueryHandle, null); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - global.savedQueryHandle = queryHandle; // Save handle - needed for further fetch operations - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Returned rows count: ' + Result2Array.RowsArray(result).length); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 1); - assert(arr[0][0] === 15); - assert(arr[0][1][0] === 0); - assert(arr[0][2][0] === 0); - assert(typeof(arr[0][3]) === 'object'); - assert(arr[0][4] === 'a'); - assert(typeof(arr[0][5]) === 'object'); - assert(arr[0][6].toString() === '2012-10-02T00:00:00.000Z'); - assert(arr[0][7].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[0][8] === 1.5); - assert(arr[0][9] === 2.5); - assert(arr[0][10] === 14); - assert(arr[0][11] === 3.14); - assert(arr[0][12] === '9'); - assert(arr[0][13] === '95'); - assert(arr[0][14] === 16); - assert(arr[0][15] === 'varchar'); - assert(arr[0][16].toString() === '1899-12-31T13:25:45.000Z'); - assert(arr[0][17].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[0][18] === 'varchar'); - - CUBRIDClient.batchExecuteNoQuery('drop table test_data_types', null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Query closed.'); - global.savedQueryHandle = null; - Helpers.logInfo('Closing connection...'); - CUBRIDClient.close(null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_Encoding_Korean.js b/test/old_tests/test_Encoding_Korean.js deleted file mode 100644 index 2fde14d..0000000 --- a/test/old_tests/test_Encoding_Korean.js +++ /dev/null @@ -1,53 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var testData = '이 소포를 부치고 싶은데요.'; // KO: 'I would like to send off this package.' - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - Helpers.logInfo('Connected...'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_encoding', 'create table test_encoding(str varchar(256))'], cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery('insert into test_encoding values(\'' + testData + '\')', cb); - }, - - function (cb) { - CUBRIDClient.query('select * from test_encoding where str = \'' + testData + '\'', cb); - }, - - function (result, queryHandle, cb) { - var arr = Result2Array.RowsArray(result); - assert(arr[0][0] === testData); - CUBRIDClient.closeQuery(queryHandle, cb); - }, - - function (queryHandle, cb) { - CUBRIDClient.batchExecuteNoQuery('drop table test_encoding', cb); - }, - - function (cb) { - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_Encoding_Russian.js b/test/old_tests/test_Encoding_Russian.js deleted file mode 100644 index 104cb00..0000000 --- a/test/old_tests/test_Encoding_Russian.js +++ /dev/null @@ -1,53 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var testData = 'Я хотел бы отослать этот пакет.'; // Russian: 'I would like to send off this package.' - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - Helpers.logInfo('Connected...'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_encoding', 'create table test_encoding(str varchar(256))'], cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery('insert into test_encoding values(\'' + testData + '\')', cb); - }, - - function (cb) { - CUBRIDClient.query('select * from test_encoding where str = \'' + testData + '\'', cb); - }, - - function (result, queryHandle, cb) { - var arr = Result2Array.RowsArray(result); - assert(arr[0][0] === testData); - CUBRIDClient.closeQuery(queryHandle, cb); - }, - - function (queryHandle, cb) { - CUBRIDClient.batchExecuteNoQuery('drop table test_encoding', cb); - }, - - function (cb) { - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_ExecuteWithParams.js b/test/old_tests/test_ExecuteWithParams.js deleted file mode 100644 index c623d40..0000000 --- a/test/old_tests/test_ExecuteWithParams.js +++ /dev/null @@ -1,56 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -var sqlDrop = 'drop table if exists ?'; -var sqlCreate = 'create table ?(id int)'; -var sqlInsert = 'insert into ? values(1)'; -var arrValues = ['node_test']; - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.executeWithParams(sqlDrop, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.executeWithParams(sqlCreate, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.executeWithParams(sqlInsert, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.executeWithParams(sqlDrop, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_ExecuteWithTypedParams.js b/test/old_tests/test_ExecuteWithTypedParams.js deleted file mode 100644 index 62e11ee..0000000 --- a/test/old_tests/test_ExecuteWithTypedParams.js +++ /dev/null @@ -1,121 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery( - [ - 'drop table if exists test_params', - 'CREATE TABLE test_params(' + - 'a bigint,' + - 'b bit(8),' + - 'c bit varying(8),' + - 'd character(1),' + - 'e date,' + - 'f datetime,' + - 'g double,' + - 'h float,' + - 'i integer,' + - 'j monetary,' + - 'k national character(1),' + - 'l national character varying(100),' + - 'm numeric(15,0),' + - 'n character varying(100),' + - 'o time,' + - 'p timestamp,' + - 'q character varying(4096))' - ], - function (err) { - if (err) { - errorHandler(err); - } else { - var bitValue = new Buffer(1), - date = new Date(), - varBitValue = new Buffer(1), - values; - - bitValue[0] = 0; - varBitValue[0] = 128; - - date.setUTCFullYear(2012, 10, 2); - date.setUTCHours(13); - date.setUTCMinutes(25); - date.setUTCSeconds(45); - date.setUTCMilliseconds(0); - - values = [15, bitValue, varBitValue, 'a', date, date, 1.5, 2.5, 14, 3.14, '9' , '95', 16, 'varnchar', date, date, 'varcharWithDouble"Quote']; - - CUBRIDClient.executeWithTypedParams( - 'INSERT INTO test_params VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', - values, - ['bigint', 'bit', 'varbit', 'char', 'date', 'datetime', 'double', 'float', 'int', 'monetary', - 'nchar', 'varnchar', 'numeric', 'varchar', 'time', 'timestamp', 'varchar'], - function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.query('SELECT * FROM test_params', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - var arr = Result2Array.RowsArray(result); - - assert(Result2Array.TotalRowsCount(result) === 1); - - Helpers.logInfo('Query result rows count: ' + arr.length); - - assert(arr.length === 1); - - arr = arr[0]; - - assert(arr[0] === values[0]); - assert(arr[1][0] === values[1][0]); - assert(arr[2][0] === values[2][0]); - assert(arr[3] === values[3]); - assert(arr[4].toString() === '2012-10-02T00:00:00.000Z'); - assert(arr[5].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[6] === values[6]); - assert(arr[7] === values[7]); - assert(arr[8] === values[8]); - assert(arr[9] === values[9]); - assert(arr[10] === values[10]); - assert(arr[11] === values[11]); - assert(arr[12] === values[12]); - assert(arr[13] === values[13]); - assert(arr[14].toString() === '1899-12-31T13:25:45.000Z'); - assert(arr[15].toString() === '2012-10-02T13:25:45.000Z'); - assert(arr[16] === values[16]); - - CUBRIDClient.execute('DROP TABLE test_params', function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); diff --git a/test/old_tests/test_GetDbParameter.js b/test/old_tests/test_GetDbParameter.js deleted file mode 100644 index ed28a00..0000000 --- a/test/old_tests/test_GetDbParameter.js +++ /dev/null @@ -1,40 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, - CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, function (err, value) { - if (err) { - errorHandler(err); - } else { - assert(value === CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); diff --git a/test/old_tests/test_GetDbParameterError.js b/test/old_tests/test_GetDbParameterError.js deleted file mode 100644 index 322f35a..0000000 --- a/test/old_tests/test_GetDbParameterError.js +++ /dev/null @@ -1,34 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -function errorHandler(err) { - Helpers.logInfo(err.message); - assert(err.message === '-1011:CAS_ER_PARAM_NAME'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH, function (err, value) { - if (err) { - errorHandler(err); - } else { - throw 'We should not get here'; - } - }); - } -}); diff --git a/test/old_tests/test_GetDbParameter_Events.js b/test/old_tests/test_GetDbParameter_Events.js deleted file mode 100644 index 9083ef9..0000000 --- a/test/old_tests/test_GetDbParameter_Events.js +++ /dev/null @@ -1,65 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_GET_DB_PARAMETER_COMPLETED, function (value) { - var isolationLevel = ''; - - if (typeof value === 'undefined') { - throw "Db parameter retrieved unsuccessfully!"; - } - - switch (value) { - case CAS.CUBRIDIsolationLevel.TRAN_UNKNOWN_ISOLATION: - isolationLevel = 'TRAN_UNKNOWN_ISOLATION'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE: - isolationLevel = 'TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_COMMIT_CLASS_COMMIT_INSTANCE: - isolationLevel = 'TRAN_COMMIT_CLASS_COMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_UNCOMMIT_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_UNCOMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_COMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_REP_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_REP_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_SERIALIZABLE: - isolationLevel = 'TRAN_SERIALIZABLE'; - break; - } - - if (isolationLevel === '') { - throw "Db parameter value is not recognized!"; - } - - Helpers.logInfo('Get Db parameter completed: ' + isolationLevel); - CUBRIDClient.close(); -}) -; - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - diff --git a/test/old_tests/test_Helpers.js b/test/old_tests/test_Helpers.js deleted file mode 100644 index ecc57e2..0000000 --- a/test/old_tests/test_Helpers.js +++ /dev/null @@ -1,70 +0,0 @@ -var assert = require('assert'), - Helpers = require('../../src/utils/Helpers'); - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -var buffer = new Buffer(5); -buffer.write('12345'); -var value1 = ['6', '7', '8']; -var comb1 = Helpers._combineData(buffer, value1); - -assert(comb1.toString(), '12345678'); - -var value2 = new Buffer('678'); -var comb2 = Helpers._combineData(buffer, value2); - -assert(comb2.toString(), '12345678'); - -var value3 = new Buffer(3); -value3[0] = '6'.charCodeAt(0); -value3[1] = '7'.charCodeAt(0); -value3[2] = '8'.charCodeAt(0); - -var comb3 = Helpers._combineData(buffer, value3); - -assert(comb3.toString(), '12345678'); - -var sql = 'insert into a values(?, ?, ?)'; -var newsql = Helpers._sqlFormat(sql, ['1', 2, null], ['\'', '', '']); - -assert(newsql, "insert into a values('1', 2, NULL)"); - -var unescaped = 'insert into "a values(\b)'; -var escaped = Helpers._escapeString(unescaped); -assert(escaped, "insert into \"\"a values(\\b)"); - -//Test Input validation functions -assert(Helpers._validateInputBoolean(null) === false); -assert(Helpers._validateInputBoolean(4) === false); -assert(Helpers._validateInputBoolean(3.14) === false); -assert(Helpers._validateInputBoolean('qwerty') === false); -assert(Helpers._validateInputBoolean(true) === true); -assert(Helpers._validateInputBoolean(1) === true); - -assert(Helpers._validateInputPositive(null) === false); -assert(Helpers._validateInputPositive(3.14) === true); -assert(Helpers._validateInputPositive(-1) === false); -assert(Helpers._validateInputPositive(0) === false); -assert(Helpers._validateInputPositive(14) === true); - -assert(Helpers._validateInputTimeout(null) === false); -assert(Helpers._validateInputTimeout(3.14) === false); -assert(Helpers._validateInputTimeout(-1) === false); -assert(Helpers._validateInputTimeout(0) === true); -assert(Helpers._validateInputTimeout(14) === true); - -assert(Helpers._validateInputString(null) === false); -assert(Helpers._validateInputString(3) === false); -assert(Helpers._validateInputString(true) === false); -assert(Helpers._validateInputString('') === false); -assert(Helpers._validateInputString('querty') === true); - -assert(Helpers._validateInputSQLString(null) === false); -assert(Helpers._validateInputSQLString(3) === false); -assert(Helpers._validateInputSQLString(true) === false); -assert(Helpers._validateInputSQLString('') === false); -assert(Helpers._validateInputSQLString('a') === false); -assert(Helpers._validateInputSQLString('qwerty') === true); - -console.log('Unit test ended OK.'); - diff --git a/test/old_tests/test_IndexExports.js b/test/old_tests/test_IndexExports.js deleted file mode 100644 index b700e15..0000000 --- a/test/old_tests/test_IndexExports.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../index').Helpers, - Result2Array = require('../../index').Result2Array, - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - assert(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_LastInsertID.js b/test/old_tests/test_LastInsertID.js deleted file mode 100644 index 9e0e992..0000000 --- a/test/old_tests/test_LastInsertID.js +++ /dev/null @@ -1,62 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, text VARCHAR(32))'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['insert into node_test values(NULL, \'database\'),(NULL, \'manager\')'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.query('select LAST_INSERT_ID()', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 1); - var arr = Result2Array.RowsArray(result); - assert(arr[0].toString() === '1'); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_Named_Functions.js b/test/old_tests/test_Named_Functions.js deleted file mode 100644 index 5c2b704..0000000 --- a/test/old_tests/test_Named_Functions.js +++ /dev/null @@ -1,53 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -CUBRIDClient.connect(connect_callback); - -function connect_callback(err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.query('select * from game', query_callback); - } -} - -function query_callback(err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query results:'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - Helpers.logInfo('Fetching more rows...'); - CUBRIDClient.fetch(queryHandle, fetch_callback); - } -} - -function fetch_callback(err, result){ - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Fetch results:'); - Helpers.logInfo('*** Fetch data received.'); - Helpers.logInfo('*** Current fetch of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - CUBRIDClient.close(close_callback); - } -} - -function close_callback(err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } -} diff --git a/test/old_tests/test_NodePool.js b/test/old_tests/test_NodePool.js deleted file mode 100644 index 92c27d3..0000000 --- a/test/old_tests/test_NodePool.js +++ /dev/null @@ -1,152 +0,0 @@ -var Helpers = require('../../src/utils/Helpers'), - generic_pool = require('generic-pool'), - //generic_pool = require('c:/Program Files (x86)/nodejs/node_modules/generic-pool'), - CUBRIDConnection = require('../../src/CUBRIDConnection'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var pool = generic_pool.Pool({ - name : 'cubrid-node-pool', - max : 2, - create : function (callback) { - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err === null) { - Helpers.logInfo('Connection opened.'); - } - callback(err, CUBRIDClient); - }); - }, - destroy : function (db) { - db.close(function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Connection closed.'); - } - }); - }, - idleTimeoutMillis : 30000, - priorityRange : 3, - log : false -}); - -pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[1] Query results:'); - assert(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[1] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[1] Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[1] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } -}, 1); - -pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[2] Query results:'); - assert(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[2] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[2] Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[2] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } -}, 1); - -pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[3] Query results:'); - assert(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[3] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[3] Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[3] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } -}, 2); - -pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[4] Query results:'); - assert(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[4] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[4] Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[4] Query closed.'); - // return object back to pool - pool.release(client); - } - }); - } - }); - } -}, 1); - -pool.drain(function () { - pool.destroyAllNow(null); -}); diff --git a/test/old_tests/test_ObjectsArray.js b/test/old_tests/test_ObjectsArray.js deleted file mode 100644 index 4225f7c..0000000 --- a/test/old_tests/test_ObjectsArray.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.ObjectsArray(result); - assert(arr.length === 215); - assert(arr[arr.length - 1].code === 'AFG'); - assert(arr[arr.length - 1].name === 'Afghanistan'); - assert(arr[arr.length - 1].continent === 'Asia'); - assert(arr[arr.length - 1].capital === 'Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].code + "," + arr[j].name + "," + arr[j].continent + "," + arr[j].capital); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); diff --git a/test/old_tests/test_ParallelQueries.js b/test/old_tests/test_ParallelQueries.js deleted file mode 100644 index b1851ff..0000000 --- a/test/old_tests/test_ParallelQueries.js +++ /dev/null @@ -1,96 +0,0 @@ -var CUBRIDConnection = require('../../src/CUBRIDConnection'); -var Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -function errorHandler(err) { - throw err.message; -} - -function fork(async_calls) { - for (var i = 0; i < async_calls.length; i++) { - async_calls[i](); - } - - setTimeout(function () { - Helpers.logInfo('Test passed.'); - }, 3000); -} - -function A() { - Helpers.logInfo('Function A called.'); - Helpers.logInfo('Connecting... [A].'); - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected [A], on port: ' + CUBRIDClient.connectionBrokerPort); - setTimeout(CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('Querying [A]: select * from nation'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count [A]: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed [A].'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed [A].'); - } - }); - } - }); - } - }), 3000); - } - }); -} - -function B() { - Helpers.logInfo('Function B called.'); - var CUBRIDClient2 = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - Helpers.logInfo('Connecting... [B].'); - CUBRIDClient2.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected [B], on port: ' + CUBRIDClient2.connectionBrokerPort); - CUBRIDClient2.query('select * from game', function (err, result, queryHandle) { - Helpers.logInfo('Querying [B]: select * from game'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count [B]: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient2.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed [B].'); - CUBRIDClient2.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed [B].'); - } - }); - } - }); - } - }); - } - }); -} - -function C() { - Helpers.logInfo('Function C called.'); -} - -fork([A, B, C]); - diff --git a/test/old_tests/test_ParallelQueries_2.js b/test/old_tests/test_ParallelQueries_2.js deleted file mode 100644 index 3f1999b..0000000 --- a/test/old_tests/test_ParallelQueries_2.js +++ /dev/null @@ -1,92 +0,0 @@ -var CUBRIDConnection = require('../../src/CUBRIDConnection'); - -// First connection -var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); -// Second connection -var CUBRIDClient2 = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - -var Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -function errorHandler(err) { - throw err.message; -} - -function A() { - Helpers.logInfo('Function A called.'); - Helpers.logInfo('Connecting... [A].'); - CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected [A], on port: ' + CUBRIDClient.connectionBrokerPort); - setTimeout(CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('Querying [A]: select * from nation'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count [A]: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed [A].'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed [A].'); - } - }); - } - }); - } - }), 3000); - } - }); -} - -function B() { - Helpers.logInfo('Function B called.'); - Helpers.logInfo('Connecting... [B].'); - CUBRIDClient2.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected [B], on port: ' + CUBRIDClient2.connectionBrokerPort); - CUBRIDClient2.query('select * from game', function (err, result, queryHandle) { - Helpers.logInfo('Querying [B]: select * from game'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count [B]: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient2.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed [B].'); - CUBRIDClient2.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed [B].'); - } - }); - } - }); - } - }); - } - }); -} - -A(); -B(); - -setTimeout(function () { - Helpers.logInfo('Test passed.'); -}, 5000); - - diff --git a/test/old_tests/test_ParallelQueries_3.js b/test/old_tests/test_ParallelQueries_3.js deleted file mode 100644 index a2ee3be..0000000 --- a/test/old_tests/test_ParallelQueries_3.js +++ /dev/null @@ -1,61 +0,0 @@ -var CUBRIDConnection = require('../../src/CUBRIDConnection'); - -var Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -var executed = 0; - -function errorHandler(err) { - throw err.message; -} - -function RunQueryInSeparateConnection(i) { - setTimeout(function () { - Helpers.logInfo('Opening connecting no. ' + i + '...'); - var CUBRIDClient = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); - CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection no. ' + i + ' was opened on port: ' + CUBRIDClient.connectionBrokerPort); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('On connection no. ' + i + ' we are executing query: select * from nation'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('On connection no. ' + i + ' we got query result rows count: ' + Result2Array.TotalRowsCount(result)); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed for connection no. ' + i + '.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection no. ' + i + ' was closed.'); - executed++; - Helpers.logInfo('Functions completed: ' + executed + ' out of 10 scheduled.'); - } - }); - } - }); - } - }); - } - }); - }, Math.random() * 1000); -} - -Helpers.logInfo('Please wait 10 sec. for the test to complete...'); -setTimeout(function () { - Helpers.logInfo('Test passed.'); -}, 10000); - -// Open 10 connections and for each, execute a query -for (var i = 1; i <= 10; i++) { - RunQueryInSeparateConnection(i); -} - diff --git a/test/old_tests/test_QueriesQueue.js b/test/old_tests/test_QueriesQueue.js deleted file mode 100644 index d8c18b0..0000000 --- a/test/old_tests/test_QueriesQueue.js +++ /dev/null @@ -1,119 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_A = 'SELECT * from nation'; -var SQL_B = 'SELECT * from code'; -var SQL_C = 'SELECT * from game'; - -CUBRIDClient.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - CUBRIDClient.addQuery(SQL_A, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - CUBRIDClient.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - Helpers.logInfo('Fetch result: ' + result); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - CUBRIDClient.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' closed!'); - } - }); - } - }); - } - }); - - CUBRIDClient.addQuery(SQL_B, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 6); - assert(arr[0].toString() === 'X,Mixed'); - CUBRIDClient.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - Helpers.logInfo('Fetch result: ' + result); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - CUBRIDClient.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' closed!'); - } - }); - } - }); - } - }); - - CUBRIDClient.addQuery(SQL_C, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - CUBRIDClient.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - assert(arr.length === 241); - assert(arr[0].toString() === '2004,20317,14375,30124,GRE,S,2004-08-26T00:00:00.000Z'); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - CUBRIDClient.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' closed!'); - } - }); - } - }); - } - }); - - setTimeout(function () { - CUBRIDClient.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - } - }); - }, 5000); - } -}); diff --git a/test/old_tests/test_QueriesQueue_Events.js b/test/old_tests/test_QueriesQueue_Events.js deleted file mode 100644 index 7f0c1ad..0000000 --- a/test/old_tests/test_QueriesQueue_Events.js +++ /dev/null @@ -1,69 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_A = 'SELECT * from nation'; -var SQL_B = 'SELECT * from code'; -var SQL_C = 'SELECT * from game'; - -CUBRIDClient.connect(function () { -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw err; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.addQuery(SQL_A, null); - CUBRIDClient.addQuery(SQL_B, null); - CUBRIDClient.addQuery(SQL_C, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle, sql) { - Helpers.logInfo('Executed! - handle: ' + queryHandle); - Helpers.logInfo('Query result for handle: ' + queryHandle + ': ' + result); - var arr = Result2Array.RowsArray(result); - switch (sql) { - case SQL_A: - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - break; - case SQL_B: - assert(Result2Array.TotalRowsCount(result) === 6); - assert(arr[0].toString() === 'X,Mixed'); - break; - case SQL_C: - assert(arr.length === 235); - assert(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - } - CUBRIDClient.fetch(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - Helpers.logInfo('Fetch results for handle: ' + queryHandle + ': ' + result); - CUBRIDClient.closeQuery(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - Helpers.logInfo('There is no more data to fetch.'); - CUBRIDClient.closeQuery(queryHandle, null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo(queryHandle + ' was closed!'); - if (CUBRIDClient._queriesQueue.length === 0) { - setTimeout(function () { - CUBRIDClient.close(); - }, 1000); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); diff --git a/test/old_tests/test_QueriesQueue_Mixed.js b/test/old_tests/test_QueriesQueue_Mixed.js deleted file mode 100644 index b67d73b..0000000 --- a/test/old_tests/test_QueriesQueue_Mixed.js +++ /dev/null @@ -1,62 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_DELETE = 'DELETE FROM [code] WHERE s_name = \'A\''; -var SQL_INSERT = 'INSERT INTO [code] VALUES(\'A\', \'ABC\')'; -var SQL_COUNT = 'SELECT COUNT(*) from [code]'; - -CUBRIDClient.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - - Helpers.logInfo('Queue-ing: ' + SQL_DELETE); - CUBRIDClient.addNonQuery(SQL_DELETE, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_DELETE + ' executed.'); - } - }); - - Helpers.logInfo('Queue-ing: ' + SQL_INSERT); - CUBRIDClient.addNonQuery(SQL_INSERT, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_INSERT + ' executed.'); - } - }); - - Helpers.logInfo('Queue-ing: ' + SQL_COUNT); - CUBRIDClient.addQuery(SQL_COUNT, function (err, result) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_COUNT + ' executed.'); - Helpers.logInfo('Table rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 1); - assert(arr[0][0] === 7); - } - }); - - Helpers.logInfo('Executing: ' + SQL_DELETE); - CUBRIDClient.addNonQuery(SQL_DELETE, null); - CUBRIDClient.addQuery(SQL_COUNT, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - assert(arr[0][0] === 6); - CUBRIDClient.close(function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - }); - } - }); - } -}); diff --git a/test/old_tests/test_QueriesQueue_MultiFetch.js b/test/old_tests/test_QueriesQueue_MultiFetch.js deleted file mode 100644 index 5bbced6..0000000 --- a/test/old_tests/test_QueriesQueue_MultiFetch.js +++ /dev/null @@ -1,171 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - ActionQueue = require('../../src/utils/ActionQueue'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var SQL_A = 'SELECT * from event'; -var SQL_B = 'SELECT * from game'; -var SQL_C = 'SELECT * from participant'; -var SQL_A_fetchResult; -var SQL_B_fetchResult; -var SQL_C_fetchResult; - -CUBRIDClient.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - CUBRIDClient.addQuery(SQL_A, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(Result2Array.TotalRowsCount(result) === 422); - assert(arr[0].toString() === '20421,Wrestling,Greco-Roman 97kg,M,1'); - ActionQueue.while( - function () { - return SQL_A_fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - Helpers.logInfo('Fetch result for handle ' + queryHandle + ': ' + result); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_A_fetchResult = result; - callback.call(err); - } - }); - }, - - function (err) { - if (err) { - throw err; - } else { - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - CUBRIDClient.addQuery(SQL_B, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 235); - assert(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - ActionQueue.while( - function () { - return SQL_B_fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - Helpers.logInfo('Fetch result for handle ' + queryHandle + ': ' + result); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_B_fetchResult = result; - callback.call(err); - } - }); - }, - - function (err) { - if (err) { - throw err; - } else { - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - CUBRIDClient.addQuery(SQL_C, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 309); - assert(arr[0].toString() === '2004,ZAM,0,0,0'); - ActionQueue.while( - function () { - return SQL_C_fetchResult !== null; - }, - - function (callback) { - CUBRIDClient.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - Helpers.logInfo('Fetch result for handle ' + queryHandle + ': ' + result); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_C_fetchResult = result; - callback.call(err); - } - }); - }, - - function (err) { - if (err) { - throw err; - } else { - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - setTimeout(function () { - CUBRIDClient.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - } - }); - }, 5000); - } -}); diff --git a/test/old_tests/test_QueryCollision.js b/test/old_tests/test_QueryCollision.js deleted file mode 100644 index ae0f598..0000000 --- a/test/old_tests/test_QueryCollision.js +++ /dev/null @@ -1,62 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -var errorOcurred = false; - -assert(CUBRIDClient.connectionPending === false); -assert(CUBRIDClient.connectionOpened === false); -assert(CUBRIDClient.queryPending === false); - -CUBRIDClient.connect(function () { - assert(CUBRIDClient.connectionPending === false); - assert(CUBRIDClient.connectionOpened === true); - assert(CUBRIDClient.queryPending === false); - - Helpers.logInfo('Executing first query...'); - CUBRIDClient.query('select * from event', function () { - }); - - assert(CUBRIDClient.connectionPending === false); - assert(CUBRIDClient.connectionOpened === true); - - Helpers.logInfo('Executing second query...'); - CUBRIDClient.query('select * from event', function () { - }); -}); - -// Close the connection; this will close also the active query status -setTimeout(function () { - assert(CUBRIDClient.connectionPending === false); - assert(CUBRIDClient.connectionOpened === true); - assert(CUBRIDClient.queryPending === false); - - CUBRIDClient.close(function () { - assert(CUBRIDClient.connectionPending === false); - assert(CUBRIDClient.connectionOpened === false); - assert(CUBRIDClient.queryPending === false); - }); -}, 3000); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - assert(err.message === 'Another query is already in progress! - denying current query request.'); - errorOcurred = true; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - if (errorOcurred) { - Helpers.logInfo('Test passed.'); - } else { - Helpers.logError('Test failed.'); - } -}); - - diff --git a/test/old_tests/test_QueryCollision_2.js b/test/old_tests/test_QueryCollision_2.js deleted file mode 100644 index 96b35a3..0000000 --- a/test/old_tests/test_QueryCollision_2.js +++ /dev/null @@ -1,65 +0,0 @@ -var Result2Array = require('../../src/resultset/Result2Array'), - events = require('events'), - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'), - CUBRIDclient = require('./test_Setup.js').createDefaultCUBRIDDemodbConnection; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -var getSingleValue = function (sql, client) { - var ret = null; - var self = this; - - client.query(sql, function (err, result, queryHandle) { - if (err) { - self.emit('error', err); - } else { - ret = Result2Array.RowsArray(result)[0][0]; - client.closeQuery(queryHandle, function (err) { - if (err) { - self.emit('error', err); - } else { - self.emit('done'); - } - }); - self.emit('return', ret); - } - }); -}; - -getSingleValue.prototype = new events.EventEmitter(); - -try { - var getMyValue = new getSingleValue('select count(*) from game', CUBRIDclient); -} catch (ex) { - Helpers.logInfo(ex.message); - throw 'We should not get here!'; -} - -getMyValue.on('return', function (result) { - assert(result === 8653); - setTimeout(function(){ - CUBRIDclient.close(function () { - }); - }, 100); -}); - -getMyValue.on('error', function (err) { - Helpers.logInfo(err.message); - throw err; -}); - -getMyValue.on('done', function () { - Helpers.logInfo('Test 1 passed.'); -}); - -try { - var getMyValue2 = new getSingleValue('select wrong_count(*) from game', CUBRIDclient); - - getMyValue2.on('return', function () { - throw 'We should not get here!'; - }); -} catch (ex) { - assert(ex.message === "Another query is already in progress! - denying current query request."); - Helpers.logInfo('Test 2 passed.'); -} diff --git a/test/old_tests/test_QueryOldProtocol.js b/test/old_tests/test_QueryOldProtocol.js deleted file mode 100644 index 9e04686..0000000 --- a/test/old_tests/test_QueryOldProtocol.js +++ /dev/null @@ -1,50 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.setEnforceOldQueryProtocol(true); - Helpers.logInfo('Querying: select * from nation'); - CUBRIDClient.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 215); - assert(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - assert(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); diff --git a/test/old_tests/test_QueryWithParams.js b/test/old_tests/test_QueryWithParams.js deleted file mode 100644 index 75da87c..0000000 --- a/test/old_tests/test_QueryWithParams.js +++ /dev/null @@ -1,49 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var sql = 'select * from nation where continent = ?'; -var arrValues = ['Oceania']; - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: ' + sql); - CUBRIDClient.queryWithParams(sql, arrValues, ["'"], function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.TotalRowsCount(result) === 15); - var arr = Result2Array.RowsArray(result); - assert(arr[0].toString() === 'KIR,Kiribati,Oceania,Tarawa'); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_QueryWithParams_2.js b/test/old_tests/test_QueryWithParams_2.js deleted file mode 100644 index 8258789..0000000 --- a/test/old_tests/test_QueryWithParams_2.js +++ /dev/null @@ -1,48 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var sql = 'SELECT * FROM ? WHERE ? LIKE ? AND LENGTH(?) > ?'; -var arrValues = ['nation', 'code', 'A%', 'capital', '5']; -var arrDelimiters = ['`', '', '\'', '', '']; - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: ' + sql); - CUBRIDClient.queryWithParams(sql, arrValues, arrDelimiters, function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.TotalRowsCount(result) === 12); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_QueryWithTypedParams.js b/test/old_tests/test_QueryWithTypedParams.js deleted file mode 100644 index 091ad8a..0000000 --- a/test/old_tests/test_QueryWithTypedParams.js +++ /dev/null @@ -1,49 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -var sql = 'select * from nation where continent = ?'; -var arrValues = ['Oceania']; - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: ' + sql); - CUBRIDClient.queryWithTypedParams(sql, arrValues, ['varchar'], function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - assert(Result2Array.TotalRowsCount(result) === 15); - var arr = Result2Array.RowsArray(result); - assert(arr[0].toString() === 'KIR,Kiribati,Oceania,Tarawa'); - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_Rollback.js b/test/old_tests/test_Rollback.js deleted file mode 100644 index 49c63b2..0000000 --- a/test/old_tests/test_Rollback.js +++ /dev/null @@ -1,70 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.setAutoCommitMode(false, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.rollback(function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.query('select * from node_test', function (err, result) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) !== 1, 'Didn\'t rollback!!!'); - CUBRIDClient.setAutoCommitMode(true, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } -}); - diff --git a/test/old_tests/test_Schema.js b/test/old_tests/test_Schema.js deleted file mode 100644 index a418f9d..0000000 --- a/test/old_tests/test_Schema.js +++ /dev/null @@ -1,66 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_TABLE, null, callback); - }, - - function (result, callback) { - Helpers.logInfo('Schema tables results:'); - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 32); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 33); - } - } - callback(); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_VIEW, null, callback); - }, - - function (result, callback) { - Helpers.logInfo('Schema views results:'); - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 16); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 17); - } - } - callback(); - }, - - function (callback) { - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaAttribute.js b/test/old_tests/test_SchemaAttribute.js deleted file mode 100644 index 0f0b9ca..0000000 --- a/test/old_tests/test_SchemaAttribute.js +++ /dev/null @@ -1,58 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_ATTRIBUTE, null, callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 191); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 212); - } - } - assert(result[0].Name === 'code'); - assert(result[0].Scale === 0); - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result[0].Precision === 0); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result[0].Precision === 10); - } - } - assert(result[0].NonNull === true); - assert(result[0].Unique === true); - assert(result[0].ClassName === 'athlete'); - assert(result[0].SourceClass === 'athlete'); - assert(result[0].IsKey === true); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaClassPrivilege.js b/test/old_tests/test_SchemaClassPrivilege.js deleted file mode 100644 index 5942dc1..0000000 --- a/test/old_tests/test_SchemaClassPrivilege.js +++ /dev/null @@ -1,46 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_CLASS_PRIVILEGE, null, callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 96); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 97); - } - } - assert(result[0].TableName === 'db_root'); - assert(result[0].Privilege === 'SELECT'); - assert(result[0].Grantable === false); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaConstraint.js b/test/old_tests/test_SchemaConstraint.js deleted file mode 100644 index 4b3d10f..0000000 --- a/test/old_tests/test_SchemaConstraint.js +++ /dev/null @@ -1,35 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_CONSTRAINT, 'event', callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - assert(result.length === 0); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaExportedKeys.js b/test/old_tests/test_SchemaExportedKeys.js deleted file mode 100644 index f705229..0000000 --- a/test/old_tests/test_SchemaExportedKeys.js +++ /dev/null @@ -1,43 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_EXPORTED_KEYS, 'athlete', callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - assert(result.length === 1); - assert(result[0].FkName === 'fk_game_athlete_code'); - assert(result[0].PkName === 'pk_athlete_code'); - assert(result[0].FkTableName === 'game'); - assert(result[0].PkTableName === 'athlete'); - assert(result[0].FkColumnName === 'athlete_code'); - assert(result[0].PkColumnName === 'code'); - assert(result[0].UpdateAction === 1); - assert(result[0].DeleteAction === 1); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaImportedKeys.js b/test/old_tests/test_SchemaImportedKeys.js deleted file mode 100644 index b1c23f9..0000000 --- a/test/old_tests/test_SchemaImportedKeys.js +++ /dev/null @@ -1,73 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_IMPORTED_KEYS, 'game', callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - assert(result.length === 2); - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result[0].FkName === 'fk_game_athlete_code'); - assert(result[0].PkName === 'pk_athlete_code'); - assert(result[0].FkTableName === 'game'); - assert(result[0].PkTableName === 'athlete'); - assert(result[0].FkColumnName === 'athlete_code'); - assert(result[0].PkColumnName === 'code'); - assert(result[0].UpdateAction === 1); - assert(result[0].DeleteAction === 1); - assert(result[1].FkName === 'fk_game_event_code'); - assert(result[1].PkName === 'pk_event_code'); - assert(result[1].FkTableName === 'game'); - assert(result[1].PkTableName === 'event'); - assert(result[1].FkColumnName === 'event_code'); - assert(result[1].PkColumnName === 'code'); - assert(result[1].UpdateAction === 1); - assert(result[1].DeleteAction === 1); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result[0].FkName === 'fk_game_event_code'); - assert(result[0].PkName === 'pk_event_code'); - assert(result[0].FkTableName === 'game'); - assert(result[0].PkTableName === 'event'); - assert(result[0].FkColumnName === 'event_code'); - assert(result[0].PkColumnName === 'code'); - assert(result[0].UpdateAction === 1); - assert(result[0].DeleteAction === 1); - assert(result[1].FkName === 'fk_game_athlete_code'); - assert(result[1].PkName === 'pk_athlete_code'); - assert(result[1].FkTableName === 'game'); - assert(result[1].PkTableName === 'athlete'); - assert(result[1].FkColumnName === 'athlete_code'); - assert(result[1].PkColumnName === 'code'); - assert(result[1].UpdateAction === 1); - assert(result[1].DeleteAction === 1); - } - } - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaPrimaryKeys.js b/test/old_tests/test_SchemaPrimaryKeys.js deleted file mode 100644 index 04a323c..0000000 --- a/test/old_tests/test_SchemaPrimaryKeys.js +++ /dev/null @@ -1,38 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_PRIMARY_KEY, 'athlete', callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - assert(result.length === 1); - assert(result[0].TableName === 'athlete'); - assert(result[0].ColumnName === 'code'); - assert(result[0].KeyName === 'pk_athlete_code'); - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SchemaUsers.js b/test/old_tests/test_SchemaUsers.js deleted file mode 100644 index b2600a4..0000000 --- a/test/old_tests/test_SchemaUsers.js +++ /dev/null @@ -1,42 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.query('select [name] from db_user', callback); - }, - - function (result, queryHandle, callback) { - Helpers.logInfo(Result2Array.ColumnNamesArray(result).toString()); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 2); - for (var i = 0; i < arr.length; i++) { - Helpers.logInfo(arr[i].toString()); - } - - callback(); - }, - - function (callback) { - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_Schema_Columns.js b/test/old_tests/test_Schema_Columns.js deleted file mode 100644 index 2ca2b4e..0000000 --- a/test/old_tests/test_Schema_Columns.js +++ /dev/null @@ -1,48 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_ATTRIBUTE, callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 32); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.0')) { - assert(result.length === 33); - } - } - - callback(); - }, - - function (callback) { - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_Schema_Events.js b/test/old_tests/test_Schema_Events.js deleted file mode 100644 index c227919..0000000 --- a/test/old_tests/test_Schema_Events.js +++ /dev/null @@ -1,59 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -var currentSchemaToReceive = 0; -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_TABLE, null, null); - currentSchemaToReceive = CUBRIDClient.SCHEMA_TABLE; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_SCHEMA_DATA_AVAILABLE, function (result) { - Helpers.logInfo('Schema data received.'); - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - if (currentSchemaToReceive === CUBRIDClient.SCHEMA_TABLE) { - assert(result.length === 32); - } else { - if (currentSchemaToReceive === CUBRIDClient.SCHEMA_VIEW) { - assert(result.length === 16); - } - } - } else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - if (currentSchemaToReceive === CUBRIDClient.SCHEMA_TABLE) { - assert(result.length === 33); - } else { - if (currentSchemaToReceive === CUBRIDClient.SCHEMA_VIEW) { - assert(result.length === 17); - } - } - } - } - if (currentSchemaToReceive === CUBRIDClient.SCHEMA_TABLE) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_VIEW, null, null); - currentSchemaToReceive = CUBRIDClient.SCHEMA_VIEW; - } else { - CUBRIDClient.close(); - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_Schema_Tables.js b/test/old_tests/test_Schema_Tables.js deleted file mode 100644 index 1931477..0000000 --- a/test/old_tests/test_Schema_Tables.js +++ /dev/null @@ -1,48 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_TABLE, null, callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 32); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 33); - } - } - - callback(); - }, - - function (callback) { - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_Schema_Views.js b/test/old_tests/test_Schema_Views.js deleted file mode 100644 index 2d20004..0000000 --- a/test/old_tests/test_Schema_Views.js +++ /dev/null @@ -1,48 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - CUBRIDClient.connect(callback); - }, - - function (callback) { - CUBRIDClient.getSchema(CUBRIDClient.SCHEMA_VIEW, null, callback); - }, - - function (result, callback) { - for (var i = 0; i < result.length; i++) { - Helpers.logInfo(result[i]); - } - - if (CUBRIDClient._DB_ENGINE_VER.startsWith('8.4')) { - assert(result.length === 16); - } - else { - if (CUBRIDClient._DB_ENGINE_VER.startsWith('9.1')) { - assert(result.length === 17); - } - } - - callback(); - }, - - function (callback) { - CUBRIDClient.close(callback); - } - ], - - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - } - } -); diff --git a/test/old_tests/test_SelectConstant.js b/test/old_tests/test_SelectConstant.js deleted file mode 100644 index 2e60e28..0000000 --- a/test/old_tests/test_SelectConstant.js +++ /dev/null @@ -1,51 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select 1'); - CUBRIDClient.query('select 1', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 1); - assert(arr[0].toString() === '1'); - for (var j = 0; j < arr.length; j++) { - Helpers.logInfo(arr[j].toString()); - } - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - }); - } -}); - - diff --git a/test/old_tests/test_SelectConstant_2.js b/test/old_tests/test_SelectConstant_2.js deleted file mode 100644 index 2656ae9..0000000 --- a/test/old_tests/test_SelectConstant_2.js +++ /dev/null @@ -1,52 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select null from nation where rownum < 3'); - CUBRIDClient.query('select null from nation where rownum < 3', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - assert(Result2Array.TotalRowsCount(result) === 2); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - assert(arr.length === 2); - assert(arr[0].toString() === ''); - assert(arr[1].toString() === ''); - for (var j = 0; j < arr.length; j++) { - Helpers.logInfo('Value returned: [' + arr[j].toString() + ']'); - } - CUBRIDClient.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_SetAutoCommit.js b/test/old_tests/test_SetAutoCommit.js deleted file mode 100644 index c181a8a..0000000 --- a/test/old_tests/test_SetAutoCommit.js +++ /dev/null @@ -1,41 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected...'); - CUBRIDClient.setAutoCommitMode(false, function (err) { - if (err) { - errorHandler(err); - } else { - assert(CUBRIDClient.autoCommitMode === false, 'AutoCommitMode not set correctly!'); - CUBRIDClient.setAutoCommitMode(true, function (err) { - if (err) { - errorHandler(err); - } else { - assert(CUBRIDClient.autoCommitMode === true, 'AutoCommitMode not set correctly!'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } -}); - - diff --git a/test/old_tests/test_SetDbParameter.js b/test/old_tests/test_SetDbParameter.js deleted file mode 100644 index c88ed27..0000000 --- a/test/old_tests/test_SetDbParameter.js +++ /dev/null @@ -1,33 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -function errorHandler(err) { - throw err.message; -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, - CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { - if (err) { - errorHandler(err); - } else { - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } -}); diff --git a/test/old_tests/test_SetDbParameterError.js b/test/old_tests/test_SetDbParameterError.js deleted file mode 100644 index cf8f7bd..0000000 --- a/test/old_tests/test_SetDbParameterError.js +++ /dev/null @@ -1,34 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -function errorHandler(err) { - Helpers.logInfo(err.message); - assert(err.message === '-1011:CAS_ER_PARAM_NAME'); - CUBRIDClient.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } - }); -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - CUBRIDClient.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH, 99, function (err) { - if (err) { - errorHandler(err); - } else { - throw 'We should not get here'; - } - }); - } -}); diff --git a/test/old_tests/test_SetDbParameter_Events.js b/test/old_tests/test_SetDbParameter_Events.js deleted file mode 100644 index b29e6b9..0000000 --- a/test/old_tests/test_SetDbParameter_Events.js +++ /dev/null @@ -1,32 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - CAS = require('../../src/constants/CASConstants'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - CUBRIDClient.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, - CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, - null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_SET_DB_PARAMETER_COMPLETED, function () { - Helpers.logInfo('Set Db parameter completed.'); - CUBRIDClient.close(); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - diff --git a/test/old_tests/test_Setup.js b/test/old_tests/test_Setup.js deleted file mode 100644 index 80c0179..0000000 --- a/test/old_tests/test_Setup.js +++ /dev/null @@ -1,2 +0,0 @@ -var CUBRIDConnection = require('../../src/CUBRIDConnection'); -exports.createDefaultCUBRIDDemodbConnection = new CUBRIDConnection('localhost', 33000, 'public', '', 'demodb'); diff --git a/test/old_tests/test_SocketError.js b/test/old_tests/test_SocketError.js deleted file mode 100644 index a6f3878..0000000 --- a/test/old_tests/test_SocketError.js +++ /dev/null @@ -1,29 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - assert = require('assert'); - -function errorHandler(err) { - Helpers.logInfo(err.message); - assert(err.message === 'This socket is closed.'); - Helpers.logInfo('Test passed.'); -} - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - CUBRIDClient._socket.destroy(); - CUBRIDClient.query('select * from nation', function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('We should not get here!'); - CUBRIDClient.close(null); - } - }); - } -}); diff --git a/test/old_tests/test_Transaction.js b/test/old_tests/test_Transaction.js deleted file mode 100644 index 0c6ca04..0000000 --- a/test/old_tests/test_Transaction.js +++ /dev/null @@ -1,76 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - ActionQueue = require('../../src/utils/ActionQueue'), - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -Helpers.logInfo(module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (cb) { - CUBRIDClient.connect(cb); - }, - - function (cb) { - Helpers.logInfo('Connected...'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_tran', 'create table test_tran(id int)'], cb); - }, - - function (cb) { - CUBRIDClient.beginTransaction(cb); - }, - - function (cb) { - CUBRIDClient.batchExecuteNoQuery('insert into test_tran values(1)', cb); - }, - - function (cb) { - CUBRIDClient.query('select * from test_tran', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.TotalRowsCount(result) === 1); - CUBRIDClient.closeQuery(queryHandle, cb); - }, - - function (queryHandle,cb) { - CUBRIDClient.rollback(cb); - }, - - function (cb) { - CUBRIDClient.query('select * from test_tran', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.TotalRowsCount(result) === 0); - CUBRIDClient.closeQuery(queryHandle, cb); - }, - - function (queryHandle,cb) { - CUBRIDClient.batchExecuteNoQuery('drop table test_tran', cb); - }, - - function (cb) { - CUBRIDClient.commit(cb); - }, - - function (cb) { - CUBRIDClient.query('select count(*) from db_class where class_name = \'test_tran\'', cb); - }, - - function (result, queryHandle, cb) { - assert(Result2Array.RowsArray(result)[0][0] === 0); - CUBRIDClient.close(cb); - } - ], - - function (err) { - if (err === null) { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - } else { - throw err.message; - } - } -); diff --git a/test/old_tests/test_Transaction_Commit_Error.js b/test/old_tests/test_Transaction_Commit_Error.js deleted file mode 100644 index fbd3467..0000000 --- a/test/old_tests/test_Transaction_Commit_Error.js +++ /dev/null @@ -1,66 +0,0 @@ -var CUBRIDConnection = require('../../src/CUBRIDConnection'), - ActionQueue = require('../../src/utils/ActionQueue'), - Result2Array = require('../../src/resultset/Result2Array'), - Helpers = require('../../src/utils/Helpers'), - async = require('async'), - assert = require('assert'), - dbConf = { - host: 'localhost', - port: 33000, - user: 'public', - password: '', - database: 'demodb' - }, - client = new CUBRIDConnection(dbConf.host, dbConf.port, dbConf.user, dbConf.password, dbConf.database); - -var shards = [0, 1]; - -client.connect(function (err) { - if (err) { - Helpers.logError(err); - } - else { - Helpers.logInfo('Connected'); - - client.setAutoCommitMode(true); - client.setEnforceOldQueryProtocol(true); - - // Simulate the execution on two shards - async.eachSeries(shards, selectAll, function (err) { - if (err) { - Helpers.logInfo(err); - } - - client.close(); - }); - } -}); - -client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - -function selectAll(shardId, done) { - var sql = 'SELECT * FROM code'; - - Helpers.logInfo(sql); - - client.addQuery(sql, function (err, result, queryHandle) { - if (err) { - done(err); - } - else { - Helpers.logInfo('Shard(' + shardId + ') holds ' + Result2Array.TotalRowsCount(result) + ' records'); - client.closeQuery(queryHandle, function (err) { - client.commit(function (err) { - if (err) { - Helpers.logError(err); - assert(err.message === 'AutoCommitMode is enabled! - denying commit request.'); - } - done(); - }); - }); - } - }); -}; diff --git a/test/old_tests/test_Transaction_Events.js b/test/old_tests/test_Transaction_Events.js deleted file mode 100644 index 1d0189f..0000000 --- a/test/old_tests/test_Transaction_Events.js +++ /dev/null @@ -1,104 +0,0 @@ -var CUBRIDClient = require('./test_Setup').createDefaultCUBRIDDemodbConnection, - Helpers = require('../../src/utils/Helpers'), - Result2Array = require('../../src/resultset/Result2Array'), - assert = require('assert'); - -global.savedQueryHandle = null; -global.batchExecuteNo = 1; -global.queryNo = 1; - -Helpers.logInfo(module.filename.toString() + ' started...'); - -CUBRIDClient.connect(); - -CUBRIDClient.on(CUBRIDClient.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw 'We should not get here!'; -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Execute: create test table'); - CUBRIDClient.batchExecuteNoQuery(['drop table if exists test_tran', 'create table test_tran(id int)'], null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_BATCH_COMMANDS_COMPLETED, function () { - Helpers.logInfo('Batch executeDone'); - if (global.batchExecuteNo === 1) { - CUBRIDClient.beginTransaction(null); - global.batchExecuteNo++; - } else { - if (global.batchExecuteNo === 2) { - Helpers.logInfo('Querying: select * from test_tran'); - CUBRIDClient.query('select * from test_tran'); - global.batchExecuteNo++; - } - else { - Helpers.logInfo('Commiting transaction.'); - CUBRIDClient.commit(null); - } - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_BEGIN_TRANSACTION, function () { - Helpers.logInfo('Begin transaction.'); - Helpers.logInfo('Execute: insert into test_tran values(1)'); - CUBRIDClient.batchExecuteNoQuery('insert into test_tran values(1)', null); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_ROLLBACK_COMPLETED, function () { - Helpers.logInfo('Transaction rollback completed.'); - Helpers.logInfo('Querying: select * from test_tran'); - CUBRIDClient.query('select * from test_tran'); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_COMMIT_COMPLETED, function () { - Helpers.logInfo('Transaction commit completed.'); - Helpers.logInfo('select count(*) from db_class where class_name = \'test_tran\''); - CUBRIDClient.query('select count(*) from db_class where class_name = \'test_tran\''); -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - global.savedQueryHandle = queryHandle; // Save handle - needed for further fetch operations - if (global.queryNo === 1) { - assert(Result2Array.TotalRowsCount(result) === 1); - CUBRIDClient.closeQuery(global.savedQueryHandle, null); - global.queryNo++; - } else { - if (global.queryNo === 2) { - assert(Result2Array.TotalRowsCount(result) === 0); - CUBRIDClient.closeQuery(global.savedQueryHandle, null); - } else { - assert(Result2Array.RowsArray(result)[0][0] === 0); - CUBRIDClient.closeQuery(global.savedQueryHandle, null); - } - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Query closed.'); - global.savedQueryHandle = null; - if (global.queryNo === 1) { - Helpers.logInfo('Transaction do rollback.'); - CUBRIDClient.rollback(null); - global.queryNo++; - } else { - if (global.queryNo === 2) { - Helpers.logInfo('Execute: drop table test_tran'); - CUBRIDClient.batchExecuteNoQuery('drop table test_tran', null); - global.queryNo++; - } else { - Helpers.logInfo('Closing connection...'); - CUBRIDClient.close(); - } - } -}); - -CUBRIDClient.on(CUBRIDClient.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); -}); - - diff --git a/test/old_tests/test_scratch.js b/test/old_tests/test_scratch.js deleted file mode 100644 index 849fa00..0000000 --- a/test/old_tests/test_scratch.js +++ /dev/null @@ -1,21 +0,0 @@ -var startTime = new Date(); - -function wait(timeout) { - console.log('Iterating...'); - - var currTime = new Date(); - if (currTime - startTime < timeout) { - wait(timeout); - } -} - -function sleep(milliseconds) { - var start = new Date().getTime(); - while ((new Date().getTime() - start) < milliseconds) { - console.log('Iterating...'); - } -} - -sleep(1000); -console.log('After wait...'); - diff --git a/test/old_tests/utils/test_ActionQueue.js b/test/old_tests/utils/test_ActionQueue.js deleted file mode 100644 index 3536631..0000000 --- a/test/old_tests/utils/test_ActionQueue.js +++ /dev/null @@ -1,49 +0,0 @@ -var assert = require('assert'), - ActionQueue = require('../ActionQueue'); - -var count = 0; -var startTime = (new Date()).getTime(); - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -ActionQueue.enqueue( - [ - function (callback) { - callback(null, '1'); - }, - function (data, callback) { - setTimeout(callback(null, data + ',2'), 5000); - }, - function (data, callback) { - setTimeout(callback(null, data + ',3'), 1000); - }, - function (data, callback) { - callback(null, data + ',4'); - } - ], - function (err, results) { - assert.equal(results, '1,2,3,4'); - console.log('Unit test ended OK.'); - } -); - -ActionQueue.while( - function () { - return count < 5; - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - if (err) { - throw err.toString(); - } else { - var endTime = (new Date()).getTime(); - // 5 seconds have passed? - assert(endTime - startTime > 5 * 1000); - console.log('Unit test ended OK.'); - } - } -); - diff --git a/test/old_tests/utils/test_Cache.js b/test/old_tests/utils/test_Cache.js deleted file mode 100644 index 2787cd7..0000000 --- a/test/old_tests/utils/test_Cache.js +++ /dev/null @@ -1,36 +0,0 @@ -var assert = require('assert'), - Cache = require('../Cache'); - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -var cache = new Cache(); - -cache.getSet(1, '1'); -cache.getSet(2, '22'); -cache.getSet(3, '333'); - -assert.equal(cache.contains(1), true); -assert.equal(cache.contains(2), true); -assert.equal(cache.contains(3), true); -assert.equal(cache.get(1), '1'); -assert.equal(cache.get(2), '22'); -assert.equal(cache.get(3), '333'); -assert.equal(cache.contains(9), false); - -cache.clear(); - -assert.equal(cache.contains(1), false); - -var cache2 = new Cache(3); - -cache2.getSet(1, '1'); - -setTimeout(function () { - assert.equal(cache2.contains(1), false); - console.log('Unit test ended OK.'); - }, - 4000 -); - - - diff --git a/test/old_tests/utils/test_Helpers.js b/test/old_tests/utils/test_Helpers.js deleted file mode 100644 index 129786d..0000000 --- a/test/old_tests/utils/test_Helpers.js +++ /dev/null @@ -1,72 +0,0 @@ -var assert = require('assert'), - Helpers = require('../Helpers'); - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -var buffer = new Buffer(5); -buffer.write('12345'); -var value1 = ['6', '7', '8']; -var comb1 = Helpers._combineData(buffer, value1); - -assert.equal(comb1.toString(), '12345678'); - -var value2 = new Buffer('678'); -var comb2 = Helpers._combineData(buffer, value2); - -assert.equal(comb2.toString(), '12345678'); - -var value3 = new Buffer(3); -value3[0] = '6'.charCodeAt(0); -value3[1] = '7'.charCodeAt(0); -value3[2] = '8'.charCodeAt(0); - -var comb3 = Helpers._combineData(buffer, value3); - -assert.equal(comb3.toString(), '12345678'); - -var sql = 'insert into a values(?, ?, ?)'; -var newsql = Helpers._sqlFormat(sql, ['1', 2, null], ['\'', '', '']); - -assert.equal(newsql, "insert into a values('1', 2, NULL)"); - -var unescaped = 'insert into "a values(\b)'; -var escaped = Helpers._escapeString(unescaped); - -assert.equal(escaped, "insert into \"\"a values(\\b)"); - -// Test Input validation functions -assert(Helpers._validateInputBoolean(null) === false); -assert(Helpers._validateInputBoolean(4) === false); -assert(Helpers._validateInputBoolean(3.14) === false); -assert(Helpers._validateInputBoolean('qwerty') === false); -assert(Helpers._validateInputBoolean(true) === true); -assert(Helpers._validateInputBoolean(1) === true); - -assert(Helpers._validateInputPositive(null) === false); -assert(Helpers._validateInputPositive(3.14) === true); -assert(Helpers._validateInputPositive(-1) === false); -assert(Helpers._validateInputPositive(0) === true); -assert(Helpers._validateInputPositive(14) === true); - -assert(Helpers._validateInputTimeout(null) === false); -assert(Helpers._validateInputTimeout(3.14) === false); -assert(Helpers._validateInputTimeout(-1) === false); -assert(Helpers._validateInputTimeout(0) === true); -assert(Helpers._validateInputTimeout(14) === true); - -assert(Helpers._validateInputString(null) === false); -assert(Helpers._validateInputString(3) === false); -assert(Helpers._validateInputString(true) === false); -assert(Helpers._validateInputString('') === false); -assert(Helpers._validateInputString('querty') === true); - -assert(Helpers._validateInputSQLString(null) === false); -assert(Helpers._validateInputSQLString(3) === false); -assert(Helpers._validateInputSQLString(true) === false); -assert(Helpers._validateInputSQLString('') === false); -assert(Helpers._validateInputSQLString('a') === false); -assert(Helpers._validateInputSQLString('qwerty') === true); - -console.log('Unit test ended OK.'); - - diff --git a/test/old_tests/utils/test_Utils.js b/test/old_tests/utils/test_Utils.js deleted file mode 100644 index 62af670..0000000 --- a/test/old_tests/utils/test_Utils.js +++ /dev/null @@ -1,29 +0,0 @@ -var assert = require('assert'), - GetResultsArray = require('./../../resultset/Result2Array').RowsArray, - GetResultsColumnNamesArray = require('./../../resultset/Result2Array').ColumnNamesArray, - GetResultsColumnTypesArray = require('./../../resultset/Result2Array').ColumnTypesArray, - GetResultsCount = require('./../../resultset/Result2Array').TotalRowsCount, - GetResultsObjectsArrays = require('./../../resultset/Result2Array').ObjectsArray; - - -var json_str = '{"ColumnNames":["s_name","f_name"],' + - '"ColumnDataTypes":["char","string"],' + - '"RowsCount":99,' + - '"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"]]}'; - -console.log('Unit test ' + module.filename.toString() + ' started...'); - -assert.equal(GetResultsArray(json_str).toString(), 'X,Mixed,W,Woman,M,Man'); -assert.equal(GetResultsColumnNamesArray(json_str).toString(), 's_name,f_name'); -assert.equal(GetResultsColumnTypesArray(json_str).toString(), 'char,string'); -assert.equal(GetResultsCount(json_str), 99); - -var objectsArray = GetResultsObjectsArrays(json_str); -assert.equal(objectsArray[0].s_name, 'X'); -assert.equal(objectsArray[0].f_name, 'Mixed'); -assert.equal(objectsArray[1].s_name, 'W'); -assert.equal(objectsArray[1].f_name, 'Woman'); -assert.equal(objectsArray[2].s_name, 'M'); -assert.equal(objectsArray[2].f_name, 'Man'); - -console.log('Unit test ended OK.'); diff --git a/test/packets.BatchExecuteNoQueryPacket.js b/test/packets.BatchExecuteNoQueryPacket.js new file mode 100644 index 0000000..cf1f6d1 --- /dev/null +++ b/test/packets.BatchExecuteNoQueryPacket.js @@ -0,0 +1,81 @@ +'use strict'; + +const expect = require('chai').expect; + +const BatchExecuteNoQueryPacket = require('../src/packets/BatchExecuteNoQueryPacket'); +const PacketReader = require('../src/packets/PacketReader'); +const PacketWriter = require('../src/packets/PacketWriter'); +const CAS = require('../src/constants/CASConstants'); +const ConsoleLogger = require('../src/ConsoleLogger'); +const DATA_TYPES = require('../src/constants/DataTypes'); + +describe('BatchExecuteNoQueryPacket', function () { + it('should succeed to verify the return value of write() and parse()', function () { + const packetReader = new PacketReader(); + const autoCommit = 1; + const protocolVersion = 5; + const sqls = ['create table t1(id int)', 'drop table t1']; + const timeout = 0; + const batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket({ + autoCommit, + casInfo: new Buffer([0, 255, 255, 255]), + logger: new ConsoleLogger, + protocolVersion, + sqls, + timeout, + }); + const packetLength = batchExecuteNoQueryPacket.getBufferLength(); + const packetWriter = new PacketWriter(packetLength); + + batchExecuteNoQueryPacket.write(packetWriter); + + const packetWriterBuffer = packetWriter._toBuffer(); + + expect(packetWriterBuffer) + .to.have.length(packetLength); + + // The content length except the header size. + expect(packetWriterBuffer[3]).to.equal(packetLength - DATA_TYPES.DATA_LENGTH_SIZEOF - DATA_TYPES.CAS_INFO_SIZE); + + // CasInfo + expect(packetWriterBuffer[4]).equal(0); + expect(packetWriterBuffer[5]).equal(255); + expect(packetWriterBuffer[6]).equal(255); + expect(packetWriterBuffer[7]).equal(255); + + expect(packetWriterBuffer[8]).equal(CAS.CASFunctionCode.CAS_FC_EXECUTE_BATCH); + expect(packetWriterBuffer[13]).equal(autoCommit ? 1 : 0); + + let queryStartIndex = 18; + + if (protocolVersion > 4) { + expect(packetWriterBuffer[14]).to.equal(timeout); + queryStartIndex += DATA_TYPES.INT_SIZEOF * 2; + } + + let queryEndIndex = queryStartIndex + sqls[0].length; + + expect(packetWriterBuffer.toString('utf8', queryStartIndex, queryEndIndex)).equal(sqls[0]); + + queryStartIndex = + queryEndIndex + + /* null */1 + + /* the integer length representing the length of the first query */4; + queryEndIndex = queryStartIndex + sqls[1].length; + + expect(packetWriterBuffer.toString('utf8', queryStartIndex, queryEndIndex)).equal(sqls[1]); + + packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); + batchExecuteNoQueryPacket.parse(packetReader); + + const casInfo = batchExecuteNoQueryPacket.casInfo; + + // CasInfo + expect(casInfo[0]).to.equal(0); + expect(casInfo[1]).to.equal(255); + expect(casInfo[2]).to.equal(255); + expect(casInfo[3]).to.equal(255); + + expect(batchExecuteNoQueryPacket.responseCode).to.equal(0); + }); +}); diff --git a/test/packets.ClientInfoExchangePacket.js b/test/packets.ClientInfoExchangePacket.js new file mode 100644 index 0000000..4ce0a6a --- /dev/null +++ b/test/packets.ClientInfoExchangePacket.js @@ -0,0 +1,33 @@ +'use strict'; + +const expect = require('chai').expect; + +const PacketReader = require('../src/packets/PacketReader'); +const PacketWriter = require('../src/packets/PacketWriter'); +const ClientInfoExchange = require('../src/packets/ClientInfoExchangePacket'); + +describe('ClientInfoExchangePacket', function () { + it('should succeed to verify the return value of write() and parse()', function () { + const packetReader = new PacketReader(); + const clientInfoExchange = new ClientInfoExchange(); + const packetWriter = new PacketWriter(clientInfoExchange.getBufferLength()); + + clientInfoExchange.write(packetWriter); + + expect(packetWriter + ._toBuffer() + .toString('utf8', 0, 5) + ) + .to.equal('CUBRK'); + + expect(packetWriter._toBuffer()[5]) + .to.equal(3); + + packetReader.write(new Buffer([0, 0, 1, 2])); //=258 + clientInfoExchange.parse(packetReader); + + expect(clientInfoExchange) + .to.have.property('newConnectionPort') + .to.equal(258); + }); +}); diff --git a/test/packets.CloseDatabasePacket.js b/test/packets.CloseDatabasePacket.js new file mode 100644 index 0000000..0b1e818 --- /dev/null +++ b/test/packets.CloseDatabasePacket.js @@ -0,0 +1,45 @@ +'use strict'; + +const expect = require('chai').expect; + +const PacketReader = require('../src/packets/PacketReader'); +const PacketWriter = require('../src/packets/PacketWriter'); +const CloseDatabasePacket = require('../src/packets/CloseDatabasePacket'); +const CAS = require('../src/constants/CASConstants'); + +describe('CloseDatabasePacket', function () { + it('should succeed to verify the return value of write() and parse()', function () { + const packetReader = new PacketReader(); + const closeDatabasePacket = new CloseDatabasePacket({casInfo: new Buffer([0, 255, 255, 255])}); + const packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()); + + closeDatabasePacket.write(packetWriter); + + const packetWriteBuffer = packetWriter._toBuffer(); + + // Total length + expect(packetWriteBuffer[3]).to.equal(1); + // CasInfo + expect(packetWriteBuffer[4]).to.equal(0); + expect(packetWriteBuffer[5]).to.equal(255); + expect(packetWriteBuffer[6]).to.equal(255); + expect(packetWriteBuffer[7]).to.equal(255); + + expect(packetWriteBuffer[8]).to.equal(CAS.CASFunctionCode.CAS_FC_CON_CLOSE); + + packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); + + expect(packetReader._packetLength()).to.equal(12); + + closeDatabasePacket.parse(packetReader); + + const casInfo = closeDatabasePacket.casInfo; + // CasInfo + expect(casInfo[0]).to.equal(0); + expect(casInfo[1]).to.equal(255); + expect(casInfo[2]).to.equal(255); + expect(casInfo[3]).to.equal(255); + + expect(closeDatabasePacket.responseCode).to.equal(0); + }); +}); diff --git a/test/perf/.DS_Store b/test/perf/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { + const memoryUsage = process.memoryUsage(); + const QPS = counter - lastCounter; + + lastCounter = counter; + + fs.write(fd, `${Date.now()},${QPS},${memoryUsage.rss},${memoryUsage.heapTotal},${memoryUsage.heapUsed}\r\n`, function () {}); + }, 1000); + + setTimeout(function () { + stop = true; + }, testTime); + + query(function (err) { + if (err) { + throw err; + } + + clearInterval(timer); + + fs.closeSync(fd); + + client.close(); + }); +}); diff --git a/test/perf/perf-results-by-version.xls b/test/perf/perf-results-by-version.xls new file mode 100644 index 0000000000000000000000000000000000000000..eca96948651e3bbfc085ce5284b6eb089746d34a GIT binary patch literal 2500096 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�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≧xp~jV7ZqsF4dB{jvD7zm-V< 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

    nK33{z8neYhtvIf2HF;RaH;-XNc2 z12M9L#D?a?B-z0&6FYRrk7Fml0tmPM0fPOk!4A$TyjI(>^V~bY`|Y?k&B8iU=wx@D z@bOc>C^&3}joltqRVnGBgUEe7ts4V_+uGR&JqLr0y}FpwSPoYcp0>;jrQts%$Pu9$g(bpU>Otf zcNma=2xexz=;2M>3>t%~^&}q-O+L+RjMuYN%F548H zVLm_-vF?a6^&p!N5}|Df&H`g@h{(_I90Gs}b>MI%;{28r57jZ(nMN>XtAfLQZDxvN zugZj&AOn{_^a00n!41;yDD4$qDu-iWG6!u=roM#~fJ⪼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�S%i=P({f4tIK#mM7_;jW0Tv6xmdb<>V$ZGtALBEc8yUe{&|~@ zZ+N9`N0zl*y4UiL$7};G?&I-I56&5q|Jmg1=v8g?ist6Kw(SJgG+q^D&6&&YJ8sg7xQ>oM2rt6wiE~}uj64ES{0vkc6Rny@if+1$&dy2 zmQGR5T*lI14QTX2L#MADQ?;HuTU$qApk0R!rBGFpnxV7~#K!dZKEYt!IKlU0CxDnqbrm1n2l-E;V8+V6sK`T2c4JgBrU+M33MD2 z!`=v{jwgi47VzQW?FYq+;g%IvdvZ}lXJ-@Pjr@4**I=<<nN1OQW00jEA2pabLEzEQkWnmo*^qi7EgU#1FA!a?ldmy^BRp;= zv7P74MJSQ_rqq67KN;=CKMg?d$Pqri-(O9(m+zd2WqhMQ@F-^leQIlGFXU|dfJ_QUANsB7wO2SmXJS?SaWe}EWER1BpWq_&{$(u zs*}?oYqPSas`y2PgI<9q+}`u`f~i9WS2w5wq~kDfT7kE+&}|Y>L;ZcNd;B0mn|#6Z zuD3q?2vteZtDtO0$Z>r5%#b^zP3oAHvUiO(unrEd?Q_FlLe7| zxcGxo0v8KQTwZ}|Cr@`}f2}f{w$<%MWUqAjQ7*EnTCrv8JX!A9>1Heg@|Mwg!kUZs zw8Wg;V!7puQ2|1(r(6`n;3(Fpxti}<=|lDti{h^gaVB<(Xtag@5BH5}PkXM>HJJ)CHg4KHfI&47h2&iJ1m`4l4O!8}9 zCRdgG626ClQORy}+uLq!*9AGgr#ZMQB=WZ3myuAUTfklZt~*=IQoyu{{{W?EvwpQ* zd)rP;?GT2&A(2IrF!OLKIKJ~%_w4x~p62VcXk3sIT@j(^-$eqDegrzgu#H=mYCU?a z(|3N>9PBmeuC%SUg@8hC3yy!E57~;sFkF9a+6>wdSGoR#Elhf|hUUr4)-#sUNtbpy zAy!PtTXX1dD>-}@vm{>ImWAS&#((2xT3}*Y^suJ*VLgVAx>!@BNrE!Idw z>^SwU`(Dm%fo8|M|M@OPs8vj+30D<`t5lH_wceR(L30(D4-cEPkoQg})q`Q$KXOjMy9~Qefw6Bb62l72HW{`eb?OXnV;Z0lctC5H~hbW zf+G|7Oi7f2!a@&)enl3Mi0GQb3^ROwV!v!9$&gOPQy@fVe>F6}2oP?CvSVo_Ro22yMxYvhVmTbo$1O;wd z;d{5Rh{^X^F^EVA2)U}bohb0|IgTFrzLTXFu!z$l(!81PA6|F*&EA94#!fsxZ1V#W zcJ%c0HiDOcYydW|2g|?|W`gM3*N2xau^u@S2+$2s$oaq|2~)0Y5OO2(IreS-SJj2M zf`bDqDtX(+kkwc0g1QvH%Rc`wv!lr2uf)X!0rb zVE(=oxAy>jf#JZZ5fK6x!u;GE5Ag}R{XNX*f44>lIn)QBaBYqgMo#7k7HiEA0LTQm znfYniCb27BMi{d+c0r zrqu`E(Q*5Na59F5T1q~2&!M#EfMUK|=3a-ruF5it4aVH?^kYm5AvE^UzdOYb5hAIZ zsz*e^Kt)CQ=_l=FAjao4D+jnx{n%`^aiHfrIXr<|R4)T6_WUq*R z0`NIX)Q7I|6R!<@FsvKVmz7;m-)=jxcL9ocw_;cCz9RYJdPyeT9Xr0Jtw zw&SbxsXqtHlbqMH@q1cr+g*DQ0Yg7WzbHf=UZL;f+xRcj(G;zUMcVgdypl{zLf7Wu zB7QGT5|UXcKsXY827G3u9z21$Or}L$ZUo0+YCOJ>nPSDcl380|nOHBtuU_9{*?Ik~ zMXu#6P5cC8Gow$gI%Gk}IqSl3ODYXxQ zkQWv&Qg{)qGKKX{ceK@s;(D#AWY2*~Kuecl44ZOu@IRRq<;>x@#dWz)eV@qPy_sR# z<7M2OkhLT7#)59@_RKc~AC0RK4l7XD2d6OiP3+~0&ud&X2to_}yrDNP#Zu*;P-Olo zh8p2sa1l<2>TfYRv}b`~QbV5%CM}I+=CZE!QF$}K3ROO>~!a*suK-$M&pXg z%6vf&Df}}Oo(`z^ExEUGjK}HGP88*%H3q&2d4%rPZAyca+qFOVlhCZ657FDL?#~yb z>VJ(~&25{rV)r3C6YeD}Hn!P&)zH`4%r8#)brAh~F4`fzWH~w`mXa&0RpQT=Hy!$+ zWCFBQNqiOU*6d<*q63i%^W8i@lnBI82qV zyGuu#(;IJ)tR9#!f4nl20rgw&>Z?aL&uZ2Ec7U)qJjS}V(}*unjW!awf2x*_2utNe zw@AQ*<}^L`(DqWSNmUxU3X1z8sm*=VO>HOx;cW<## zpS?}Z%5W<;>K9ty<)b_I8)^ z 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%0AUnYktgOH&b5r)gYG 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%0DyXA3NiA1(O!Bu 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�eL6$}0-WoZjPMa?lC+~_D`fq9-UTX1} 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

    =n!^Yg1*m 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 z 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%0AILc)>Og=A%Neg&s|(2q@h`65!N)T z1=ysCvRRK7s@^RGLSX~~)lk~4D{kQwG)|$WbHE*o8F+?e1>T}v3F@iMblb31ji{&N z^$*Y3A8>G-5w7Y$6MBu-Y9hj7xf9^2MV?|eI9?-$Kvrev{XM*4K^ zgfc(yH#qsAHRZ0d*||S3d098v$(nFDf6wD;M{M18kZ9j1aS+U+Sq1U_df_ul(vqBb zAU-KP=x5RWj`CvTWmMLU%-M#m#YdWMz;lSzIrMWX>Z_mP3+(c7}@!m6a%@D&BrGuHw9$!a?&V$~p_n~*G_FvY?& zL^t<~sN~-UbWGlxbJ;#^@qC2WmuKN-n7Nc6ecgMJW(Z=l{yqcgb+P;-?dlC{4LNsU zNVA&muIA0B21~5`IS(TIdqwX-J4Ujg3-k9_n?m=uX0Pur?Y?5t$CH-}Ioi{d{UwB$ z+?oU9w{Pj*9}Pi?yyr;7h=+B=B_{Iio_l|e)h*7Y->~W#0~aVi7o*AVnec@ z9DE&p;mYz-QldGqW*cIpcd#;b^?gTTXhd8nin1lu4r7WNFUsNI!}C)hPv>#2!0Aj4(q z>y;76Q_;?T%Jinw`y4OCFQUKb)f^EqG94Eh0X59KheJA4jc7mKul=mJmmGmbeb-qW z!HaL!iO~ILRh~=BntBpvFd|h^FaKHfWUZnJ5`!?28jEyN!eLoC+LMDWB{cFwb@h>& z1e$K6?Mbcrd7E%&>-OjRbH>}Bf;q)!D)go`EmwORY5m9Ip&%OPGEi)%;CcJQErPSz zs;DHM1hKPEXrUAAhAM|*N00V&_C8Swtpbf89w;ZJx;!A?2N38b2$i}_5KG3o>cYaC z`e7_7@>O*B!%=K6`PD(g?O&e{=wc>ojvghs6VvyO4C1NF2Mj_ISg2Z%r+$Y*4Mmkz z%~_KtK*T;$qeb@Y}58!}io23!Y5B5b#Jf*2N~F>1t_b4?Yx*!An$e{f}K z)hH8`U#NehyKKeCkIkmk$-0E2WHh}&E_umL) zPVhj%X{h963AK}b=E<_p7ug2yRJ~`#4A&abC4sG#a1_67%ZkoBI^FJt0uxC6^l8@Y z$?+g!jJfq_j8tXTXi24T8v^(DJ$T7i&&FXbxt2#Txh3A}eXBRz?}uEmRg$gOVGKgA z>|&8fv1EwD#f*5U=ukrZq9-v!Uw*GS>*70`pUUcf|1wD>ZR=LQqu(+Y8p*&n+Vi4j z(+a)8vlQt}GxgB-6l5ocEV+s?_`6Chg}{m})6}{-cDJI$&b*#ad!Z@)8M$-Is#@zr zrgL30+awIq`%qsV9s}y8g$GKN-Oh%Gn8D2O z!Ku*_&7nK#Epha>^ZU>($;url-jqDpVW!@@vvh{`tiv?D;Mh0Y`U}uO$oP@JlqPxF zwi?NIK6#0PLg1pKs_HI->ml$=Bwe%qk`Z_8+*0>|u8R}q zOCD^2>sKc1z1fB&8nVvI5Em*h5zL#Os}o8NzOVLq?Mc^hz9s1uu5`?JBUrF9` z(WtJa;ZKnDl!m$Gt2fI0Msa|(C26SB6ICA!45T_3-2ZV=X!X`*D4FEPreKw8x0;`^ zh4{%)RdvC*Ot3b#<8)f3HIX3gWUi7iEx0kkfksqlz<)SHO-WLeg?`i_Wb@GW(K zf!$^23ZV=|O~>q|oPy>^SJ>j~Y$iw<2O%evxDKeGV-rRvnZ)wwwwf=wB7M^>zFTE1 z&8^k?9#O_=hD)<_1(d4H)Vo7gYrZs=tzQgHsWzUBvh1E2sz3+nK zG!F_^CVueoWJzAKY@%t71AW$(CMj-TnMCh{-e4!;s&_nTR!5OIG;WbPTWq9+=3CKt zTClS|YgkPfC*Iqua`YQqPr0h&=L>1-XWO`S*0#!F(WdD%dkVx%M<@CjHda#?X8wVK zH3J3SvZDoONk5Y+JG-@a;z>;*L2aj(&5d8zfF(e%cHk?!W=|!s#)OFM#=H_NMU2I~ z6X(%&>Ftx^YAFHwx&^Gw59hZgpD2mEK?V_4#e;{ zGGU`df#YHts9czn_G-GM&#@>t8J&uR?f4&^4?mr&#-vrgYszA?|d*n6xz}p`-DN5r;h|pMYFv@b%xznC(v-xCg#yuau6j2`;t9WTQ?2w(oBr+_nKZ5Y>`_gJ?(eb$ zt?C0+80`%W);$OMv36(3hq=5j!jov5_2Q}c{aZh~{mzpw+m8c)*d4a|t26_5{vTQW zz)xnw|48mX*_}g1Z4k%I>mC78YJ^|Q{YHDpgX37n`KCTZ`8B9x8&CAI3 zdX9HTL4et6`c{NnzCbG8Y)#o)aM4~y#qG3yrTwFV@A=-0Ev+uE-}0ICWaV;py}I}I zQ@GlN6)LY^%>8Rqicah5$3tYx*?=&wAG5=H{dQY>ai3^l(-*82n*8dd0hWtzcW*k` z(7&9VgXv^k)|ux|!*_!}Zhb2Wgio>DKaV5rt6#5;f^fV*fX$pgu}2loBnw1tO~Mi- za2X~e71FHvQUo?RIFyh8e zPPZg-05wTt;Q;6!TxG$$t$JhNinFD98%$(I<25JAsLN5G+i7y}4fG~5bHHp>%0F!k zY6yVFd}St`>i7gRwnFsp<`+55gbz?fkOcCGJ|T-tlu3WKa>g$55J0G(b&W@(@0N{_ zD)6}OHkz#}&iS9UYwqv0=l9=DQCw8u8FfK_?6BrRMCUC*3o}K4AsqcebGN+I-#ixj zWiPj^h^a_K5}Wa}@Wo7)X>q$c39~XfK0$f3slE%>`mQ44b_Bq61t$D1N`(tF8JrYo zT5X0qWK=3)Qxe7%XW{kmL}%t_I9em0Hyp$!eQKa#)Rf#tbRIn5$Rzww9lo_p)Hjo6 z^>Td|5qC;lvCw%j2W1&|MAkSTe%zeNcPtd>6F(Vw?W}7mN(*WnMOPK>XM`@|^)&&7 zsn57iR0#43$L%Y(2=@02?3=dKGo!{wDQi(`tzEUzcWO*?9asEITTUx_YmO%$fs+@_ z{5NX&m`c9YA57YEU2;P?>*pKRO4%i@c>MBwyCmvR1&S4FWQ0?20DLXbBPm5qn`jc* zVhdmg#b?3s&@9e7uqM3s$+;u{-&Z4`e*Z+V5N@8GA5V3DSlgXRC1H~3 z`tkw!fZg}`TN~p#A`Xa3u2*^Z6#5=*+3bu7C49*fNI9E~ClBC!etSx!$*!UJ$SBUT z1t-I+>Gq9!8Y@v@dRs*y7X8@%R%#n5^DTMGs~;_Tnyu|_qmQEukKQwcH&MqR3djD{ zb!Daozxg#;C>#7++`=-)lfKkCVeLmCEGq0X6jyZx1W;p&V%q@v=yH(wNfJfx_9O*t zcP}xCMtERS}XXClObuFVWaQY-Q*B3tcG9r2E7+P_D!ZBPR`(=au z9i-Ry(ANjA`ru2M?$tPVXo^ap$fi~UvIiPj3HA-`T|p1?qO6T4yWZ^i&RFj$MB7SP z1tpihq8731V`}yM8n~gdXQ7hDWAM;_Tg}L8`zVCJr?uJn48=n5!1uf&?({ljO+0qG z>g054m_5_u{(_vS-*Lyt-r}%Xi9wV`om@{<$s3yGwJiP*-{S=aQk6Xq6heEGB}EU| z=RQ8R&^-l*i&~dxds5|a{KUQh@cl{DyrdaSZYqv0rLl-5RW5MEAAQk@?jl@sP#9&Q zL7Gq>UPLzSDEq|vb-ztxXR|wEeFYFvIj|Vg1EdPE|E~tH{OiLYZ$b^{ucx)o77?hB zX8*Mb{;#KkP$RDwTL4oNkH;eN94MRg0zZiRbXrQm;l5?mLSUo(J~gE&)FvX7jPmA( z2o~n|@=M&-?|6{1fPe%k zzy?60T#;`GcP#pBKUiQ13?J>)HaX$ys2_DM9{{a$f9d#mi}Fw6@hknf{2F?i1o?>gX_5_+J(x~2EW+)3 z)hYHgK!d#G!J8XSF6Y)hoNXvW#@zXRZ}Cs)09^|Ye*JBoRT1Yvhy2Ip9bFR*#*ThV z;D@h8l~n*@(o=ye4INuUN?gsCf`-OT5u3Hgv?l{<{wKqLc5wUoDZ?+%Wr&n zurb?wdO7sU`Yo#b13o){z&j!IW0x^t04B1(jD6X8=N`uGH;m;Ly{Qvbmi?*x;f7BW zS})dG{RYDgpP+}Huz%4>b&c2`eo#f}Q1_h{y+aG|RromUz-cFGt;cD6gNo=){3JjmWqcSj}~zmxxS`cuqeR3U1G@R_2bC%C^NG`1lQwJl5DvJmL~!1qKfR z+dHRQdx5{$Ag)aEPAchnoa8Z4<-OO(!L(-qhE0q7W#47sz+ks2U>|HbqeQow_AaMv z`2lQE4q%3sFyjWyA%6D*?M1YOxth>-ER8C=?a?y7gpX{^(V`&Ta~C2TXBXopS4}iM z>FHj!+E@K0S?Yrl4d2~-nF&T@jM70|@@S3xeIa`iQyn2BF zSNz3dL|@ILYFp1Y{0}VsW!<#~cfCHb8}3v@`9|DCuVh_>G0PkqfHBTU{dY)P54~Fp zBLIsDeb?8pgj*{bgdg}sRkj?ymIq$=t|%EPO5PaQ=ZCvflaYM`OH1~??;A&UMaBa+ zwsip9n6@N6`1fa1gcGRUI8&-{ANwj6j0G4^0ZZY%t~c`H->zD|zNfR_zXI-w?wysQ zp&=olBEUCMQRIz$^Ji%Ns-|qXasVeglZtA$I}0=OvfAuLlAF5M93@iza3u#XZdpK} zDK)7fV(jGNv=x1-WVlOM3K(ro3IgNd%sO~;L63Ho9q7(3MagRDeYH!2i=mI}mFC^r zrTPlvB`x3a96e4}3eg9S=mReFE|+!Y*y@dDO?J!?TLyp?7JVkS|GN7@(&KS9IV>WD z=P$hT@Aa@Ty;wWW3wOk)%1^is+Uj_h+T`dZD2bnOX0wsg>0L_ReDe0>9s1CKzrn;8 z88iVjSqK42S-K4Yo>e};Va>+YcNvsn<8oja-aQGje3sx z6h?+~88e@X1Oo0TtAIeE;B?GqO%Hhjj9N4F^0xX_fdBcGLN)uHBI1W=lJ>Md-VI<_ z)hmhv+()a-m@cAYsI~FoT%*ay$sk)nNQnO5y(yJ_3*ePga6RYC_&_|$OXi-h%rh4j z_HfAa;b*eo^e|FN8%BSgxyI9vjM)F@s45DO(shRIjum{mS$;En-a1zzOwTbejfH>Y zl2`ff3t%P*CBRZ`;zZ(%Y~x(V9_j2a>K7L`xGF}EB)tt~h{ux=sr5P_ZJ_(;uJKTS zRFC(e^_LlAx3}ca%D3tihs->DPRjp6>_4SCk4skz#dfyAqQy-Ul9*J@cVnv-?A)xM zglfI;NfclAIB_!Tk~=>XhzpMBqLpIg^hbVa5}M3Ry%k0N{LktC=QfK%ejmFPAZKaQ zPw;$!BpV|SBbzHvI*6>bJ*r>)AI~F&OW_|wbGJ;s2Hk>@eplCo{zFB3`-!mw8fjqv-w+6_6L-b+DXb4n^^i!1^p+9q?mE;QNOH&O$N-GxxGHI$_rL3D<1fgh`SGx0)xmDT~u=} z@PF8rOXd|&U?wYnRi@>F%FuPF`I_*UR^dNBP9uqzkrtss5Ev+hhw~ha2+0VFmXacD zd&Smq^*2^=NeAp|IvX*r?9*Q%DSmc+I@~uZeN82RK)K`;?#^{j3y@Bp!1= z77MUA1#De=)49Lq)}EZ|oh{R5>-fU2uw{$VLfz{Q{wbF@)d1xZvCCfceXmOg9|t?os65FJk>3Rfr6Ms4Hze@N4QbgEC z@oWkoF0f)bz7y~curGfLAe;FO_Aw@tvGsJh#H24)|zu!R#9QZ->E z-BnQTiVaR|nKxxxe5-p53L_O2HCUAoa{k}_56n+^dx?kBizBjlP(3eTwLz>YDwfGY zkzudQ;LO^iPb%2lj|YRyUYEeCNL*D!mF}kM0vd<^bMv;?UlU;IaU*7FXqdWyYAQ}V zzLwr%evz!$-lyWsOy}dCX>FTNpwm+F*Yba+=l*>X#=v>uQ96nKSH`hHcmf}z}KO!1oDw|Qd)2UC%{^@3iePHy!}%cp-uUf^-6 zYWAo@ErP0q-Ld|uH&6*`c@7W(z#LIT{$iCYb}{*~4hVwlE7FXjOm!p;D|zL?JC45% zvt$PTZJ32;jKaTB|BoKj#1PPfdfxtI$tNO0;dl#BMFm#k06UeDUpjPqd%L{2>vgwb z;yhjlg6Uyhb4?D)<@qmebhT+sk|#9^lw|3@%xjRDojCjdb(A&p2nZ~qCsnjzmE8RN zY>@craQUg1I->|}&{o6#!!;3sI2z?z{aBXRY>mhr$Ln91#@c#H3_MX|>d%~Ns6nt2 zb@8P-rb7HfAj*+o?!y%zJ6^K)BO5ILnt3g8y7?igYSaOnM-pQ^ibv+KY30R63giGg%uR!VCVBSCU@2uN8s! z-*t@<=mn^c;X3|w6#w@}Ch@SQ4aM)uO0I^WYQRXV$P6&8`p;`CGJVs8<+spZOLjwo zO38EulMNT`(?MjO^kF4w!k?d?Jp7-N6gaK|4H=&Hq{DJ$8&qe_`7{<2t~5);#K%zk z1pV|8_>+PDmb{Y^y{RDj@?8|fY&~<-r#EFU?m*Q zTnkm1_oPyQnK{X4bW zmqgFM7k~t$%}QB2LDwkl-ry-ZtyzmZho`X1<_72{-H9HKT2PUxT-s@l+NEG?atHOy z*Gn6d_FcjMXDwv2;{dx|C6xkiDCTBOo9@Th>4u>}lAY^SiPwokQ}0qnP|CIO-+?8t z<1D2Xny0{qlFHyJ_a%pN7WLEiTq;nfmggzbL9(%fxx4vv90pKx+v=Bj_*ed_HUp&0 zFU|UhOiRk>xfFUGJM6DPN)Y$7tgcg$KQo_RBT+LC%gd3+EFse^9BkE)0?g(?Ab@Ir zmIy0~V7Lm5d8ouGEq!G2y5M!YfQ3iuJnrO^5Lk-t68K!RbJbvhZJCjo6h3ITk_}83 z``hPd4g@^voN$VvEQmEwLSV5NPJ>JCfr!&5O%US{flS)>NBVsgw=os!p5Fqpofj$} z79G{Y3^m1NMRbPKXuR!LlliNdC8~OtWv}D#{(FT>0-`HKpQU0i!07JgQRZhDuj{IT zFI?2bckpK1NSiC_d1|l#W*mzEi4|CWk?WqMwRv$s#!zR8bHBGBtSB49Hu_^_2-{Mi z_!mVP7|cqued4;B0E-1@>S`a!t$&$EN;wh&t8PO@`7;Gp>Z7*S#Tp0QBAJ>+MwZvB zt@5K_!N);kknV}I&-@?Ob9857?%9I=wbEj-^I5f&F%n1cUf^PCV?s%j3QYK9z#-HT z8kC61Vz=}0PLiQSXka*DF_mE<8OgO9e*bLHY<#StcpGYZ*;~LmD-9Qhh?K3!;Z zS}VvcC57}=mKwSt(yE*dzFbd>GvV(Dix^&*o}?BgdgA)eN40zhK=I;3gYs1hSo%Y% zQ=Oj?VV$a!LYsDhvUMZMLMp!~-1ItGK z@_>XJR}AIVj^LueD{A~x*8F4BfPh(RzP4zpVB;l}4{ZB|giKr!ZmBJEI0zLC9>-U>RuK zZtYA>c-iRp-*@?Lphi4QuJ2kxj^*N0?%ketnDCcmoT<-3rXZv1I`d;(h4AZC%1^~R zKI&&{^!jkWDD3c6-*^OFWW<30L*fs1cG}a)!eNH84>_~UtF`XlSYc61KTfbACvX2F z%XGOB`0dcHeH=>2Kkf?4?;WXRs{fWa4V|=f{9NipYal#X=Y{|FHr2ldh2gd}r7S z?U;a*N?E6)A8&u@qe=tY$FPB0LOkVUX0N}3NTLdJx=ilBA_I!aVpme_=L%uDKh>8L z^#4^~QrWi*rt<3y&N@lszptQpGIrA~E~PFZq&UgE;6jMO`XhnNv%ibhjQRP5x-pHC&|*)F2gN8>roS3%G40zfgh~aJMw}Ag zR@lZt*xgxf;j`gqvHVo6JLAyBb*=_g*OeiNaK?ODi^q=1!V|-!&t(X9;?b-ECeaGR ziO&?W983wS8r}RXnLpjW8O3dFco-zpM?MP2fSQ=+p9|Jwdut!0-WLy;BlaKUo^24@V(Ry5{nlIQ1$& zLO}2?-YN~(l@zgs7{z|mL|rKCt#(dPv+YGn{@dPnd|EFfez-y%qR=Bknh9+DGv>9K zZ$(z0WBoopkFl}L+3LCcOoKw!-cm71S^v~b@vn&9VNa~0*YF?=S znreZ8rHm;?3d>Y@WA^Em_qE}h#wW%?P#Ln{=bjW7(VLW~OcK_Lh@?Pz_sizWbiMOj z8iT3dXExZtT$i~iiiB3p_rbz-;fdU?t@dGu|JX+h`7ZRX)_kq0bghOZaFCG{4-^Z3 z&lCB1#z~D6eJkt!CUCpw-iF9%sbwgZccc^^K=gX=dgNxDU3|sy`-sAj zaj2pJ;~}R;ds-v?OJaY|zT*4*XewnNj{=ulhE!{Wxt01|y!M>xhNY~hGcsR3uB~G8 zu7U752~t0g2>3XmvOBazqJV`YdVe`}H2DLGz;E<1kcLIi&lYdvh)-Z94!nK>Tc_n{ zqQz2ukC#5wZQ;IPEgjp#UX2V=GRse;Km7OMLJ$9%9W_g3Cy%y5W>cy_OERdJ8Nm-2 zYaXTFm7(-w3{2K)@q8m=vnZyL?O=%`Rp6E=3BHtW|Gdfxw^_9aSz=C}G&-{BM3hjj zC-+PVK_BiuA=DLgjs~B^^j^zZ;4bg@rdEz`yrfV+=xV)E=EZ0*qln1w(o%Y(RbNx| zwaEi9I88z76O!Ra@BEYt8jbSRkAoqQYwu=5|x5g_G$`~M$vdf)#K=6rE;l3!9^zJ3gMEXIE0n${o{ zal09Uo2Yv0-5k8@LH^C&X$OGwO;TEf>z-V%`R|g4SKxn=%evkIUgh+TCyy!J{#0bfK`lEMLfKm?_cd0d^2jd_QK$xhH zzgAq5IaWr+*%--p+N!dJ-$UepPI~eN;YuV&@yAZ#ghhuOp8}FplT*3!a1V}Z+ zx^~b7DVJf1oyq1v-pY#=Wb3#3`tF?ITgJ}`+YD?Tvi$}@*}*`d=hw1+w$vi#6?ML( z1G{ijsT5AIDfb$X!u^u>D8W3x|4j0JoyaGqi(n2}=Cu>^dqRjz^yfg0-Y?PdHmU^2 z#au=$KHuNJrh%}fJ#~gnYRoUgfT6r-i>_FnQqf}Ww>OOd=Ugd zinIiV+~3vCK(@=g{G*_y(fJz8sNJULXaI2DJI0ZME}8*;M?`e6@f4|84f9A5F){t6 zh}(aPd@hL?zO@<{F<$(~octNRc<{^6DMff?9B!`B9Y^u{W!W9N6h#VR9>n+w_3^Jm zEuRpGd!L!)fv~y`Nrpn-|9t;^n3Iue27+@69EIBD`=r6WiUH`Y{64~Pp;~Lp}WQL58L^ju+<>Fpk^V(&E zY{Dg@R8~lth0yPP8{g08d%oxQ&ppm5*Zbc0>-~B?pO5Eb42-5bKvAoQgQThd^S>Sf zo9aXG_KBEg6vu=gQKKvF*52z!Zk$Z*<79l$_8P;#gGAL!M0RDcDZodA!vzRSh0%2- z>Bza(Sig`jkG+K+{)uAvL~Ee>khJ$p1raj7S8OpKky}`SkT)oSD%M@ngqD~zo9J^mnl)nD;gaNIlKUSbhS)-^t0|c(=7DMfAyTxJv zfAXt3piBH7e?Pem3sA^ag&o#pB)QQcSl2C|T8wXYS40t?`(!o969XZ$s-9#c1??}C z>wf!ZpEvD2*hw$HMu97L4-ul{x+`?5c)mZqjWW1hkADaOPhady1CSI4mL9TMb|**J ziJG2XO_jTgAFN#tDSP4n$!FDVxC*=(%-;_*W=!ntA~$@3e_4!wO!;_knAUIdWB%sS z>f(sJ1=F0Hc|&bm{4TqF`ViIkKTr4}{|6{KamGVBRBO%o1u~FhujJ06Y;zmgR$olR~qF@|e)fd_uAP$wL z`dz{R`T_>zkZuIld2^+7NC<0(4x_!BpkAr3*JraOP7nzu>vb7m$^%DNy_XXeUM+Wn z|8{PZ^aZ??>zY2-1K}va9~cV>qzC4E;O;Y)8V`nX=4v-hE*e%-vhrM{?vpxxYFHTg zx=k!OcA)J%fNBOuaNm-fzyGRai(lG18_s$KJV zI^o~m>8b|D?B?B^|P}<4W;{xhucBRb?1BXz1;dQEg3Ma0fMi8AjMg zN+@pjuCCY_A`@*XJbg8ww!w}_dxeuWS|E?gT^t#YoX&t0gVBNysI8GHJk?g)L%vzR zvfJ2LzGN0;7m1pzW3KCaq3Uvuown{w{~1OJ#Npj-vAm4A-mMICXkT;PO0i%5bAEFC z?B)fcNOkuB*Rl`9Qxf(QTnVntr7s^Xh;h>jUOuag;V#gU@*UVTRY+d%aZ(feuA`OJ zJnh>j{+kJAxXJpxY$Lcb_H=vg2ggO-!!pq`EH&WE%Nuu(&3@~VEn95Gp8#J#(950T zZh-Zf@QTY?~8SWnvGz5N|5>?ltf^o)edjQpFd^ zeAm-r@MX%~Mw5*f|5EIZJGo{_A6_f3xqyI z8GH#+Kg=(c$3=NwQd*&*V*|FaQp}ntIedp!0L_`qF1LEkW2_B&(`?wy##44O0z88H zh}g8G;FDaMzH0L)&)Wz;#l0ooLq>X4z3Vw;bi?)3%K|Ddif>^PW4JDB19~ULM26MH zZ?6wALhFM1p4y(qbv`FU7Ij|S3ey2!rnhMYHkp!ppN;G_=2d&Gz_4@qQmcj4lh9KQC;sCT>uB=Cu71PrVa))jMXGXa8P$r6Kl}r_Osr z<+5L1^{-z;O~20N-h4%8V%jcr3+N-V?N4;)R{Sv~q+IoDd3X!w-}R9WFFp|hDMPT% zVdVVR@UT{c^ZS1{=n95FBE-}GXaW(_|D6aSFQpytIhHS{nzFPbPwBO+Tn<3I_d9&aJd5>>8lU*ThVvQzs40Oyy+s8i zKM){u8y3t^YyN4S@)>SykC8%}?lv97Enfz=PwhZQR66FsInDgw?~0ok2D` z;8+zwVL1poqkJP$)Jg}peA{5ZZRDz@=tFS%6X7jmX{ZRW#O#8BaiRZ}$PcmtyiakR z?*M1(zt#XcgaBZ%@*=|A){V>PY|wibVzG3ssA)LP1OB3k*q*pJhLxT2zbvPI-$LLR z72>loMf>(Zrt;@m-evQ)52=swzLfB6-C0Fh_+%9W96;I&fU<2lIk!sH%czDE`nM$k zzV`~13qJ$U7-VZ9Z+kx4y@&^EU}n&-BR{WWvo8u+MK@V050Z5vAe^(EjF)Yl2+hv& zm|0DG-*?JgcotGXMr6usyz`>zr1?|9Gb!n;5*_X6S^(S5uyJaZ8>|?81vx97FXzji ziWu8Oy_uPL=`8190Ay;(C*V&(2+Hk^1#i*a7Wj>OSRkHwA^z&%jF6ZHIT9XQXEx4M z4E6i28~g(Ti@fArHP8J6GCBvTD8xs8G{)&5#`kdCK{XuP*9QW09Nq^DtXbdgz9P~Y zIikT!cfhPdr{hS!bZPfOmaRF5A-y$QQOxxAz&)z(Njmye9UndlhLusz+9@-vP49OCbjDjR#-FtX70LaWie)mf`u~SD)$plnAR@%uTcwe@C3a zb);rgXy%sW{xry{HJ^z4(FIa~4F+|BI!^)0lyXV2p$lBy!D{e zuR+w506q>^nD>CLu4)T8xoDIv+pV&Y9bcS@%2Ik3^@gLu#Sn`_8KKJC|>AT zKCoLAb9q0qpZ!B&GU4p~NRvJlY9*4W@@K%|X zf?4lcdes)$5DADRJa{4wD#=cz%iDx?(Eb0LXWba<;S(OL%|O$XqaZAp4{PvOEOh zu~W8B58|Wp*ya}dmC7}>8oeTUq1lkZat09^ zraQh>CYi;RB}0T-QTZ$|bQoA%ZP|dzRCMe2%6bxUc_-rHUNQPZ#ewu?=F(ri4DGD|42fqbqZ9uzp5rou6{WERuzqqwFGPPI=`BWWA)Jt)pK(V^tk}(i>bzs5-N} ze8ltJj~Z~N0j|$-hPkL+X-CVx7+F<+PVzA%_hpvisFyFpzKJLPrx>~9{Li2O zh&ic!TJ3zf=8p8qVQGZzJqIhtvbpgbDQ5uqWh@Ht34ZRlx_e=1I8(&DBdAU?jlJp= z{*%ZQpOe@NXIs8KlUN7z6;FkjN;3%~uRD z68Y}}p_qrz?Yx@j*J^9ErhR+nqwKr&tB&wGXFx<8U=K#oVB67q9_6_DPtp_DNdZGf z&ySd)VQf42-YoB^>iI^Ey9s3zEZzD8R$!h*%Dtqk{o9ayHP?d6-HW~w$s_V+V;Jx& zp#KSQ^q9%OeyC;}NlK5a5CQ@+xYN^eP!5HW(ZY8`DI2&gl|ILJUcP(!uJM<-zOoX~ z;6GG#CX@cuFuRX57kcqw)(2I6zqb`=h%N6`0=AqTNIIKqj;J$jr?QjPTbRD^6)0LH z>l^Xehp#tTnPF6Jjb4=z*B&LQui`pcX)G}3+d<;ImyF(j!>$I4k!d)3MOUT?q>W+D zaYj2pJyRX-xQKUR`CYE{(&FnoRa9H)jbQ`*VxddIckivGhTDmEmjP%kFeL~9qve!< z2|?)bUJM1}+K-Dg9L1MO!=q<(P<&PmxxoeZ*5aA0{&dD1DJM!>Q1oPKevb5ENxihQ zT5GR-AKJ|oQd8(V{snVq!cOnu!&ra~HTJPC*#SwR< zsTHhI{nFjk^t3>pr5*j9KT#JzVpLQoX)ItbO*(Cj=LooS=H@~S())$Mf$oQEvm;<8 z#wZ$twnE_DXYWhU5dndAz-%fw106UE;k{%fKY_dk%0Zu(GGZu(_1_I+6@8&50D!0X z>@NtbN(X!spTf~h;(tGk5$HneefWs7Gv>vNUg}`36u9gpvD#>5+oH1U@%KO2Vo02- z7?P#KlhT`FQCBflnDl_*f2zu_)k$}n{=OF;m5_{V+=5nL+eed*j;1*5%$Id{!)I_k zaDu`Y5xQ%{Kdf#6HgtZ0Jm1gp+>I?gjuxS~sPWbx-iI3xOc?KA&XL)51T7~?>QC`+ z3Rw07#eE=hK8ynx@|of9)pe#S=ndtqPx;{$z*t4<#H`6d`^F-YkDC=btj2LfMUKpk z7DN9*r4Hor!!r!7^MwK9F@V(_C|+n|b`4|tZ9vEDnZpAUE?jG@j@!F`=OgugED_D$ z4>A!AU|kPtr&4{TNPF|e(i6X@w4$0V$%fmUG^$IPr)eEukpZIJ(9nq@qY;BvOzIc; z&{}(=S0tBv{-FM!>45gZYBE*p`7mkk0MuX(8!b@OP0~yNlR<01jD5SE!Di4+m zM~gu5QNf@vF|WzIfA&$Uk#~a#Cr)(pavGgRVU5j}XKa86+0JymrpwyryY?Qe>!}LF z$9IAZ^(#ZZW-b51R=z2s`-{gGpW~BSmhL>MZ6+;^*ZW0oEvKE9Xz!*t2N$emaJ>eX z95O_PLgR#17?4PlVamaSs@_5@2B$2j==jB3ps-N*(jSMb-n#a(g{&l1X#1Xx< zGdSTNjb3^4G4ZFWi%}=X-xeg1AVcUe5$W_3)lKta8D=g<*`el7vvh_VkCZCUS3*>T z#&3jFlCX9RNeJ@bkqDfNxZ)^>OA#mQAKxw6&e-f}up@eXC(ae~MrQsEYmx3+{H}f% z-CuY)8z6~JhUws@cveG9GlvxlqVN!#;swwkr0M1~Mm_yORjw0i@n!S-*2*LQ*_^I+`=lEjw}kurtnRR?Fjy^KD3m%$G#YV zN@)U2t%vwN$cG9kR}C3lIsc3K72hERtj8U5gx+M^;mF72sfJmymp;M8r2L|0s}{If zA4@;Td>C-ad$QhIbA4|L@$}^M=WcHT5&#^kudXUKZl|0j)u0(}5X>-qW}shqZ`{mJ zT)AMk5WitEUPpVEHS>QSJS3eK1f8SqGm1qs!!uEndakqCZ8;a!HE03Ecea2>@qTv7 zF`75kBuA*`#Lub&t{zg=euN7AY|LB6Q+YE+@nfH}ZBvhH+t3;9>9$T0T}@|oHfgj~ zy0de!AWO?--4uy`6u)A7V9;~9QRuuY9 z_2(8dt3uYSMn~;e-*NVU;W^T-gye$Dy;Nr2OzbZ17 z?LX)2wo8H)ZU82;lv;obpqmB& zl3UaQWE?-f4eS2(+5X95la|YR%K%cb_C@mla|We_IU&*SAVQ=|j^nGo)N*T8rq-lUoXS*<#QV4&1}i9jE*nHI=UW9(j<_}D+xfBy$k65 z-eyY6d|&|FLV?T3D}(CC3BW1>`f-px$8W}HwMz?XGcIj$z&7CbeSQ;H=@%kU3g9oC zOdm@nk>~;hQ1)7VM=yqc+|b{i?o2Qrg$v@y_dp1A4sX(CiPdHAGW}{2VmVT23X-( zk3MZRlnLea(MZ*301#3W%<}L<1H{F`{qW;VcjXC?A+ikz@);V#9?Q0V^Viz~Uv(AT zD{=~A9h|*^QS=Mj6qVy=Zp>ohCGu;sjIIi~9h?#+bCZ9=blJ&5XZ&?JstqTvz4ggb zzx;s%nyJDs`Wgdq;zQ}t;jFo`9mY<%1~S8( z5J)WHmp{+7+pXf#!SoM{9-$|`*F=%RW&|$n&gK+WRCVubzjpG%D%|(QQ3i-am5zZ7 z-Jw|zt5>|Z;?QA41}?nKVSe_`{5Qfvn^KO(uVoDW^n>PcFk-fJr;c^#@Q}O`NF1M; zEkH>B4oTb#{JFL?0;}@*-8=dw9QPf6aiPdbS5mVu3wL&@DuhVc^oht)n3kOOK{~Kh^Hd=r=Q~*`2!bq8el(h;443T6vG-%@{0&R z!rO=PS4c5B&ptF%pRZN{=eDIZmnlU<&aYe?B?UK&Xo z%kO!vL6$`CxBSwiFh5(3LiXy-Q?>ZFs$J^9dZa+c?@mqO7hj-?Fz)Gi+s$(JYT$ss zaw=+3U&{CuoUTe#b_rjTtr?@WoskkcAm97Q?DU|lrkrp$%rG4)@Dx0XgpCMFx;JWn z4B%NhI?(5>ag{PXO+86h;MKln(N}_!QId0lpbN<+Kb%%)+JFjxx@>|(bn!qMs1rm? zetkbUQr!dgR5`Lb%5p(D>5GEtBXBX($vBT&neA6m{4%^vz`9eMdYKTa@46Co z{gF2!CY+-_p5no#KtN(7RHf`iKvz($!_OSx!O-M&D;aj8}3owI{L*=1^_*&IB7vWxpmwLmNf0 zZ{Cy&&G`p34>|XE0GgNTV#_vZWWG9vTf*5(TG@P5^5wJB3tUd;GJawju#ug^YC#JD z+_MwHaF*M^-FGj7AT9FHSo}1A~x>^L^nzs=9pmsAghq!g{ z`smx!>g=B9vHgxn0f1X=6|s=>BQfP3ryR{@@g8j?V5r{IN&D z`@Xxc=NR#JUY6Zq@-v3m?yM*B1>Ta?m z#*Ed^yI22wpg%>&@}4IRU}L4LLZo41FP|DtwN1#Q4v(7B7Be04gTc~%eQ9)&7PJ*K zkv$j)tbPjGWTH0wo$k?h=P)KtI^bI(2(uczGeXm7@>5F%(>CM&@$^}<YES6EKdi5IxyM5k*x7Ls-*ZSQ;b*Pg4^7^~VKltZ#9I7NE-%kB7kVAlEvK z;N7#ip)J#NmQB*z(&U61mv=;dB$|^|^#}|Z8V3gqCA&W@I0^#Bq>V7V1?IT2`t@r- zt;AyqjAyRk$1|WNi7|VRPq8HbfzF4xQ+y6

    NOym$De;fuybvqc8I0ZGI8|=7ma)*s-qL07*_c`S=uVAM3-Jyc zVdfC_%Ejonw*NTJ^t1yNP(evv6Rc=xu>AC*#$bLP$lDd7*5g7*=#E}zeq6)x9??j9s?n`%F1^JySLh{ zG;RJx&Q|`f$k_p4EVTO{B&N?6Kw@U12QIn&@iTE3ANzy7uo^n=e(GaQF8M+*lt(2t z?l-5Wb7;8U0)&M87#Mici5R)ls2H2ndM9SMa2QGQYjstJf2Gx7w#_o1we2y4^Oc@_ z9XZ<;_`76(T>NbcZW^3TergzF99-&Y74nkclxeH8AHCj^3%v7NoxJ8Jn%HSgTVSGR zBobLyC-Lh?l@*HN8c|0iFjvRdS1kYE`bq|gjvM?i<0$q3=Jj&thm(P*F$oe)Cvw{d zNga-YBIQTPWSBG)elcC!myH>KOWtBUro=?Wwc*Z2qhBXRMzqI{Tn)2&^n~swUeK_=NtFo%Xqn(sNor;sMi=qKjd+QLd^c?!P(=_@ zSsLVQlo8_Kd@tz@I*^Nh_0)IP|5>BJur5m1N*Ee#Cn5>0*4Xl|MEE&Wz^zQnx&gP` zSJy@RTW~)pP1D{(&z-dPOrx2+>I3$h^EQTNd{uT>LZ5LE0b`~DJeT5UlFq|FgMZ-R zNXa26@Z9HKlZUwrWAt0+JlDF)iVnWz2nM*e-hvCx#BJHV0pH-N=DSplaFg8IDK#!B zWFw?Mc(TY*ThV>jqX;jy12AkLWwf~DUo_|nZ}C|5e!f{=o^Qi}=#I4l!V|(1si{+} z81}*KSyb8nBdf}`4mDX7Y(OVA{z^A+r=&9g^h8~O+V(H;u}hgSc+KhTdaw-Ej+Kko zNLwm)hVQ2NVK3<)g5771$U-CZ+NhO+)^+_qzjJW&!Z?px;W19K0$QYJ>( z6mOkOhf(F>2YsZ$p)1o*v)&{Jhqgu4aG=O@2h@r2EbAfs#Exfsx}lWx^jzQ5TuqDD zk-YhDAICvfv8Bsh1EHE9CWFoPRbG7vpUsWPOp6g#LCTu5eK}y_pNvTJi`be(RFVm% zTbAgc*{-6xR>>V&886E+5>-;3y6UK)RAi0bF+JWbf!hb({U9$EF|~W0W3?JIkivpr zsHJqZOUTC#w(ViGKLMw`7wuopl+DY~1S3pfbsg*tA^jti%7rgy7Qd8lJ>r-UBj7$79Yf3Q)8siHU*W)_6)!%o~YJ?c@Y(bI|7)Df) z#bBzt+X%_0yu_C=7+3K0Iw|9OfS0Wj>K!`ixmHeQ-HWZiP@eZgd zt6q6W+3-;?7rn=iIrV?}F#sDkl9<+}z&utJr=!s-HZ8y5#=tka-;!VjaoEfU7iJB+ z*bl|kVy&{+v%(VC8)VaS4X6a8U${Tx7BryJ=y01n(WT}$6w^Z_p1pqRWP`o$h)zw7 z=zsNwn%DH@d?dpu?T3qMxsDWuX&Dk)~xPDy!(tY6u6<+Jt{fAaVKt#@A^jL3n zIo&V@cl<2CS9`7ka^0LRf8B@KeO2P#sMfS#OT1;_UfbGGRk-DDP#W&D>w347Rwy0w zUAC#lm7@4Yk6$JiZYac1PKRd5;l`bJVni-zvDB>Cm60HY;=4@+Dd2UYHrk zb6`_T(R>FM5XVx6ZKFTEsW{D)6sUa@WO^xyUAd1&=k?KBvx=i_2vyYgO&6+u)ZS=% zfP*4j{5UV^*G4Z(Ntz!x^dzp&B3IPu2-Lg3(W@@4T=+qYlttPaH96{g6fU=ik?U^U zzXqMNM0l?91H*&grJx$2?}Jjx9`Nz{7Sz!X7zuXU=v@@N7*%dGbW>d&2aPi<-*HfQ z>ksm1z;fZDhNC0cVET1sLx^V~JQkk{;X1}wzqazk%4zfI2RZ3>)0b3kWG9@ylC;S0 zPGdHqP}os5@1>ch4UVzr1a((&GnQnHt`!b|pLUlc}Nd?oz+%Dz0J6}5l(M@%xE z`EZdfE=n5b^myQDZaK0noxy$3?)aay%A zFZU@A6_iZ+s zPd6l0x}Y2qBn1Kftx0zbgE>>(y8&I&ac5vUpn4|A*pHv_H7#+zH3`vp(T4-+>RSzW zmwv%Mbd-D05Hd4wCuQoF+cRtDWD2nVF;J_ia_#6T=W$6;+@+d0RT6}d`*i+#%jes` zj$%hP(aa~8Fk6Wez@Z?qVL&jL0&yNVaMPo!wXXJV?p{tjQ6--)FvjN^S83eb6g3y) zw?SG|UPm}x|ok3P^>QSboi2r)O8@hIm~ts1gxmGN9(dqE3SWNEKlN z+4ho}s5a&2QDLm79KK->iDHqbJG&7hZr_L_dnxU=9!l6}vX`fogn0I^F=wWxTBwLs z)CM7i>|u1n@*C^9HxEZ>L(oR;Ytl6VUuEm9m^=J2hdIKpv-fNOb$EiXV9D8a>Da>Q zs^<-}25dak%0-WWSMGi*%tMOS zfC_|DCT8^TrRzd@8a%9^CUm?~+(&Jeb63Ve-(k}Aii(vK0jz(j&(pD`c1lP6kkP?y z#ifpJf4Z-ZmW;uPnN-@vUk)Mk4ccpnGDQx7UEcOjTbV3VstRMkfp62QTj_2tcoR9k zw)9~HxLJ7eTjYCAj{78JPTOhqRB0^*`X#hRGh)KMe)kBZr#W0xAW085zPaoS`f*4< zv7Wbb3o1Z|=xCalZ>2f}A7#R4)9q2)_4^~elBQK0g3_F1Hn-@PF97kH1XJk5&wNB= ze>k^&cx@ybtuH%=r?F44dxBNru)72eSGCs~hm@&^c+hY8*nhMnz*UV9^~|D%sNz?I z?#`y!VDn*8nZuS=-ofZzXMutimP5-I8$)lfJ*_F(a_vl}z6fv1%^qx*~HJCWZ2rhvQ9JbEa92mk)gIjP8 zBb-2X!+&4W1=^h}6<&wl2qoKspejj%Mxadk*Kq&+Atgukz7TA-*WO7Fg!*jWXqirW z8JIf%o&dLyPE=o(?0{V`G_)z4X~2Q06)cqE+{TPXo7Tn(wrDt9Qm(2b0QEVGPO$<4 z=ngLa?G6BkCV7fkw(ctA3+XlA>fRfeqnAnG8z==OH~Ljpj&fOv(TgvTg3P8GhBnM! zbB&5afrQAP(_gvKySt~T_d^pE{(0MD6;6gQTC@aaEh#xU@0D4SgXBXqs&J7m0N?%3 zD7TGP+z>^PTouJfp3F@BAf2G#$#5(?A(e+~)z}AEtH~$EN8l^j8e0c* zd0~lF>KC1sc8G=X-&P6$pGvT)76%el`3g4>Q<(UV;--^^4<53x1dgJ(I@tI*oR1r| z4Lpg*K_&doEX-xDt_B}94fcoPMbJtO-DqLZ@#t!O+v(JSYXQ5=RK{rV2Z3L6EC^h+ zN40soCdk>gKyz&T4h4)z#`6{;!n02Ei7Srn*UeieK*R{}w<%SN%ZOHb%J&%5>YPDV z5Nq{5u$Rl*zFQBQHLnOPmotoOM}(OTnp+}M?aG3&@s=8+Cr(;Ma?k+%qC&ZKO40hD z~r|5qy&9~Yi?IcVs7`?1{qyla0wj|8-_n_ z`}S}kR0MkO?K3jqG1(-$xempBZ*_d4-74$Nd|tW!gh8#?jIe_xzO$jayackYnNH(a zW?k_uv}x`E7xwi{NdqJ?mM^0MvMQvwP5Fw_P-goFJF~-t-m{c8_!~&5gW}9Bm312) zae~M+(u#}v$Ls2n;j0c!PmQC=MGar(^!XKPS_Py>8MjI2B`_9b<2eGm>(N1kROBFK zLA;LApBb+s$84Cm2X8J`4U?&@H)n^3T3Bk#Y}cQw%j4&Cd-Ytiyqa@_>4e#b4l*j1 zx}%|MK2dG>DBU$fcp~WnOX=0|-G(Q;s|%?%@{=wy4}o{Lh^hb{xd}DGK_C{GRR=uL z5rZ;elDfYMBpPGP0{O7KTY*kmxnht*)3-*ER9I>Cr_2p(w!F@Mv~1P)NwM z{im1#onQI9|L?Su9%Xai=gHf0xiYGA;P)w#d zZ+6RT{-;WvhNc1LVu$<>C^YF^IV_A%rusxDohL-!1EHJHw*^rUkMdU*`lMzN7jn`x#}oo9gq+CXqO*5m;T3{P1Gv0g=UIzf zdAkOtqEulGrEND)SLPgB(#X;~6_-Rr9fjGH`NSgPR61;)Yd@Rz_ISA!mq`DBuBg}O z2P+jwP7%Kis_Nrs(O68!s$P|X_@HAOI5l_p{$TX$R$^gPb?!q=CJrNx3$uOsd-Zyr zRMqY`j5c)gGHpvLW+uw|ztwEH$<`yXH!+|#6CE{wx+L69NngA+$%QDWUs8KvI+Al- zEKod+@0PvgJfQyM{EAVq~o~`?d^q+|!{@04L z$bd}0`Qg$Oh5u47{h^Dif`IL@@?(ODYOw;@2&&uua1-~AjM4l*K1-@JS8BgiOutf1 z3Gu#+*Ju6Ad$c);)b*1eyc-6fsK*6e7lAK3Nux<${yX6+YSBkKHe`eVPQTOu(7xlZe#f7%A9y~rcG@vFTd!Orq(2f^w2iC_ zC=w2~e{T~wWVXeeQl~x+Y`HpqN+D`97lUOl;6$`?wNUC zPn^<#7=eN~+^U?|OquJ47fmiTztvA1g_f+nHW=CV-1isQj8bJIbk%{q&*3wyWUW~M z#rfy+5DLVpmfEE7*UXbuZgrRtTTZunYtz=Zf()6J_@gk*BaqNc2vxc}x2?_HgM{cPI3DDq9F*e*E$b8?tMR@H^ZZ_KVr~6s$Ac{l zWcw+{pM30PeSMk=jXBn2C#zt9JzH931`b!GH19|0R9z_%W670>APtJpnwPpS8tG!2 zZLm_Bf4r5Q`DAZR+g#(btcg>8My17S(7i)fpu`OR^)bcM(p8ze0pgi+oyX9%E-UYV6k+-aDnW3+T=K;*J; zA}s*>^1o*kq$raMOH?_M$9;4S_iW0*yswNE{>n{&Wp_LUwH@kfgTPhXb{={<4 zD0Ej?)wm(*zo#d{3kvzQZq9vh?h%t6H3={?uO@Z4d*-hHs_jU|xySeL2H!2ep4*3ObXxKehc}32 zIQ{Fm0>WZm7je5~?$UFUSa7ay1)H1(`h2?+sCMWypC7o>vse7$%k5dhaFeU2(DmNk z;bkOJh77eRAHFkxpSkqVa`B)Fn8_30U=(Q)YCE;qf>W%ns~ST=)pRtAS4w8y>9F~= zelK^o$$qy<$fT0L$L=o?&BHfFncC9!n5M4uV*JP{O?dJ;A)zyW*Xgp;wr{OZS{=;l4tO9AE4Q$g(p9lg3*^HdS z+ve`6iJ)OQzcmr7wu4U%Vqz%vzo$kT;O5&<01n%;RMS!0zTR_~8Q4@}umP1WjF+?% zr95=5ZF6-kJR6_}?q3AYy$X2Irwon54*=o-jP@c(iIYF?kUrM%A&Q?Qlei3<%lsky zoXPcSx-UxR(w@i!OmC>ZH9n8}G2?MCn=69{H8Dqu4lqEw21r^rz+h{k>mB_##N$@a znl@;?q}-$6PjkGBAfhh@^W0pXCFzdr z38p$l3~#EX7n>AKmaJz57`DUnF#{kphV4i4Bh3R>#4?FzBtQj}t7f@Nk!eDBiM)f* z>NtW!e0{RgRo<1DmbV3-r-$O1nG@MTjQL-Uc;Sc>v(d2$F#u$%&_qX z>BJ@c!O99juexfk_Y2SU?q0~v{7pZDV-;KtHX?9mf1@*z{aQfo7NgH zaq(}XR!9|uo227s~@B*}`Z{VqdtEu$=w|t2K$`|2BiDjzATci^K ze^lDOvxlN||M5VLG@ujsA&=W@(%?oD6x&{6=f1>})an#N1n31j%}~~%GktPr6`R7zhTj`K2Geqv zkbH8y&}Va0?x;00`zF-Tc{3+S;ff*p?LW0T?^d2j zKmGMVCx+l>8J=b?Z~7~Zbfuh+TA{F&yy|gXz;$Xupf`V_sEww~ke6yGBzf>0*QYm@ ztsjsv#ff(2Q(br7yL|BK3iW158yMlv%NEO{Av9sto#5uu<-n8_YUNWQ^w4eIF`%Rn z#SUSPs;aN1{8*whN3>FIKIhpT!APt1(g5+OGGyq~YITSY#Wig2t}gc34Jg7bus}ok>5HmE z&_+Jy%T{SpWr>e-)(h7=@xjvrC2ScI9vlU|P#+M>U9oGRi%sEIOT%v;MSt{J-OGV1 zpY5C98KOe1f%Co_w(PDWD%s^OJKA8O-NRM(k0W!i9$F7%UmEJ0oYP$JJk5@t+aG;) z6qH*_O?;(={dp(nEa3%4!|FwKRVo?xpqVP{xa|0A)|Vx2M~BeZl*tUCnl(_l1z??~ zo*e0(1T~4vnWZ`@v1t^)sc7i2SuO8RZ}<5UAtvX_x7qhE2N`x(jo(u0U8&ngnaQ5{ zdY``(5AeGD*|9JxTHf;$(-?!F%p2k4jQl(LkIA%WON5f`wx{PPC;bL2&Ro8$&3D@z zSuP=-VilE%8v+LBru;*%uv~Cg5%SLU;d~Tr#eqy+*$`?@$~iL8Lqk6?zZYSRreKI? zsaP~h5I4}7n`$sQ%=3KccqFH6$WXE15A>)) ztM)Dxq(ujqOr5-vDJsZT$!Sl}pIa9+-qL-NEHI!GmC z-kRvvt|rayw5u5W{;X`ud?dsFoaL8P3i|`&@I8O8$!~XqS>mgNVHH2pODE|CFgfc3 zrHW2{Ns&w;68ja$`+En{V_*C}{l2$>@=bl*7bv^n*HnC8tWZMmOMWl&fC?(Mbtd>YtOHY53SQKFN z=<^sAfD!(77=`Vtqw=q31o>Q=?Ff!Ngrn1|iNaRicTG49o;mYP*wr>om-fqon;Nu_V0CiFab9VNOg8OpLYVG+Gwo^wXP{Fh7CNgmFl}BMIs*@L( z^7)$$(0N<0a5U1#&aA66Vv`n=G!m0$3R8$qUhQ8qzN3cX3Z^^V*85B?cK234$4AQX z6#Qt<{ay=>>wQ#k;c4u>T9UJOj8Z$FBIHxMdlOV=cbYa~Q^Cd;aW%%vQ$K!qh|gy) zYb{*w-Z#!XNX@p@d#0mK);PZ%sIGqJEk{bxztSc3`TrsnIlCNEH)H?frkV@1`^J-M zfR`%J?0<=0+}HLD(-nqBv<*47m-#&Y7Wbc`Wo(J@i|y*}U}2`Hd416Crwx>TdznF) zXWosL%)7sd*|y-mF9+=hSjCD$W-&v?wydH@ zZ{!2Iy4Z+9;vY5zwU;hNv-|U6x9(fW(lb6viLZN1*8fG0CWqxZnUXtTw9;Ue+`FZv z>Xlq-Wwbf}8D^3y*g7<)xowX3tkFuJa?geyzZ%>{<`2Or#x#3D8~* zC;)uoTM0vd$_^k}49|v|fA#z#>c^oPAltcA3iS&axEuDz%5UTw37e`aH|;5L47e}* zuM6aFF%tl0@Kj3^&J$H%8n5xl5*g zfmRxb@B!+icsZQT2@uTj8+Y;N|LwVQhc|fXjiSv!vdO#6IqBgk0AKh6%ly}?bnZjH zZ%ctcIl>tPxCarw7FFw-KQ2U(M6S^lZ$TB#D+b9|)&jY>NG@oozHiii^(nYg@?pS} zl6r?~DnNXJmAy8)p#~e@;74f6jq1M_8rdg(Z-!}zCaI48f9%}}Tujm5Kk(ZkNhu-; z8AVY_E1@(bl=cM`+Dm&X5z^RqB1@7QlvGNV?914fEG1bYN)#m`Tekk^-g9o>OMd(F zd;Y)Yd0ekE>ND?q?lO1oHm5m!#SZuPIs02(ZN75vTh=w_2a}78R}|fLndtbVzlr~) zvImdL2h4Sj*qXNOexK#XeCWTlS2X$g@1stB+Gm=*=9tAIx}n^%WZSgoaVJmaS?(X| zd*|egU2!QBWNsNv?4LINdh)PJug3M`4Zq%s&FI&;TEoC)#>E=zA;w$AAI=Upo}2LW zU4cQj?BSH}+S92sb`EF0jo?#gij%QxuG5B;;163umgo80&ote%f8&9@0evT)2zoU! zsU!MwsGIC(KS|p1qOF$_z)XdLW&gRUMPRPiIqxd2@D3!H?{2 z2aH^oOqm+(e>l^)>g`JzC+&3?o~~GIc0q70;H8X-a+h(LD#mYfj_frXa5Z^*?w6wS zb)#U%zL+@pet$Ucf z*jqx}Sd;G=Ro7Y8Ri&x^RITEd5o?pExgNJSMJdbf){x3SsMI7oIW5u6e&JNj*c>0@ zfgTANv$o5|*=;!Ve3uDo-1;>qG&8Ze*IlV^E|-^}wvLBNw4%EC*VOXruf-Nd?dbKf zT@Up}r@3d%Pi?Nt>o+&V{utUMmcKEc)aPyOj$x|S*W9BYuCE%tDeBzNnZ^T(Wu#;J zi)A_G*&i++Y4f3j?0NyeO7im1k>C=9Q!B9$!gM>ezn6*}my| z7gI~-*qt;uX_jQ!j`aqG2OLTgS5fvS_l&Elp3q!kdQ{5FW?k09L0uu#NvqVlR;X1((Ga&(f_ zYd7WWyc0<~%Oyi%wbT1Ou=8kmp1*&AYjE#gm$J`T#f>(;yr|jNxoT_9rjGsdPOj-- z5-9s<@dv$6MJ2L6uJPh~;sWH4T>s%K{IJ`$uSMq2lD;7dFHGn|XH=G2!)WK3Tc_I$ z%Tx*4J?ib03av@)s#D6=%4JH%_yVrF(hA92PRXYZz-dl($>8rJi2 z^465nZtIFXvaeM3Le2dWy={fD8&u8=xf+_g`om&>#iq}-hIUO)%aRlK2IfW?Of=N% z{;r*eqpJ0B-F)j0U2K%3^d+xNvzorPF4gzea5Lr9kQ=;qW+U_JyIyydpXk`I@`B=y zxXO_ILE|4xI~>0G%6{*LUCC#6Jvh2Nb93PI;e{);Gg4$HNrYBj%E^9t9(~)G$WnN_ z?92-(bbCfw{O!H$OS79EPJUQ-WzM;8$Bvpl+j{+avqJpXjb`)$4Us0L+Sf0iSb=P;z}7hcN8RU0mAetnze zb;IcVqlj-+eR|lp8@FKfg*%rXjrtKaXw>+RK{yg4zbM3K`-YKJ^bC#SPv`u@0=goZk?N3JR^UoX9&*;#kkcRqR zwinzx2Tjd>Fnx<|`w{Lx<{6&)V0Plim-fL0$M3AXwrR+_LJgmJ!CfY}mN*pzbUoy# zazFT`eA>l>#;Um?k%THFitpn-odi!8hJ54T(JeO*ksf?YyCMj5fNw4{vaLR^}p}Z)};rk8gi0 zs=wR#uRiw_?=CnRVk``CO$&5<5Ho%5=2z}p_RQFkpwp-4=X>qPir+b0v>|0kwuSn( zMQEwnV`0o<`U9KVh{+XK$3DKTamHgd{WbRNM>NKzoR4Tmc|JKk%VYzz1n+jA`vpM< znsTnUqz;STtUJ}+EjoXx(%@;2-YOfkS1{b}@%dX|RVTwN&)Svba~tUsua@UW&*BYX zKK5ULzLx4+TA{XUmsFWC*DqPl&rGSyEBZpcyt9@5yXwb%GgC?}e$=6_^zl3z={?`P zkrGE=uQqf5YK-S|pDYT02z@}wa&i?n4oETD?8Eb z%*meUEVP!$oo8$|Kq>0oUG%q`Gs`^mlTK|~FxEnj?jE9et;KzwgBU&8i-KWgGQ-7f z$yrB#`mc`NMrd8Ubzwv0v#i~AdCyOT!E8*162sAAYtVOs zl=ivA_1+g-lKsK{o=jC`S-~Sk{f?`*-49%T%vwCdMc$;b;Kz@x>(^{Bd+ns|wx9W$ zK6NpTt$C&+ugyc>P_+iNKy}%mS0_o|9vV8Zta4C~j+FoInj7D&U5}ULB%a=3MW@?_dEMXhb#h`|^-><9SJYU_c5aBIO}f>J+=5{NAt^N;`F@)+t!{VI+%mx- zUth7bWaY`+p-I<@R=IVWwB^U4%@%uOpIY<|yStWY6hAX3ZOPek%dGV-2l9;8#&j}N zh(zBTd3?_K3%69aeST{(;`Pahho9yjZa86H5qsJG@cjDMwWph_^E}UlJZvy8|FWs2 zm*?p@?c?qno$lE0M4F&wV@1mRs(Zb=y)LMqE7!qp`}bSMlT^oU@E$d~B`52fDK$mj zxlU=wa#NcO3%4cyOKYr^+%tCvc+GrqYv`p#*X#_o>W=@|EGU6iv`oDoSN`~V!~Msz45y08 zJDk>(XuZ2_+z?fmoLjl__`5uf?|bZa7e>Fh;#_y#?dbf$>+T%7J5992X6uPvSz7N* z^v4NX-c1^=_RKIXdBP_D$Yi(5V>@rW(L1wj_J(iT{0;GOE9Rc_D#=fqKcW7FW#-E+ z*YCb7zcgk1y7L{R-***5U)c4v{#{3_F{dn-pg-td@-aVV`iGieODV7N_b!wAK6oen z>i)?6@spmsUQwZ_n73kk{D|1XSi3{BUI*L13bnO)-;g5Q|M;HDbVsWGNO2!mQy;&& zJI8JwTDEfattn;a>u&h(y5^c^s%Y#g%5m$dyWUG@-OKEh=gT5xc*3r`J)JHcy0Gln zAtQP38|zYQ2aOp&yVuy@rO7rAc1JFIYdiFclh*ZA?-KzRqmSzp&QbK$?IxYNh#%bn zeU|a?QEKO5=;PnmSLLUCYhO1g=1uMApjn=@ZpFus+v7cE9X^~ixuT*jTumf7;4htKpe-J)mAR6jR1k=|?Z&~=uNsX+9sUtRvxc%yjh zorg}Hu(jW?J87S$=j|u&pQNcjKh}^mr|{0W3cI1Gj|A1v`62tK)RtP^3xD20cIMoz zg4pGj`B^XK_~@_tICV%(gscAJ1AS*s4e?sDBeBP;&>2yAE}gPJ_V6isv^du%VA2_&uW2MZcpxx)q=USyt zOh(NDvc22Sy;ge9;EwX@vorivj#5f$Z?xCC1qA9Yb}af@IP=HWGY1Td$9ALt_I^Ow z*jarR4qi&-ea>9vXx>;Aa<#(s-n0{8fphO(uTabziMkd$*YY~tep(jY`QKIfnLn%> zo}F2$qrCTn`(4>dr`z?+c`Q`e?|#E_#t-e4x#N~8Y4e1`r-l@L2w9R)STM1uP;z^j zu;l6KE`@$BK{~o6KQ`K_^$woDJN?N+iNpr2x!rb{OWkytpgFSRq|yLo)#Nl~pL3cV(43IfIO|j#Z}Qwn_JcHPUV2#BoJcd>Jvbr1*jw8_n*YPrs?yqQ9y>KYiowmNV<@eoR=`(!924_eU44Swm*NId<;!o5Jij zr4T;$FsXjC=ZJWWXXAgGNUf476CC?6>h>n())YR!1l(}mAQR45|4R1aB7w{>R_#=M5emS3D{A*>BaYKJR7q zfv2B?sy&ZWn?C-?T;*(4czSMdz=z%mAJVoOYRsCHa%X?T$lE#H#`#a19U#a1kTWF6 z^UkJ-Zb@&422ShYf6C-q@TDdCAJdelbl14J@!raQ+`c9{bxA%czwCkODl^?#r#43n z?3ug&$)ez?cD~ke*_JyWAF!Ky?eN~XtD`@9^~^dJ{}tiV0SA^C1>Q`}oUkPz*TX9heH_{Sh0dbfbG7E^TgCehbm`Hv zXU`rz-bTMTpsupL6ZvRt6Z#ABTbnaod>5x`be^i_yz-J&2k)d}nLXpOkEe9hat+y~ z-{H%}d8?NhD7X&!tWu(&UFLD-h=0qmgJ0TzX}|lh?aoz>vyOZTGHcW=e>ZDr_8qGm z<>vdF%Fdi_$vQK?CH1ZT0N1i(87?Cpmynas%jfx2#W-~5$$B9Dmmp`<)$ti@F#VO5 z+pS$M)pl7{}vd{cRN@R@|>$M^GRezM5U zIX&&voSD79^tLYSbgDRBAAN1Y4)oQ}rR-Nf`_rE_RtCtpvm^Uv^(R5Sr|W*nRZ3NX#C1P^o9QoHFWB(GcDV_ z*2QLPVrpp~09NDrf!2O|ULB^ZjukJ>T<4(8JAn z4ciq*%z71E;_m6*IKueSN1OdOQ%e#WPoC|VP=Dpe_WB(zMX$S})?O*-gSJJNv|XEG zraTr7sLAi9J6Cs$>bI;PbpaECYxUy3_7BU_zvnSUca8B9UzIx<_J(`LZB5y_yZu7j z!(q2#6H;Ww4><3*w%6?Z$oUuUhCSn{qFs_W{i&))eL{20f`+r*q>WZlI^S*OKHv3- zxR{!=aB01Z^JV#0J<(sQ%c<;g*>vuGYD)X8O-2$QvTB#4AKaj?YF3@l(R!2g=Q7^L zoRCMsehaJ5jOwEzjXJXCt)RbKVr15}u;Q3fvG%HWpO_nFTPct0a`a_=Q9{emwaIAL zQDmgLL?PKQV*c&O=c`dHuq7Vnp)fBiRuj1|Lq6tGIOj!}#Nl%c4e)oZ9JNVVU%@jpZFWez7+VZtQdB zUE{Wd`b5*-tB<4pBbt{rMpo>P_qp6j<*HG^*XiTGj+?DzF~HTC`Ls4$IrICq>ZUud zJuT5W2wNpjk2xUzFjjHW}?z^I=6gq9vYA)H_>%``Ba}MPXne5|J zT>gBldiTpxwW(9BjRSWb_%cl=&~sR?(na$#-DmHaE0LC)r=A#}l{b4`pW`#XAL36z zTc#WRmi#Ke)%0Yd~~lw?JYPX?GzkVZBmi3Yu(MS@+l7!ich+=Z+H{GVbs#B zCt3AV?JeYHj305M%R{;95nsN1eLHBi=y8>`dNZ8o_UKjR)@jfku>~gLQJXdL$F86F z?%Jh(XSQl<6pB}WlY9}AKD=m-v6r9bJJYN=8cQ;2#{26GOf{0Q-EwKl{%q5u?~?;W z<5B~9l{)x6y}L2b+8}V(+p?*f3uQM+y-FMR?DOhZ-RTyWG1?1$Y*%cMpZB7C`-yVJ z5gv+)@h3Di-V}{GQZHP5FJgzeMpoA0B%g*iJ*OAGR8`H_?BO?igZ({2505pGCR@w9 zR`nhcRHSMuqb^*kT_HZxXQ%Q0gX<2D`?5`b>cQy1hlb}uW`;IdWzGA1zUhAZ?UMC& z=3i4E6=rspZ%Ta_t@e7(s-nWCh>;RQ(m!1Av3r`WdT-9%L4n_$Z=F=wG*)2$t#IV? zb64#8S?x;8K9e{5nM1I>ztZ(=xnr-A#2tK0G#6xyJ?LL9bU4_5xjTAIrrHQwazgfH zzRy4Qx;$@$$3v^Vx1$~@S=}7cEj%u~_E~nz+KLgew^goLNxx6XugyTOM$fQ$9v0)| z97^Z@FbjxU@UHmInR4~VRfoo`T<#D(etl#7h?mp0FUdACNh!~obvgfP)$#b9g&_-v zybDWcObOZ3Sl80DzG1}IDe5P~mwh_@Bz29VL&%`BlB?&|(s zVz!c{mv#2x*oL}YWnxKNro9P2L!XP)ojFnEeouN|mA6~`_#3x(#(hrixpF{6jrGNh z=FG|m$KD4RPwdz|&+z!&V?HvEjncHPYr8)UeD*G;eO-#An&#+Lqia>3)wp;^e%Dzy z*7nx3)Tn;xuSO-UH3$vzGQKIg7X50QtxNG9%_UMxQg*02psy_!UhZIHz1zH{sYt^( zxKD#=>CS|gR~@EL%(?v1C2@X2?vg-9$vtPL^GbEC8#-*r4AYo!=3J!t{P%tG!!Ah6 z=a-i)_0Nf~+jDbYoRdfB&iKeV6Vrmn*)`=T7At?%7+t?Uxfy+lhx|qv*Lz!{yc_4| zjGFuM!pyf?+E(+msxE644Vu)YboBdN5u&Z zmgS7TJ-^}I>Z)W5;Yph+)Zw7;rsR*7h0P^}Js)TGqtIYwX*VW+wAVsss$-)n`uz+g zjs7hV8%0slOVI;GiNyHm=ZnnGd`k7L0?Oo2B8y6QR6bFZ!Z$PyJG4;Z=r>21ytY}G4$hVl&$_H+bq3Jb~7iV$8eY+A=#CZVy4!Y+V&#S{u@eriBps! z`rpGMB0R=FJjT-{F48}Gs_yKt(7o%6g3s$ISbkdaV^Q(p`%%XSWZu8IbKTTFtKLgU z#f7fAuin>o^t(^JN9b| z9Mf4j!q-f{OQ31oi{taoDaA_U)-EzlA3r9)tU5blWscEeJ(G@ugaJ7z2ahkeIL>?I z+_Xy9<4Tm{&6@04eJciacyl1-g^Eibg=V?2ReFOgp5AKeHh%1?X8#()lG9<^FJ5|B zF`)iRVD-gU_Ec`miXS(Pnx5SCM605uMdFv0m3cR-R)n4zg4TCO^uK46e`xezUHWnH zx?5-^$u4`d?p@^$+bYOUay&UYzmfQ?}WU z{8i0W8*6z=DLGQ-pIVp~O|ObIJCm^R>XMAC{?Z<^BbV-)`>@dSq(jLr(;NCdGshp+ z+tfvV`2+itPWhw#O0Fv0wzhm|q=cdL0hTlwmt zHHuHHu0%V=tCuA%$t$ej-7VBE>-%O<#k6Dng3VTqoAjde)4->e_1YRT;wHbJ`F`K@ zZYi}#Zx{4lq~9`}*~W{YPtW!%w~FwGL%N>sQ!tAc^W;+OE2B_-)N__*o9xdy9>svyz5}Q%dRoh=;)E2yzI!~XIE!sC|+M7tJ;w8t;FJF zmd^$S$#>b0&Tr>U)Oz@^d_!MZ-?;R^eoJOK>vq{&={Uwialt-*#JR&Nh2=LVE(}r; zcGVPqd>LbHv2d)re}U(KH-@uqHr5YXh${Kd@fr) zC7044)a~R8N#iEX`{fBomwbxqyZi2yiO-~J>~*(vw9!=wu{2pU3u!E{W;*1@ZQ52jZ%JZM`(XOyXd1`>BXK7*Qd|fzwmB{ z-m*~*{r#>z*x&th$HofxPM$)c%C)-N&Ngv5cgx%tdPeC}0x5&N(^uXxRd?<+y4xqc zUB07AI;`;-a8fpF%DKoq$DVf%S9yLv5;Whqu=DJ7l`9YRmU(_H@o@XA4#hSz7ut^s zaaeFNd53zwk4nu!l~Zdk=-chex$v;h=`Y_;3@(l^k8k-{b}#m}|H-{i<*iiW?Ph$* z?;v_;sr-0e)0Zvjo@bgr7I`MjdtQ>jYdk8`r)2T?_lu|Oh)xqktIA)Q{K(Fyt8d-- zO68cjE}#0wxK<_&3m7@2`$C6{X5B@4BP&Z@W%}0ZDH&Rt8Je$EY(M+ju==PfIgzi~ zr2gl2xv4a3c0Z`~x>xmtCy&fhhYx&x%Ro4>&iTQr6}~k+&S#(NY_($am)>W17pf~d zT5ms^cH1HHYL?6?;ht65L;I-@kCh4P8)Kt*rRY&0FQa_LjhE4Po?oy1(Dzu(`eNne zxYd0+*DQW3eXFb8Jgspi-erPxuWnyg_qu60`QnGng*M|B&$yGWFfiW0zTIaJt1rG@ z-4n{~ADGTqKf0u2`c1{_aoyss44$KJXV52heCg4Z-^WbjukeYvv`K#cwTez9w-Vb| zu9^9AzTJwX*V|T9_D~2Z%dlMVVyI!&)#sh7?7nxZ4PCjyyGLdGvYU!2kFPXL*!%cP z@!r>OU*vy&w6FZ?6`if$_zn@~y$8SjH2jfyVxj!oL1ya319Efkwq$%a4{F~s=k~OF zMYHV7I>t&py*py!iE%?meDrHr8gJdBXU;Hn&D*aY^xtchBqkd?EP8VP=VH36sNfa)$EzXsgT^{B48E_^kxF!R>n&BOXl z%$n!3?8t}688!pUlylXhm2@@A@5&6>9{P1ue%E<()34T*?^zR=+p|=5;P8W+bn6wi zHJL6x86ziEH2qva`?E?NcAk{D*KSU*iG=r9jp46{jI(sNQ5tEpGHPF*x_+9%HnqT` zU2Yt|I@NKs_K%=Xp=%!Lrug6CO&{9R`ab2Xa!p+al^MEy?U}b*_wb1sA`6XeZu?Jl?EmhFn^<uxZC0r5M_N(7j&y$|S&Tb@bso zM}}Kob~{>?bX%&)MPGhiQ+asmiBsCgtKVEh{Yti6o>EdIHbpDcK1OQv(XL9$FYR7R zPT7+z(a}Hhsz=O#!3(xcoh^5ES#D6%8QzvJ2@j(uE(;2Y?>);-z2AUAnp#SW zQ^j<))}0vTX689(uk~hagKn<+lLGF((m&QOG-FugxadfM&w!cdHHOJ4KZ^Q(>{eX+ zHR`9vWq;gu-tYPCpt+U%9v{6QAeFWGW0&LeSAE{1u{rmv&xeEW#-5z4p1bx%_f=D! z4!)2Hd>eA4Df@BhVq2xkYwjUELM~R1&DHC4;Aow`?B=gqW%HL-T2CHjyVzy%_4&2M z9qX2-OB_-A9O_-YOqlZ~XyPK7+mb;EYrLQMwhz+}avgH0`R2HBd6W0PnZ3*X=83MM zVGlH#Px}`X*=`)My>!*A99I9e4*I{1Z&d2J0bzds_7OA&8>!D-%*+5IL*QupT6TD0I zZwj}LZIMUE$+o8fawUoBhtV@V(Mf{lFGo^*?!z2gIVS_;T*y}DoL<+(pBB!Nj)*8d zuCQLCVtH}i9f`%yjOB)y_j7#JAeTQ#T6dZE>8(L0wrszu=xgv;e|nCJ^zfIPW~7`A zJNjxZ-$}`C#e)%k1zro+MhtD}7Px-G09%cIP6KrHlcPFmS|_CzuXJe^{a{JE0Xr{U zuT)98K zsD#ea+nmmDR{yUx{dy_{HI@FZCg#NG*E)XP2%wJMGC$AFU)dxaCbW~HM{I}wO+`zu zOrJheXnd*zx@@6PqmtN=>*#N8Bq%9#=GIZ1zCeOue7G9ATte;NDOvRBN69lkcSeus zx(Qv#e9L}&+t$ay+>^<*m|UBAT*xE>&ZSj9ZaQE(7Ne@=0KC`%%>CXfL}M>Pp_MUv@+#@7FbqR68-Nk9V{Ip zeO0EEqs4fMJM2GB!|xhCi50qAG6glKqSK9KXXEu~6H@aUX=)(@4*Xl>Gk z{+%xLYbS=D!LJ=3JvUk0h`e^}|6-IOdhI08lA#f)SCj+udW}avi^%K6Oxr}9dA;;d z{@d4!vf`ts&|m$mYEF}_&(C;lR^c9Q~x=rAOD7s<54D9dinfa$E7xcUfdY)dx^l%lu3Rmf> z$$;x(mWgsj)|F#r&^)%#lR*P5I#9M$hV%xp49@uUb8A(fexHMYsX4lI;>G$$MF&NM zo2lvR>Z$Sk!+j(Cg2DsM)LdQ0>X@kUqGP;k;R9YQu~T zjMaF)-jQZ%0ioV8=*O@~KQp!H@IW=5cW5A59^aU#zd4DR+4_tLof&2u;fE)yZ>*=M zM^D&$IEw890&r}?#`OHKGun3Uq9SI7`{B6`4X5ky4+!x0jj@T2A&Y`m+(>6>DaskW zD(xvFw2erhZG_&&sd#O)pF;a5lsVGd6a5Pscs4cESdKuo5}t|dnZF(Jzc$@ z_D=NPK#Mu^qW4IDdGEyR`+nIwRp=O?vFW#5kDvBVbOL)PvA=8Y#Mbq%@0~;rw*RB{ zPV|y5b)LlRoqC}2t-ojQ#EwI+{l91LWb^HN_Wy>xlfm!KHU8`RL26i|B|D zg`V?A=dQh(F;Mu^K###g2Ou#tzx1KThba0`LKk{?(|So(4Tkl$Jq-zEBmX zR4h~#=+A~F#L(3!^X$(L=IB>?Q|d(ZMUOvU1WKZdK=uT&E1DyE`1N%9uU+J2NC*FP zDnwD~8!84(FL6SP@~>=!|5X=s;Su!J9Nq~3?H6hbI#bj_R2HGK7?mZcEJbA*D$7w> zfyzo$R-v*Ql{KiWMP(f-iKwhcWdkZnsBA=K6Dpfg*@8+kDqB%WL1h~%sin1sAQqC2bFA8a!|=dWiKjusN|!v50wH`_M>tDm4m1pLZuLu z!>AlVRCkN*OA5QMrf8eN-NxQjW?)R34#Hfy!f4o}f~RN);+k zQK?4d87eiXd`J7-TJ--5R9>P|he|yvuTW_~`>);I^P(bR z%+z#-pjAN+=!Q+C@7SQI=olOC=oosxj&AIz(KmTw?9oF&Xau@<;vX6s6d4^9jdOJS zCL(H%8gEtqL5!KV$ko*MI5^3`0EE4Ui2Jvi-w*ZA2T)d z7{olzG*b&lHM=}=!Q~wgfsJ#8ZX2@ioOMfZVsVQyrca?gXkMhdVllE@^?3I zhOl>Pe!hWY$j0b^_E&D;pqoiS;k+2sVkW@b7tMoqSh!AT489-a@BPaY{@(Zr-{@bS z@Qo%1P<+5;j-vnI@%Hx@Z<6Tvql>ow;Lc*`(r&;{mv{K4p(MH`>Bt;eBq=B62uB~~ z*o!(z=IBiyDcNHmdXfzEk+P417W?bp{J)RbUpo%+sNWq2=}Oz7Qz=<=cEFxo(Z^VN zZvNJBksg;lX0w+j?2S_TNGsOnb}P3=dJ6y8k=FC4BQ3hsypulCjzbmwEARjRsv|Au z{QQ6Feb8Tbul)Vqe|E3*Y5JetE3@DIckW()-XV5HSA@SC=v|^Ra}uwnfbX8sO1^d1 zMSns>5A2SH{k;f%MpneRPQ(iCjCn(hSjDd`Awt6dfCSn3dLkM8KRmpSdwPK|!v z6g}^co}*8E*sEOn;-l?Vt~u3+_Pgx(f9Wc>(@$5q^hMXNpIXs#Oz)`a=CACIx&t|A zu)m`jV+MBV*>(8qZWb$g2MlX~wcJmw=;!Uw=L76(gFheHE^SI}=d4Q!`s0v)V91n? z{OKf)-pfq+4?KzcbMl5h^!s0Z@u^u-C}U(y#sSX#%}TLe)F zsQ|UD=al)Sc(Fu<+?K$<}gtI%Q)EL9I2BXKq3HNlaA7j|_OxoZC z&b`rbh%qvpY2k!vhDeWsh5?M}$T2wK9xk;QL$|$Q2b{2Nv*>gXW8^pnCv?jgcF<)E z{i?D9PSB?kt%Dw8=zdS4knE0 z&M`PqZWR=DJD4)2C&%D~{sSs@Fk?(F zj=@Q97NGw}GNw1j;DrA8h#kxsqslQj>B9o_Kc6vuI0h#?FakDdeN9Qy7YsFusi!Ze z9-OFw5wHo=gA;Wy)M%z2bxu7v=?6x@CQuJf`h%e?n0oqi>cNQy7y+9=Jvh+>LyckT z(d5*FlL24^Yy$P*WFQ#IlBs7PryiVeZi))n1nR+wHm9DkOg-A1dT=rbjDSs`9-Qca zp~f-w=y2-634IHg3<5TRdT>HtX|Th1rk=r^dT>IYzmq}0CQuJf^jU%aw_@ti=hTA} zy0s1&1Z)EJ;Dq~8sWnrNA*UXk7_qgWCV^}M_29%93^jqN$Cy(OPKJOHunE+I6Z-mx z9c-9-hH~n`i3tnP{IChsgOg!kC|jnUVVrt!G8~M6O`sl}i~vK~G4+h#)PoaKFakD# zdT?R}hO%esG2_&OlaXKqYy$P*guZ>x4h~E`=A3$P!e;^6MX^b1JtP?gMu5#IsD~t@ z!HBRK4TdBZU?@jsek{O{WDFQSHe@bO$9}h4TPNuK`z2Dgc-tRb>3P!*tt%fAiz=*J!2Gb&mCm3onGe4eSNa6*C zkBt`?l6Zp=VB-yjBtBq7*!X}Ui7yz+jhP=`FeLE7|Mg0pAax42?fK)CKL=w z!oUcy2?Ilta4;fl!oiRv0t_{UnV$$SB#8vW$0iaCNoIf%U^4>@Nut1ru!#agl4vm0 zRAzpn!H^^d3?G{qFeI4?Mu5#sFeHfuBf=&Y3`u5zp{6nOGYbq!W`p5lGaC#^;=l;7 zi33BDIbcNC%mG7^xnL+yW`5>^A;~;2d~D`{AxS(K0XFeqNHQOc2%Gs}NRj}C@?z#E z0Srk5V9?+E(f4))U`Vn63?G{XU`VnMj2AWw!H{GT7y&kmz>s7y7$G)`!H{GL7!fv0 zz>s7qm`ZGxf+5K=FqAj5?90HAWH}ffHp{_~WCa*LHY>o8WF;6cY*vCH$to}cY*v9G z$!ah{Y*vFI$r>;sY}SAw$yzX#*sKLZl67DxA7=fm14EKTFg$D$!H{G<7(O=Z!H{GF z7%yx#fFVf|7y&j(U`VnNj1ZfRU`VnFj0l@eU`VnVOeHp(!H{GN7|NGfKU=_%BpD13 zn`AH~*$Re_%~miZNde=9O$r#2Yy%^}W*Zoiq=FG*lM03;+rfyi*$##zX<#a`NdrTY zbTE`3vwqUSkVFWEhm8;nNp^tYW3vMcNp^zq!e%EJlI#K_z-AX1l4O7pVv_-eB$;4D z*kpns$!;)}*z5*Fk}NQkKeK+az>s7Q7#=ozz>p*x3?G|pFeJ$VMKC0}1f~+3OJGQH84MM~te?wZNOA=X51T7sNOBbnADgRSNOBE~7dF?xkfaEV z0GlE(B)JYoh|P5{B)I`bgv|{wB)JKu5}TV~NOB7d70j%kTVP0142FkIF&L7RfZ=0P z0)`~F!FXYF8w^QG!3eM^1w)cMV1(G*0Yj29Fd}Tqz>wrFm`ZH!f+5L0FjNS$e(r%G z$$c<9Z0>_0$pbKaY#x9iNjVrVY|6oqj2AXvz>wrC7y&k4!I0z|7$G*_z>wrS7!fw#!I0z! zm`ZGZfFVf>7%GxkKP_NL!U+_xp_uP*VMZkh1QZV&F^EXQemephPY)Y$FeH%>Yn>rJ zHWFY+A_>L;8%Z!EX$Qs&n|5GGA_XQA8!0d(X%9w#O?xmTkp`29jWigNbO0m7rUMv~ z$bc!pMg|N?I)V{l(-90wWWf|;BMXKka$qX4kpn}LPGB0b=>&!(@?fYL%=RM>h9nAL z6tGbMLlX3tUhKfbrZX6lbOED>O&2gEQ3S)sMiC52x`J`QrYjhdbOYmsO*b$kQ34Z* zjS?7=bO$5AraKstD1%AFhW;)$GLWQ4Yd{IH=>di$Dqsq*LEYT5^^k=AW<)ZGu;~eg zB=mPWkf9ixUSLSl8%!lOy}^)#{#y?+G-9I)h9rH!P*KeG(+3PmcwiK;;ejDZUobpu z`hp>e8W=rn)WDEL9Sk2Ebuc992gU)Leqcz_AB-0^{lSn#156|~8emAG2}Xd8CK!?o z0F#K#05BvO2u6s_KrkfH0#kqu{mnLHKndL!9?P*)WHs=$z%=5qblVtRFl7HTxQ!VMhAg`t z7zJFj9vCt|`e4X<)(1nD%K!}7Rt>fA+LoI7&0y6HpUnX55EV8 zfFbid1dIqzYbY2p&qKkGc{Tx)h_?+BFa@}tVPN#wq;-2HW;hrgHp8JF0ZvAMAoLfAPWS;d=OB$UKh% zBgE@)6c{f&)@U%~^%@O^ESCis3Xf$0hRn~HHf9W%L_C%y7&0wOFvZx61w)o=ESLgp z#m7slh*lh zz^}V47_#iPP){Qs%MJ{A@7RGMHQR$B^K1`>Y-0{!B5}w{55*YHDP6k8a zdM1M*^W)aWxPeK;W4VJVV3XE)ChOS)i~t)CsHYMqQ^4@pq_rLqPNstKVv|-w>X`;c z51VN)Ei%uZU`RclVEA}j^#a4k^>~3P#)&r=0h_eW4_S5}FbdfCKs{uheZf%J_<|AO z`SAlo_L+WQ$h7>yc;R~d!H{VMfFaWg03*U<1%lzRN$YYI;AA=&JvM1IWLiOBT9a1O zh{p;BL)K3)%nunWq>Tw_V?x1DxaLqWBAkSQ@nVzK`6-ZrAa2(gIIV8|TK1Vdpn6O0Ha zv0%t{7z?HVn^|B)__#a^Od~e4!6>lFudhWM7_wY(ZR(i=#tYXo2Ml>%%mqW{c`g_- zKl8wl`I!fX?0e(Ekb2_56yvGS2P0sU*5xAWFab;fHVIG!ka`w?A@jVT zjadkWho`j=3^`UV0z>Lq1cpp&F&I+MVlZUcmw<7=(^>+CEZ5RDW+@o5Jud@8wx4BS zDsj!r!H{V!2Set01sDpCwE|2ePF8{;ujxuKWS&=n(Zge{0z>9!H5eW?tHF@vS_6jE zvjz+wzn9m7QNZ=A1w*E_4om@lf2{)}!eb?ZA=63(L*{2am_$6*dN2ZJehI5e%tkBN+1j+60D7eG?cFu4gkCAzt>)U@EcM0*0)^Ep1FP7z&S- z45k1lTfvZewt{KICZ&x@0YkQ*ZD73cSlhq|aFPl}k4;+Fvj`{K!I1aGcBn^)O&S>T zTBLy~#wHyM#U`!O^1|Dp5DZy%A=E=&uN`1`xSkzg$okm{hSakY44I!@V8~MJYGX3m zm<%vvJ!gW^!}F5~hD>XB8?zfsB_1maOeCAMt{+m*9x!Ct_dq=YJXSUs@_J>1NyO_p z2MiyNmBTSO$!%kD!HBTg3&w#>TIV?uPb&|M0ycS24_Sx#U`RdrU>fmQ`@j^iN$a#K zaZ&(=EPDaeBgAGu7(F&=t%pqO02m6J15gi{=YwE)*c=3-hnM{j7zb<)fhopGAsA9~ zAsDh;hruY|u?~YF?~5Z~$h3}tAvGUuV~&C$^&D$sj)8H&%XJ(KS*ypvkZGL&qlf4D z1Q-!cPJ$`M`_+?R8nHPAhSYNkOffd6!I1em4Tgv3`3x8y9_tL40-T827!eqZt^yfXAu?L*A!VV0hS6ff3^5DHtK%uRaAsma7^JSjfAuY+isN^Yao6SXA=^(Q7*bCo z81h=Y1w+=xTQFq*^A3y%&(AwB4tSoMz>sM*f#GBG9*hvz^BznwPCkH9V3XE;0-5?p zFnZX0gnG!f@d*r>pHE=Ov_7{npWB#bFch9vGnh)8d;!B}lh%1Iz{yuIk!;dx67l-^ z28K-Q8%#@x$NJvJd;9$Y~KumYvfgv>1=YX%XtcCav`d zal&a4s=y|#hSbAp5lZ%}oED+Pa9V`&a6OzBp#r>~IW0oTv^Xt78}V427NLALX`LUk zo;fW-DQq|`LW$wD2qmutr$s247NM)Wc~JN(`q(C^4KCp$@<~6 z2qlKoB2*8L#c2^*i4#tXP$8SNE-I;q(;`#>8%~Q*G8U&rr~n&oi%^_!T7){VN$a#K zqnQ?=5~zC)t)IH+P-2cCbkD-EsL46~4VY;_AJYm{ca(Iad?W__wvXun|3~_mF6Q7E5FC~qp13Zi_dDD=p7qC$^J5C3d$)_;1hM&IV#+NaR}&EBiE#s0b8 zt0mCBjqWy9oZi7fr`Gf@e>$@M(~GJ9SF~t?k_h0^%twg^9_siLw)Cl2cnL1LjzGy zw!Se@e{&D>yS{7n*-mPI?z`56jsJSzwSU*H{nt)6OETC+gA|Gqwr+1qXOjaB*#bdt0JDim`A7X8X!$Cqfm<%V|L%;1RT zn!e@6?P3q@+?l=nF!cXYw6|9fH%C9YBPY#Rdav&&-HZ8|-TO0@p@*)h3`WIKT84R^ z?s`ui{iMMBM&B1{{?qseB+|0DMg#;D)A|FAC4 z^_ltk)8~1B6Wzld-ANtp>CQjgkM4^erMyt@@IcfBeYlRRGwC87cVrhc8&USXL3ew} z-kfINV|L7i^uN~QICNBtE-KORk91V~-_gUk+3`O;jH~@SPj>$FFs@I(>;CjG?r-*g zsE2X4_7pW9osayb9>(eCEz$G-XqQNT7RWt~`CSj=^sbY8(Mtc$9q7}Q|H(a!Pp3ad z{Rf6WJ&aF}h_Z-@LS5nh*}M1$c>n*qlwx}r=iX`jXL}fzLpP#k%F{QY{@#JR-&l(p zHVj20&PUf#f2)Ua`f~s^WPjJgI9-P!+rzl6e^^9R9M8%5|8qy`wh4@F&>kxfDiPqVlj>i8RI~pf_lK&I^jpwrcjR&I^s(<<$M?JjL z7q!2?>BaUpeu?v$(4YRs=_5@q=DQN5*gIUU2|7t_9e9js&oMYbcfwi+HO5GD3{JQw zcl{WHThieXaYDDGWCsn#$Z+bxNkQ;7%-+Y$Ka$3{UjL-8PkPh zaH7Zp^uG~f6gdVb^o>q-FlJ0wj=@Pc7NGx!Fs2*F-~_j;#c(KNlsE<_bemOnFkwu0 zj=_mC3()_=7^BQFIO)ML!x__qV{oFvF(VkG!ZA4M$uXvk>B%uT>BTW-jOoQOIO)wX zBN@}1V{oF%G3Ja>LrYjc0ycqlh?B8kNbllfp&pWq z14B76HID;BlJQ{p*o+555-TtQY^=bL#2SnU8*4BmnE-}zX69!C7?Rk4;bUV1h9tIN z1lZVuA&DIr5jJ*UNMa9$a$)Aj9t=qw!0@qg07DW-Fam5G!H~oWj0hViFeJf$(}N-I z1Kb%5g%cO3htDRh+XhKo!3eN%g?dOb5sV0%iC{=F2@Hk%0G|YgB$L7Lv6&2pByL~? z*tmfqi8~k(Htt|Z;sJ)jeSmv_A;}ald~BwGA<0xQ0&J#&A;~l_B5bCCA&Dm#3iko- z35FzIVEEX0fgy=E7y&lkU`XNvMud$I7?Svcp>QAIzFp*m42Amu4+KM!>0tQSOb0`fATR=Kg20d@7>o#;U@#;J0Yl+Fz(c^0 zBoquEn@}($2?Ha*CJYQo!oi5J2?s-x2rv}x13Ur@Ng~1Uv55pjk{MtG*vtS!k|;1D zY@)!BBpM8b`v8vyLy{OUd~9OCkYpwp0X8$ikR%q22%A_iB$)+s7P7!fvez>s7v7z+0RJ{Js0=7Hg3GYQmRIm{nBBCx46|AviUt{mFf{OB=InO)uoV)MI{oVGz_x^wX z#LonH{O)t+ywlEZCiC7wMwHoPQebA25oHdUG?+PLM7fhp2F#sgM7fJh2<9#_qTEd; z3+8SzqTE9!2j(6!qTEX+59VGnqRb@|Am{d6GNROwNr9;$Bg%bb(qQf*Bg*|`GGOi} zBgzA0LNE`I5#>QLSuhWh5#=E=IWP~A5oI2kJeYZ8M0uD@fSlV8lM!V;nG~4$WJGy{ zOd8B1WJFm&CIe;x8Brc36M}h^j3^7qWWg*XBg$iBa$p`KBg*4s@?ah(BgzwG0_5C& zf{Z9RGAS@QGNLRZlLoVhj3~8aGGJ=Si1H+v5X_TgL|IHG3uZAHQJx}`1M?IaQJyA~ z2lF%;QJx_aAm{coWJFm)CIw~*8Bvy!NrPERMwDmCWWYR2MwI8sgkYW{Bg*q+vS6Mk zBgzY8a$sH{Bg%_p@?c&hBg#u;0_5C&iHs<9WKv-2$cXYXnKYP}$%yg_nGBd$$cXYP znGnpYWJGz5Ocu;*WJGzLOb*QJWJGy`OdiY|WJGzBOn{u*Z;}yZ8JQHAWn@Hoi%c5K zTVzCen@k4G+hjy}hfE0O9WtW4OC}5ET{5D)M`J7A&%;#i8`GQOu%ok)t`I1Zq%$H>Kf{ZA?l1YR4 zm5eCAk;#Dhjf^P2lL^86PDYfKWU^pZk`d((GC44RkP+oiGI=n6k`ZMUnE*MZSCJ7V zCKQ8-oh~U#>~zT#nAqu(qQp*@ECmxgT~d@5&3uK@U}C3BiV{Cv5=>LR@hECJL?d>( zWSvudSVf7QE|~`tJ6%$g*y)lDU}C3BiV{0rGB_ccf12`*M{QAoXv9vJ44vZJLX_C) zl2u@u@{MB_m=yJ>ln+=?>=ZAF5<6Wo1txa7q$sh|B}>7?PL~vAb8j4^!Ng9N6eV`L zWEq&)>5`(vPM6GpiJdMfO6+vW3NW$LB}IvyE*XOPFUvRH{gmFwK<)!K?Bq!C{|T6!idIy+)olGzDYU(GW?ujvu9 znqpdcCak$IVp@^u1)tWQ2^N59O=dqZMV<*4gDE0249x0eeg?BTnH-ok$lQ8SRG&3G z6E+}XZOH6@am2LoOwb+?ThlYaNnqCWOt>?cwLBA^24*eK1jE6s?U~>WFl&E zxExGd&xALFDOOCeXM!AGR>bwD&Pr+=cm<`Fa!YJ5C zF&mND2F%8a+1N9|KrovqW)shZCxF>hF`IfOxEjo6irLIF;X`0jib;`q3rr`)bRzRR zm=eX5cqT}l6OE?L6|=c#!VAH4R!nCyMVCZATX-hi(kX5}4A+9PrDC@9K0!M$TPbEM zG8=*EqL?n82|Iz=S}|KIW*fz9qnK?Kv#nybQ_OaX*;Jis`PH?uzN5m>!DRMKQaO>4m=0Q!za~6AS{gt73Nb zOjrSCH^uBm=29@bD`s~x_kii8m|kRR!R(=!Jv7$sv6|=Wu_EF3}WQO8eeHGJ}%n@MvDW;!d_EpTjis`SI z{)!o(m;s8}Pci!`W`D)(ub2ZAbAVz7DrTT!4phv6iaAIz2PvjZF=dJwq?kd98LXJW ziW#DqA&NOzF$XK=5XBs#n4yXps+dC+bEsm5DQ1{rhAU>cVh&TxVTw6iF^4PW2*n(s zm?IT)q+*Uz%u$LtS}{i}CZm{)Vn!%tgks7SQ?8hiiW#YxQHmL*n9+(Et(apJbBtn+ zRm`!98KamniW#ezv5GlPF~=$9c*PvAm~o03rLVikYOC$%>imnNZf9DT%N_3dLNZm@5@?rDCp9 z%vFlHS}|8E<{HIZqnMeBnW>m-6?3g(u2al)in(4f*DK}*#oVBn8x?b-Vs28*O^Uf$ zF*hqFtC*}}Zc)rFim6siwPJ2n%&m%Bm<5VipqNJ$^QdALDrTW#9#hO? zig{cyk1OU0#XO;yoMLi{S)`anim6phtzw>3%#(^)teC}$c}g))DduU#Jgt~#6!VN? zmMCV4VwNgqsbZd0%(IGlPBG6Z=6S_Dub3AU^MYbtRLqNtc}X!ZDW*;_b&7deF)u6T z6~(-wm{%3^s$yPK%xj8yT`{jK<_*QXp_n%n^QK~!DQ1~s-crn4ig{ZxZ!6{<#k`}K zcNO!lV%}5Cdy08qG4Ctp1I2uxn7m^0iuq76A1bC^G4+c1NHHHN=3~Wtte8&}^NC_U zRm`V~`AjjNDduyS*4g&it$3=;>;bP?tM3RggS;h zLLI{$p^o8>P{(jbsAISz)G^!<>KN__bqw>3JBInj9m9O%j%np@!!gV^?wHn!VZL$4 zFyFZIVZL$4FyFXim~Y%M%s1{B<{NiR8&x0f2z3nejXNLi2z3m1ggS;hLLI{$p^o8> zP{(jbsAHIK+%d(f&dfLN80H&yKFl}n80H&y4D*dUhWW-F!+hh8VZL$4FyFXim~Y%M z%s1{B<{NhmcZ517mT!E$s_19X+!5-S*p5(Pm~Y%Mv3%nzFhermxMMc-aSnuGzH!II z@{J3_eB+LZB&?wD=fl^ae@TRQb!Rdc*R`8al7ulJuS(N_UJ(V`40&hwMUU+2w zWRqMfWlr3mFnPBTdz6fsGNod-9e12;^Wct{yu-wb(G$%7J7(gf@gt^~e@;4f$5E3; zoRpOGx+xWSQdIt-B;J3KAoJgt3OsPBz>jVIw`ACDVX|@C8RmbQopdVj7JuXH6uCz^ za+>mg2f^jh^Zymm_ba3CP5Hn79kWwH_Ufkm-;%!fZ=0PGBKY^`|Nc8?r>6Yh|I71# z?_(AboBz9O+aP$(yoc^q%>3W>@z>`6o@D;t=r#Xa@_z>=|2NVztsU4rm_g9mETOqv z&irlFs+Pg}J|k{B^U;C*D$J}2Hk$i=X3usJ83eP6j%zlnNd6K1ar5Oi59VNl|1&w2 z{#6f%6DIZ>J8m4(CjRfs|J|x>x9b1O{JuS+^uCh+so&U1lcyXoV)7K5N7m+(#S~8F8^ps zS~q$`YRbtK|H-6v=HtfZ!45L~6Z3x?;@_A5`=84&>^}Um^SGVu{@XJScdKs7INX$R zcx2P`YStO7@KeVhbj&fS6Gx2OqoiARo6p_I=9xeGU}^N;>jXWZk0dm<7UU`A+Ds@{saeKZT;u=_9q1P%S~PG-_I4b z3!eLn$24#*QM=>Xo9pi1ItX@OyYY;}_W$=X|9`ZxSjUuj=Fp^!!wu&7Gya&2EA#vR z>lueztj>G+TmIIRaoA=YZnka^G&iM%DJ@M|&6HNAv^J&4l+{gH!<06rtZB+xrmSsB zTT_ZnS;v%hONHOi7v2$&?aPHaDfS zDO;Gbr72sP(#4dmP1(kjZB5zEl2697Q+6?>rzyLd zvYRQpo6^gaJxtltl)X$zo6_5qKBnw#%08y_HKm^^`}Q-+vwuqlU_GSrkqO&Mm&a8nL5<#1DuFy%;7jxyzFQ!=KEFs0m-k*16? zWwa^Bn)1i0RjbCBKgXJKoGHhfGR~Corc5wpqA3-ooM6f%Qzn}-#gwV0oM_5Prc5*C zWK&KtJAKqQY>Cf8mllOl#<8({&(Z{5=_G6E~^(($^ zd|?)#UCaxgH=jWKPZ_5VHP7ZHhE2*iU2630f&m8(={xw~)S$BeaH{EFo5xd4k4j(F z;S=-u%Rlq6NK>lmrc~4BDc1ZX!2JAl+z6YSeDvh)`wlsJ%A^saCX6%bwofr1u=KPa zyp-=zV!n@!zL$@fJbK*N2_{K*X^DOH=wpr&Q;zB8YX_}NB;41=(P@^gqK{~xK{0Pj{8uVs zTE`eD@wY%F5mOXnpu`{NJ4ejwF$N0Xdzp18V%CT;P}=y~H079HJ6JaspKeja){Dhw zXHoD&2Kzst#NP#XkC=8bA1Li(K0P9)eT;#!evH{AV%Co_P&&kzo)Oa_#z5&9V|I<0 zjxh$x1~F#0h}j^>e>2#uz9Y#h6|Zvr&wJvT=;rBVsm=F;F&%F?&YLCNT!e zrZHx(h}ks8K-nzDq$6gt7y~6mrYXmCQ;uo$hH&4gx9rHi5%d>@;~k29ewVM%DV`B! zCr6k+2Sh$Q#rh$Xu4E*mbXPJ>Ii`c%V(}Rm#c;P+e4y-3CO9x+b|)iBFEWx*x)+(I z9MdMFwEvQf()%zzqV)Ah5Dtps+?R|f{mA6N^dlq6zGQ;IkUCQ3j9+ z!3-cH%6?>WVD=*;%Kl^mNKIWPy35#=B<0rEZ{ zL`IY{GHEbnWJDQ6CImBxj3|T2DSo{WWaU4Q3P>QS8rg_1I8rh|)PeWNMI^p)%zS!9d8Di$B7aBhKe zHJQ9qJR{0AWCG+_zJ}KlWhR*vn3-fmxt2^C%(Y}hxsFT*%ync$xt>f2=6W)s+(0G^ z<_0pN+(;$|=0-B2+(af1<|Zd#h>|6f0+S^p$}MElU~VBJN;R1b7@jB? zh;l2L5DZTg3`ChlCJSa3uO-TDWO86`BO}V~Wb$BcCnL%oWCG+_zJrV?v&p2u%qAns z95QJzbI6EtCz%YGJIRQ07nu+YPZSJ9xtmND%-!@6qqF^9O4Ve@eo+ucIavzyAnEO~CQSK*`0dqeYQ63-@g5imRfhZ4>$%1*1KB7EC zCI{vrGNQ~QlLs@8j3^J236N*`VKSo3CzAp*pNuGvkV%7igp4Q)$Yj7QAS247WI`~H zk`ZMgnJk!vWJGz4Ob*OrWJGzKOdibRWJGy_On^MgPmmEMMa2F$Z$M0t)(2!V(H5}5#bmU*I}+3OU2Vpc~cR(qLX@eMEVMOa{y=WJGzDObCW23I?LQ zMkWj9HTsD1I++}p*U5AsC)07>M#QnJk!(c`Z>sA(I312^mp7C6fp9DH%~d zBNHIc@@Hg3`J7A&%;#i8`GQOu%ok)t`I1Zq%$HM#6nE-i~d7_}%TN%wi4P;VI;rs*TdopRKct(^T$Yj9$z&eZa zBbg8kPZSJ9`H4&x%un$RoUp zj3_ao7z|Go3`F74Q$Y$0PZV^DJG;ePvJ?zY6m&`p-|2!h7@jET6rLy;l!4)if==Oy zfZ3x@I*nU@I=9&4h&BebP7)t4Dw)jqM%cFqF~Sfh9?R-g(nJ{-P_S@!xIIa z!V?99VlX^W&?!7oFi3&niGohyiGo2X7@jET6rLy;q`~k+L8tIU!JrHbPZV?tPZSI? zV0faSQ+T3aPyvP~3Oa=+3I-vV*olIo@I=9&3QX)oK~Z?3V2}k9J5f*+o+ud9fQg+b zC<;#$402#%Ckl$f69t1hFtHN_Md68pK^{!(L_tw_qF~SfCU&BrC_GWn?EH`VPwYfN zQBs@}iowKA6cmLg3I-`Ku@ePF;faDlDVW%af}(8BYo)=&P81Y{Ckh5-U}7fP3y@LTFB?n3sMP{45;LGMkin9(BBmLc8Ys=ZO^|hpe_akr3o;!mBcB%Z zNkeH#W*J`9lFa8&RwENS#b0YClvZQ{IJcrtF_hM1%ADeTdO|58GutVik@~DorU6%9 zo!43cWeqa(o#K6@&TYu#!L*@I5w5-_nf^}kK60mPk&*UVi#`&uwaF}l&)Q_<-rJH% zfoV&o4mB($Gs7vqJ`#;}$VhKlhdvUYb;(Gb*CkVmtFK3946d~v8Hq+aGPA+7BP0E= zJsGKCdorS|Pe!7;J{jq~9mq)QbRZ*rtRtCexQmWt#CZcU;SRIL`Hh}#$=>THzp&!ZWA&R`Ax`3@7_>5Yn71c4`y>R8K?NZIt@x^GIH;o=_5UJ3o>%=Tab|&Zb_yX&Rdd^ zS8YW`YPb~{xr;7jvbgsyWaKWkCNl=t+L}yHDBF;!bBe$BWpLh>ObBLM<+B|bxr^<{ zNDFRHMn>HBWa@CO9mrHU#n(q7wj&vd>W=i0aau~I3+h}-MqafO8Hw{wWaL_1$yC6n zE14oF-N?wDb|WLv*qMyPaAz`7pYCL&mAjJ(aIGF>q|QCaNSp3LMrybVnJ)0@Nv6&z zKF;#0UCGF`cBM}ZUbPz;xzpXqh|lh1D)6e^$;f^6B2$WX??pylwFeoQk@g@X_q8XP zVYt?wWF*dek;#DBi;VQTG#TkpX);p7-elxXdy|nG_90V-YxN-`t-LpxDlmJK5ubg? zNS*f~BkkUoObDO8WF#8>$fUvaBO}iHl94vumyFc8KN)#de=;dJ4~Q{n(*b0rLD`SY ze5d$+C|BQ~jMRC5`UJSv0c2)4#rw!?GmuOjn1S?}3FW{TgZdmuMq2P7GGp+ngUCo9 zDGScoxk&(MNij3U*(PX5~N0X6jWynaKGh{>=K}LGi2r^Zu zVL6$!Q+%8=P)3p&<`mCJd`6K85V29bmfY!RGSW9jlPQDqF=Vn%@z;{}I+jcgm}BW9 z^%+AZ1!fGHF{t5KGHEbl$t(kN92tq&ab&vSRmYQ&+4y)ea`ka!>hP*@WF)HN$z;Hc zCsPb%0vYL16UfNbCz6qNpGc+@J{4r-RTX5!`2;fk5seeb1n`+eMw};+=?P{s8M)KR zWW;9*8R_#=$VmU0N=BkFm5lU_6Uj*HoT!+S$b_ijNo2~POd~VHDZU>{#7-t7aXy(o z(t@Xu@rw76IG;+U3fDT7KEn|C)5yr!IgN~5{d6)C!_e3W-&LES;waz4ybBeFC zjEj(r)F-5mjKQ$IvCGIv zR4*qZBlmJL((A4uQ;NH|f=m^ZE6K=xT}eiI-Bo0y-LE1u8+E>#jNI4NWb$CHAya{? zUqeR5*Gw`+U}ln$_PUmgIA2Rf+Wk5*(&w)uBkgrP8Hw}tWQuY18^}oHZy+-R%#CEk z=SDIqFgKBr$lpXpB7ZX(dDYEiY7oOLnb~m8l96cKLPlbE3z?aCRW+F|PVxOY4dqrc zp;J855y~twUh#}X>^3rTU$?P7a$mQTkzRK@8EN-B$b^W-9c0F!KC{V`ImOp!K3+A4 zjNI28`pC8JBqQ~S?Ff}P-$iByobRHKINwc1;(Rw583p%{kviW)rWki|FPS2z`1_gx zWiAJO5c2ImLK zl!1AOjMV2LG7^n>WaPf)ky!%ghsj8rK1@cG`DAjq`g}4H)knz4ojyWl3|_T>%uHN; z0hv-TkCGYY6yK)O#}<;2(X^0062r&HEQ8NuWcovSoQz!kaWZnPC&*UBt3>T4+Ixiw4*QzBWcTr15e4ZpD*LsqS_$($Py>~GgX^W@GRNyY2A|tPQnvB%> zX)@Bv&yWe>^9-3{C`-tso#NY6uCl9N*W(@B1Wim^g;$t`)$}40-r+7xL z{wf)-6f&=oks7|n`p77Fos87*buvY``Ws|=I>ldW2_pX{nJ!@7q>rpS%g9Kamyr?W zEi!rdyhTQ?{x%u8ueZraZ+VA|IKM+Cg!8*(DsUI?l94g^9vSIl?~$2_SG`ZBBb?t? z%m-wqf%$-pv_+mw8JIko6qFCilsd(?g)sGGD!|m!M_T72GX24PL`Ia4$;hnrF_|=8 z^$D4*Q+$1TLiv=8^wm%46M*@Q%owM5A5lIhBQgA(J`#;D$VjjIf{e^9Uy_mgitPw3 z#?`+fBiH(hK6PmKugMhQRbP{t59S*(!@zt)Mr!yi8M)JM$w-~QBa?y8cVs$3X&@u_ z)j&q>>w7Zd{5_fe@cDsE=oH@;DJVaZ>Eaa6WO465krC&gc&#eD>Sr=No#K5YKEIHW z$p1ngiRyAP68Yt1}Y?>?_^{Y ztRy4xSxH9X^9LDei$BQ7tNtXj1oioojNJPwGIAHI$VmU85J)s)J3=M$u^pkaajn>n zP`R(zj?fy!IkqEIt{&SFD*Z6FBUI`f+Yu_OOl(JJ5w0HJ5sGWYc7)2S;yXg|s@RUu zG?dtm(2P@jKa@Te+YveqOl(J}v`%bCXiqS)9id&I#CC+vaEiZ{)H${zbS9YCj!@}i zu^pk(Ua=jaa;?~oP^n>TN2pvYwj*>5t`*x6+8;`6N2v6K*p5)S)7XyCj(AmUM`!>g zwj)%WV>?2{C$=M0t`*x6Dokug=rB0Pc7#eaVmm_RzG6E?2J!8x`gRH6~v5h|?{+Yu^v8s8BL=h%)=sbOqKsQ9FOFoG3$RcuG7 zTs^iUbQ)?H+YwrWSH*UO%1DXr2>l#PY)9yP_{4UEN)2N>LepSkJ3^&D$99Cy1QXj4 zD%Xnb2$kLv+Y#CmuZrymmDY*v2u*>B?Fb#_6d$sVP+~hmKX-~}WL(5{gf<`=u^pl2 z-v3IDX>-!(YQc$7cHz;%1e34%kYGr(vfNaZ3T`UmBC}@n*S{ghv~jdwYnYOhV|tr^ zGRO4Jk$XJH^gc$hIi`mP1I*tFb4+jZ|4EMNhIo$Yeg1(Q)8;j+nfU$n9MdjM&RS6` zm{aD9)-=VO*dIM=wDq|s)-nHobyEfvZE1=*F+bQeSYrOYS5PILw{^3-ITq0+h+e*_Uh(l?iy6QUeG+6!rBD8+rEm)wJDKxQzGl8 zMAoBB#_2su4mr5r_C3vU^HWAl7&T(t|E;L}MXDyB#R&74pTDVto1r!^zZC9?jXCaT5~S^r%V zRkLVq?pAE_zxWiO?`_}JOl@|0+ra0KvQKzcaclhA=3lGK#|$o?RJ-W^>J*{Q%TAhZ z6>n$$Zok$jHkXwz>pjr?*CwjPF~tjmkD9eV2K zpC0}FoMu0nv_I!AvdnqW_ZdbHg7c&A7ewDLjJ{tKegF4ORQAr#9dc-3ACosQPdKB@ zpDtSK*(#c^XNx+Tg1_7E?ltxbL{6+|4inPe^o+NjIFLc zyYJGyBsJ2e=$tfR)ZaMF5;8J3<+T0}=Cp3zf_Z-$pQxI0TK_N4X?=^CT5L}157rKX zYV)4mE)xftM1XdMv2XI8GE?f*wk8#sSsga9x!2T}eMPFc$V_J~OlcOB3uWixXg)T7 ze&-hz_j0$$v=m`z(Hg-}Gfj>%*WGaMzn06j$h?U>EJ^^?l+)TIP>!B-Fc}|X5?Y#h zd3?nvlRJ6Bu_kfyxML?EZL)nb`fHCuQ>N_{&Ew;yjvqL26dtm6a#=LZLscxfW=|*o z_2in9CQh9&3Mq!hO-RT)WY?rUZ!4PC{I=NQ`0}g+r#0oYwokE>rwo~L^0?7aYEzRh zXvA(dT;`8aqmLO}HYrN=v}<9er>T3COfXO5_Q`zGUrCi!m=Nmk?H4^<2l&f=@&8)V z)tibo{fiGc?FW`79i^Fnb})Y)XMV2npU-I>pC#>FdT3FxDJFTQt!faYFHN`b51j5n zdr(oA=p(myiaj&AN3;B{=FfA@i;J7@W&U=U;ff;G&f$ZKHje)8W`6@jU-nUcM^grw z8QOl7XH)OBHGeCP{$)QGant;uqO~J!tKwDxJ}$nos8?`fY<$DqTSoUrv7LEtvR_Nh8^xt+tl$aCUEjT} z?qsgtENET4W{}I}%xmr2^!5M3(Y~(G5p1&KtfHg;;;m=1V2=e&8RnZZ%>TE{W=#(} z=5ZSje^K^Gc^n-5H%?~mF`uI#)B3n*INM&Ho>5 z{-6C>VEi#ADZ{)${Oj$T*21s<*E7tIu|G!rJHDDS%-am}O&P}jdoqkavnD@j{6{m4 zuVp@nn%dTW2=%vq#pjJn%*KXY%nQ#jpEmtZ8OEIMH~}BA#e`bmwg+e{E*Lf9A&pO^L?;%BLsh4PIhe?f+$;qWqU68kcP3P5H+4 zXMp%@_3wNRO#aZz%O4iEi$y?h_OFxa9>c|j}olfE@E277$|m!oBQe*G4`3$ zeL-pE{%QVf$~V4NEI!*s5krqakaiG-F@$1%V&uO{Bc^T42a5YJ#ezFUOmU2X;&uaC zrfbBk6Jwyne<;;0V%Ci@P~1=0t)h%*(dVZJmv$XGnvpS^ntPknPBh8XN#B*lr71GPN5H!t;huXL_S-^ ze4un86FP-HP_`x$^o@MBj`={@hD_)b`as#1Owcd#**4|_WjivVQ|JR_dosbkk_aB)6wip#mrMwzFRvv^ zKQcKm{m6*2FPUI)RG)pxh|-@-8ccsOqS)WqkgpKT05YQN=LnO37|ecTMA@HAfE?ia zlM&?rGHEaekP&4dnGnoCGNK$vCI{v~GNK$rCO9~X&p~8FDI=2xQ$|LVL1aQOgUE<7 zm`o1LU^1fMcX|LK2lx;&0hEL3lXeRG50pd5gii5{C_~BQzzpTJL^+g9fE?h5k`ZMX znKYPTWJDQGCImB_j3|eZ$$>eHj3|eb36KN)a5ADCK_(662r{A^NhSnyBpFeTB9jAi z6d6&DCKC*c`p?m1M9GjzgUOH)WdxZJ%m^}~l#|JUDJLV!NHPKPgpVX6$|y2vFr&zb zGMY>XW;7X5jv9kr8D)nGno)GNMc%lXDr!{TLKwBAMWbC_WSEBT5CCG?)r9qMSe` z1akrzQ6`beftf@`l*wcQ$N=POJCL|-uS!B{+&LSg9C7BGEN;0CHO(q0$HW^W-lgWaa zPDYe-$mGDBLq?Qy$>hPDOGcFQ$OI#z_?$;Zlo@1FU}lgJ<$N+}Fz1sIauJyof{{^t zt|24JOfo4jGs%c@Etxc!YsrXm9hnT6>&S?5J(&

    ~u*{ZXlBda|3-uxsgl`%#CD3 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 literal 0 HcmV?d00001 diff --git a/test/perf/query-perf.js b/test/perf/query-perf.js new file mode 100644 index 0000000..287f0d0 --- /dev/null +++ b/test/perf/query-perf.js @@ -0,0 +1,84 @@ +'use strict'; + +/* +* curl -O http://10.99.214.76:8990/perf-results-cubrid-9.2.3.0005-node-v4.5.0-node-cubrid-3.0.0-Wed-Sep-28-2016-19-42-38-GMT+0900--KST-.csv +* +* CUBRID_VERSION=9.2.3.0005 node memory-leak-check.js +* */ + +const fs = require('fs'); +const path = require('path'); + +if (!process.env.CUBRID_VERSION) { + console.error('"CUBRID_VERSION" environment variable must be defined to proceed.'); + process.exit(1); +} + +const CUBRID = require('../../'); +const version = require('../../package.json').version; +const date = (new Date).toString().replace(/[\s:\(\))]/g, '-'); + +const fd = fs.openSync(path.join(__dirname, + `perf-results-cubrid-${process.env.CUBRID_VERSION}-node-${process.version}-node-cubrid-${version}-${date}.csv` +), 'a'); + +const config = { + host: '10.99.214.76', + port: 33000, + user: 'public', + password: '', + database: 'demodb', +}; + +const client = new CUBRID.createCUBRIDConnection(config); +const testTime = 5 * 60 * 1000; +let counter = 0; +let lastCounter = 0; +let stop = false; + +function query(cb) { + if (stop) { + return cb(); + } + + process.stdout.write(`${++counter}\r`); + + client.query('SELECT * FROM game LIMIT 100', function (err, result, queryHandle) { + if (err) { + return cb(err); + } + + client.closeQuery(queryHandle, function (err) { + if (err) { + return cb(err); + } + + query(cb); + }); + }); +} + +const timer = setInterval(() => { + const memoryUsage = process.memoryUsage(); + const QPS = counter - lastCounter; + + lastCounter = counter; + + fs.write(fd, `${Date.now()},${QPS},${memoryUsage.rss},${memoryUsage.heapTotal},${memoryUsage.heapUsed}\r\n`, function () {}); +}, 1000); + +setTimeout(function () { + stop = true; +}, testTime); + +query(function (err) { + if (err) { + throw err; + } + + clearInterval(timer); + + fs.closeSync(fd); + + client.close(); +}); diff --git a/test/test.CUBRIDConnection.query.js b/test/test.CUBRIDConnection.query.js deleted file mode 100644 index 305ae1e..0000000 --- a/test/test.CUBRIDConnection.query.js +++ /dev/null @@ -1,409 +0,0 @@ -var async = require('async'), - test_Setup = require('./testSetup/test_Setup'); - -exports['single query(sql, callback)'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - test.expect(4); - - async.waterfall([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.query('SHOW TABLES', cb); - }, - function (result, queryHandle, cb) { - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == 10); - - client.closeQuery(queryHandle, cb); - } - ], function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length == 0); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; - -exports['multiple query(sql, callback) in the queue with closeQuery()'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - var arr = [1, 2, 3, 4, 5]; - - test.expect(arr.length * 4 + 1); - - async.each(arr, function (ix, done) { - client.query('SHOW TABLES', function (err, result, queryHandle) { - test.ok(!err); - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == 10); - - client.closeQuery(queryHandle, done); - }); - }, function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length == 0); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; - -exports['multiple query(sql, callback) in the queue without closeQuery()'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - var arr = [1, 2, 3, 4, 5]; - - test.expect(arr.length * 4 + 1); - - async.each(arr, function (ix, done) { - client.query('SHOW TABLES', function (err, result, queryHandle) { - test.ok(!err); - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == 10); - - done(); - }); - }, function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length > 0); - - client.close(function (err) { - test.done(err); - }); - } - }); - -// ActionQueue.enqueue([ -// function (cb) { -// client.connect(cb); -// }, -// function (cb) { -// function handleResults(err, results, queryHandle) { -// if (err) -// } -// -// for (var i = 0; i < max; ++i) { -// client.genericQuery('SHOW TABLES', handleResults); -// } -// }, -// function (results, queryHandle, cb) { -// console.log(++i, results); -// -// client.closeQuery(queryHandle, cb); - -//// client.genericQuery('SELECT 1; SELECT 1;', function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ['SELECT 1', 'SELECT 1']); -//// cb(); -//// } -//// }); -//// }, -//// function (cb) { -//// client.genericQuery(['SELECT 1;', 'SELECT 1;'], function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ['SELECT 1;', 'SELECT 1;']); -//// cb(); -//// } -//// }); -//// }, -//// function (cb) { -//// client.genericQuery(['SELECT 1', 'SELECT 1'], function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ['SELECT 1', 'SELECT 1']); -//// cb(); -//// } -//// }); -//// }, -// function (cb) { -// client.genericQuery(['SELECT 1'], function (err, results) { -// if (err) { -// cb(err); -// } else { -// console.log(results); -// test.deepEqual(results, ['SELECT 1']); -// cb(); -// } -// }); -//// }, -//// function (cb) { -//// client.genericQuery([' SELECT 1; '], function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ['SELECT 1;']); -//// cb(); -//// } -//// }); -//// }, -//// function (cb) { -//// client.genericQuery('SELECT * FROM game WHERE id = ?', [1], function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ['SELECT * FROM game WHERE id = 1']); -//// cb(); -//// } -//// }); -//// }, -//// function (cb) { -//// client.genericQuery('SELECT * FROM game WHERE id = ? AND name = ?', [1, 'soccer'], function (err, results) { -//// if (err) { -//// cb(err); -//// } else { -//// console.log(results); -//// test.deepEqual(results, ["SELECT * FROM game WHERE id = 1 AND name = 'soccer'"]); -//// cb(); -//// } -//// }); -// } -// ], function (err) { -// -// }); -}; - -exports['single query(sql, params, callback)'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - test.expect(4); - - async.waterfall([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.query('SELECT * FROM nation WHERE continent = ?', ['Asia'], cb); - }, - function (result, queryHandle, cb) { - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == 47); - - client.closeQuery(queryHandle, cb); - } - ], function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length == 0); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; - -exports['multiple query(sql, params, callback) in the queue without closeQuery()'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - var arr = [ - { - sql: "SHOW TABLES", - params: null, - rowsCount: 10 - }, - { - sql: "SELECT * FROM nation", - params: [], - rowsCount: 215 - }, - { - sql: "SELECT * FROM nation WHERE continent = ?", - params: ['Asia'], - rowsCount: 47 - }, - { - sql: "SELECT * FROM nation WHERE continent = ?", - params: 'Asia', - rowsCount: 47 - }, - { - sql: "SELECT * FROM history WHERE host_year = ?", - params: [2004], - rowsCount: 64 - }, - { - sql: "SELECT * FROM history WHERE host_year = ?", - params: 2004, - rowsCount: 64 - }, - { - sql: "SELECT * FROM history WHERE host_year = ?", - params: ['2004'], - rowsCount: 64 - }, - { - sql: "SELECT * FROM history WHERE host_year = ?", - params: '2004', - rowsCount: 64 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: ['08/28/2004'], - rowsCount: 311 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: '08/28/2004', - rowsCount: 311 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: [new Date('8/28/2004')], - rowsCount: 311 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: new Date('8/28/2004'), - rowsCount: 311 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: [new Date()], - rowsCount: 0 - }, - { - sql: "SELECT * FROM game WHERE game_date = ?", - params: new Date(), - rowsCount: 0 - } - ]; - - test.expect(arr.length * 4 + 1); - - async.each(arr, function (query, done) { - client.query(query.sql, query.params, function (err, result, queryHandle) { - test.ok(!err); - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == query.rowsCount); - - done(); - }); - }, function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length > 0); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; - -exports['single execute(sql, callback)'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - test.expect(1); - - async.waterfall([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.setAutoCommitMode(false, cb); - }, - function (cb) { - client.execute("DELETE FROM code WHERE s_name = 'ZZZZ'", cb); - } - ], function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length == 0); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; - -exports['multiple execute(sql, callback) in the queue'] = function (test) { - var client = test_Setup.createDefaultCUBRIDDemodbConnection(); - - var arr = [ - { - sql: "CREATE TABLE tbl_test(id INT)" - }, - { - sql: "INSERT INTO tbl_test (id) VALUES (1), (2), (3)" - }, - { - sql: "DROP TABLE tbl_test" - } - ]; - - test.expect(arr.length * 2 + 1 + 4 + 1); - - async.waterfall([ - function (cb) { - async.each(arr, function (query, done) { - client.execute(query.sql, function (err) { - test.ok(!err); - test.ok(client._queriesPacketList.length == 0); - - done(); - }); - }, cb); - }, - function (cb) { - test.ok(client._queriesPacketList.length == 0); - - client.query('SHOW TABLES', function (err, result, queryHandle) { - test.ok(!err); - test.ok(result); - test.ok(queryHandle > 0); - result = JSON.parse(result); - test.ok(result.RowsCount == 10); - - cb(); - }); - } - ], function (err) { - if (err) { - throw err; - } else { - test.ok(client._queriesPacketList.length == 1); - - client.close(function (err) { - test.done(err); - }); - } - }); -}; diff --git a/test/test.Helpers.js b/test/test.Helpers.js deleted file mode 100644 index 5dfbc21..0000000 --- a/test/test.Helpers.js +++ /dev/null @@ -1,115 +0,0 @@ -var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - Helpers = require('../src' + codeCoveragePath + '/utils/Helpers'); - -exports['validate input'] = function (test) { - test.expect(35); - - var buffer = new Buffer(5), - value1 = ['6', '7', '8']; - - buffer.write('12345'); - - var comb1 = Helpers._combineData(buffer, value1); - - test.equal(comb1.toString(), '12345678'); - - var value2 = new Buffer('678'), - comb2 = Helpers._combineData(buffer, value2); - - test.equal(comb2.toString(), '12345678'); - - var value3 = new Buffer(3); - value3[0] = '6'.charCodeAt(0); - value3[1] = '7'.charCodeAt(0); - value3[2] = '8'.charCodeAt(0); - - var comb3 = Helpers._combineData(buffer, value3); - - test.equal(comb3.toString(), '12345678'); - - var sql = 'INSERT INTO a VALUES(?, ?, ?)', - newsql = Helpers._sqlFormat(sql, ['1', 2, null], ["'", '', '']); - - test.equal(newsql, "INSERT INTO a VALUES('1', 2, NULL)"); - - test.equal(Helpers._escapeString('INSERT INTO "a VALUES(\b)'), 'INSERT INTO ""a VALUES(\\b)'); - - sql = 'stringWithDouble"Quote'; - - // Should not escape the double quote if the delimiter is a single quote. - test.equal(Helpers._escapeString(sql, "'"), sql); - - sql = "stringWithSingle'Quote"; - - // Should not escape the single quote if the delimiter is a double quote. - test.equal(Helpers._escapeString(sql, '"'), sql); - - sql = 'INSERT INTO a VALUES(?, ?, ?)'; - newsql = Helpers._sqlFormat(sql, ['stringWithDouble"Quote', 2, null]); - - test.equal(newsql, "INSERT INTO a VALUES('stringWithDouble\"Quote', 2, NULL)"); - - // Test Input validation functions - test.ok(Helpers._validateInputBoolean(null) === false); - test.ok(Helpers._validateInputBoolean(4) === false); - test.ok(Helpers._validateInputBoolean(3.14) === false); - test.ok(Helpers._validateInputBoolean('qwerty') === false); - test.ok(Helpers._validateInputBoolean(true) === true); - test.ok(Helpers._validateInputBoolean(1) === true); - - test.ok(Helpers._validateInputPositive(null) === false); - test.ok(Helpers._validateInputPositive(3.14) === true); - test.ok(Helpers._validateInputPositive(-1) === false); - test.ok(Helpers._validateInputPositive(0) === true); - test.ok(Helpers._validateInputPositive(14) === true); - - test.ok(Helpers._validateInputTimeout(null) === false); - test.ok(Helpers._validateInputTimeout(3.14) === false); - test.ok(Helpers._validateInputTimeout(-1) === false); - test.ok(Helpers._validateInputTimeout(0) === true); - test.ok(Helpers._validateInputTimeout(14) === true); - - test.ok(Helpers._validateInputString(null) === false); - test.ok(Helpers._validateInputString(3) === false); - test.ok(Helpers._validateInputString(true) === false); - test.ok(Helpers._validateInputString('') === false); - test.ok(Helpers._validateInputString('querty') === true); - - test.ok(Helpers._validateInputSQLString(null) === false); - test.ok(Helpers._validateInputSQLString(3) === false); - test.ok(Helpers._validateInputSQLString(true) === false); - test.ok(Helpers._validateInputSQLString('') === false); - test.ok(Helpers._validateInputSQLString('a') === false); - test.ok(Helpers._validateInputSQLString('qwerty') === true); - - test.done(); -}; - -//exports['_sqlFormat()'] = function (test) { -// var arr = [ -// { -// sql: 'INSERT INTO project (projectname, team, creator, description, log_limit, esm_code, sink_config, createtime, lastmodified) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', -// values: ['qqqesen', 'qa', 60136, '1234123412', 20000000, '123456', JSON.stringify({ -// type: "hdfs", -// server: [ -// { -// ip: "1.1.1.1", -// port: 2222 -// } -// ], -// user: "hadoop", -// path:"/data" -// }), '2013-09-25 17:00:52', '2013-09-25 17:00:52'], -// outputSQL: "INSERT INTO project (projectname, team, creator, description, log_limit, esm_code, sink_config, createtime, lastmodified) VALUES ('qqqesen', 'qa', 60136, '1234123412', 20000000, '123456', '{\"type\":\"hdfs\",\"server\":[{\"ip\":\"1.1.1.1\",\"port\":2222}],\"user\":\"hadoop\",\"path\":\"/data\"}', '2013-09-25 17:00:52', '2013-09-25 17:00:52')" -// } -// ]; -// -// test.expect(arr.length); -// -// async.each(arr, function(obj, done) { -// Helpers._sqlFormat(obj.sql, obj.values); -// }, function (err) { -// -// }); -// -//}; diff --git a/test/testCUBRID.createConnection.js b/test/testCUBRID.createConnection.js deleted file mode 100644 index c76ca7f..0000000 --- a/test/testCUBRID.createConnection.js +++ /dev/null @@ -1,57 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - config = require('./testSetup/test_Setup').config, - connectionCount = 4, - closedCount = 0; - - test.expect(0); - - function connect(client) { - client.connect(function (err) { - if (err) { - throw err; - } else { - client.getEngineVersion(function (err) { - if (err) { - throw err; - } else { - client.close(function (err) { - if (err) { - throw err; - } else { - if (++closedCount == connectionCount) { - test.done(); - } - } - }); - } - }); - } - }); - } - - // Create a connection by passing a list of parameters. - connect(new CUBRID.createCUBRIDConnection(config.host, config.port, config.user, config.password, config.database)); - // Create a connection by passing a object of parameters. - connect(new CUBRID.createCUBRIDConnection({ - host: config.host, - port: config.port, - user: config.user, - password: config.password, - database: config.database - })); - - // Now test the alias function. - // Create a connection by passing a list of parameters. - connect(new CUBRID.createConnection(config.host, config.port, config.user, config.password, config.database)); - // Create a connection by passing a object of parameters. - connect(new CUBRID.createConnection({ - host: config.host, - port: config.port, - user: config.user, - password: config.password, - database: config.database - })); -}; diff --git a/test/testCUBRIDConnection.end.js b/test/testCUBRIDConnection.end.js deleted file mode 100644 index d53926f..0000000 --- a/test/testCUBRIDConnection.end.js +++ /dev/null @@ -1,49 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - test.expect(2); - - client.connect(function (err) { - if (err) { - throw err; - } else { - client.query('SELECT * FROM nation', function (err, result, queryHandle) { - if (err) { - throw err; - } else { - var foundQueryHandle = false; - - for (var i = client._queriesPacketList.length - 1; i > -1; --i) { - if (client._queriesPacketList[i].queryHandle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - test.ok(foundQueryHandle === true); - - client.end(function (err) { - if (err) { - throw err; - } else { - foundQueryHandle = false; - - for (var i = client._queriesPacketList.length - 1; i > -1; --i) { - if (client._queriesPacketList[i].handle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - test.ok(foundQueryHandle === false); - - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/testCUBRIDConnection.getConnectionTimeout.js b/test/testCUBRIDConnection.getConnectionTimeout.js deleted file mode 100644 index cbbd3b7..0000000 --- a/test/testCUBRIDConnection.getConnectionTimeout.js +++ /dev/null @@ -1,15 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = new CUBRID.createCUBRIDConnection('www.google.com', 33000, 'public', '', 'demodb'); - - test.expect(2); - - test.equal(client.getConnectionTimeout(), 0, 'Initial connection timeout should be 0.'); - - client.setConnectionTimeout(2000); - test.equal(client.getConnectionTimeout(), 2000); - - test.done(); -}; diff --git a/test/testCUBRIDConnection.setConnectionTimeout.js b/test/testCUBRIDConnection.setConnectionTimeout.js deleted file mode 100644 index 6ea3caf..0000000 --- a/test/testCUBRIDConnection.setConnectionTimeout.js +++ /dev/null @@ -1,35 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - ErrorMessages = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/ErrorMessages'), - client = new CUBRID.createCUBRIDConnection('www.google.com', 33000, 'public', '', 'demodb'); - - test.expect(7); - - client.setConnectionTimeout(2000); - test.equal(client.getConnectionTimeout(), 2000, 'Setting timeout value bigger than 0, should set it to that value.'); - - client.setConnectionTimeout(0); - test.equal(client.getConnectionTimeout(), 0, 'Setting timeout value to 0, should set it to 0.'); - - client.setConnectionTimeout(-3000); - test.equal(client.getConnectionTimeout(), 0, 'Setting timeout value to less than 0, should set it to 0.'); - - client.setConnectionTimeout(2000); - test.equal(client.getConnectionTimeout(), 2000); - - client.setConnectionTimeout(2000); - test.equal(client.getConnectionTimeout(), 2000, 'Setting the same timeout value again and again should be successful.'); - - client.connect(function (err) { - if (err) { - test.equal(err.message, ErrorMessages.ERROR_CONNECTION_TIMEOUT); - test.ok(client.connectionOpened === false); - - test.done(); - } else { - throw 'We should not get here!'; - } - }); -}; diff --git a/test/testSetup/fix_lcov.js b/test/testSetup/fix_lcov.js deleted file mode 100644 index a68a83d..0000000 --- a/test/testSetup/fix_lcov.js +++ /dev/null @@ -1,17 +0,0 @@ -var data = ''; - -process.stdin.resume(); -process.stdin.setEncoding('utf8'); - -process.stdin.on('data', function(chunk) { - data += chunk; -}); - -process.stdin.on('end', function() { - if (data && data.length) { - var re = /\bSF:/g, - preparedData = data.replace(re, 'SF:src/'); - - console.log(preparedData); - } -}); diff --git a/test/testSetup/index.js b/test/testSetup/index.js new file mode 100644 index 0000000..c8f303a --- /dev/null +++ b/test/testSetup/index.js @@ -0,0 +1,38 @@ +'use strict'; + +const path = require('path'); +const rootDir = path.resolve(__dirname, '..', '..'); +const CUBRID = require(rootDir); +const ConsoleLogger = require(path.join(rootDir, 'src', 'ConsoleLogger')); + +const config = { + hosts: ['localhost'], + port: 33000, + user: 'public', + password: '', + database: 'demodb', + maxConnectionRetryCount: 1, + logger: new ConsoleLogger, +}; + +exports.config = config; + +function createDefaultCUBRIDDemodbConnection() { + return new CUBRID.createCUBRIDConnection(config); +} + +exports.cleanup = function (tableName) { + return function cleanup() { + let client = createDefaultCUBRIDDemodbConnection(); + + this.timeout(5000); + + return client + .execute(`DROP TABLE IF EXISTS ${tableName}`) + .then(() => { + return client.close(); + }); + }; +}; + +exports.createDefaultCUBRIDDemodbConnection = createDefaultCUBRIDDemodbConnection; diff --git a/test/testSetup/test_Setup.js b/test/testSetup/test_Setup.js deleted file mode 100644 index 0ec64b9..0000000 --- a/test/testSetup/test_Setup.js +++ /dev/null @@ -1,16 +0,0 @@ -// This will require the `index.js` file located at the root -// directory of this **node-cubrid** module. -var CUBRID = require('../../'), - config = { - host: 'localhost', - port: 33000, - user: 'public', - password: '', - database: 'demodb' - }; - -exports.config = config; - -exports.createDefaultCUBRIDDemodbConnection = function () { - return new CUBRID.createCUBRIDConnection(config.host, config.port, config.user, config.password, config.database); -}; diff --git a/test/testTransactionHardDisconnect.js b/test/testTransactionHardDisconnect.js deleted file mode 100644 index 03bdc15..0000000 --- a/test/testTransactionHardDisconnect.js +++ /dev/null @@ -1,64 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(3); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - Helpers.logInfo('Connected...'); - client.batchExecuteNoQuery(['drop table if exists test_tran', 'create table test_tran(id int)'], cb); - }, - function (cb) { - client.beginTransaction(cb); - }, - function (cb) { - client.batchExecuteNoQuery('insert into test_tran values(1)', cb); - }, - function (cb) { - // Close the connection without explicitly committing. - // It should rollback automatically. - client.close(cb); - }, - function (cb) { - test.ok(client.connectionOpened === false); - - client.connect(cb); - }, - function (cb) { - client.query('SELECT * FROM test_tran', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.TotalRowsCount(result) === 0); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - // Cleaup after each test. - client.execute('drop table test_tran', cb); - }, - function (cb) { - client.query('select count(*) from db_class where class_name = \'test_tran\'', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.RowsArray(result)[0][0] === 0); - - client.close(cb); - } - ], function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_ActionQueue.js b/test/test_ActionQueue.js deleted file mode 100644 index 918c6e9..0000000 --- a/test/test_ActionQueue.js +++ /dev/null @@ -1,52 +0,0 @@ -exports['test_ActionQueue'] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - ActionQueue = require('../src' + codeCoveragePath + '/utils/ActionQueue'), - count = 0, - startTime = (new Date()).getTime(); - - test.expect(2); - - ActionQueue.enqueue( - [ - function (callback) { - callback(null, '1'); - }, - function (data, callback) { - setTimeout(function () { - callback(null, data + ',2'); - }, 3000); - }, - function (data, callback) { - setTimeout(function () { - callback(null, data + ',3'); - }, 1000); - }, - function (data, callback) { - callback(null, data + ',4'); - } - ], - function (err, results) { - test.equal(results, '1,2,3,4'); - } - ); - - ActionQueue.while( - function () { - return count < 5; - }, - function (callback) { - count++; - setTimeout(callback, 1000); - }, - function (err) { - if (err) { - throw err.toString(); - } else { - var endTime = (new Date()).getTime(); - // 5 seconds have passed? - test.ok(endTime - startTime > 5 * 1000); - test.done(); - } - } - ); -}; diff --git a/test/test_Async.js b/test/test_Async.js deleted file mode 100644 index c5f3a74..0000000 --- a/test/test_Async.js +++ /dev/null @@ -1,94 +0,0 @@ -exports['test_Async'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - Async = require('async'), - returnedQueryHandle, fetchResult; - - test.expect(41); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - Async.waterfall([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.getEngineVersion(cb); - }, - function (engineVersion, cb) { - Helpers.logInfo('EngineVersion is: ' + engineVersion); - client.query('select * from game', cb); - }, - function (result, queryHandle, cb) { - test.equal(Result2Array.RowsArray(result).length, 235); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - test.equal(Result2Array.ColumnNamesArray(result).toString(), 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - - test.equal(Result2Array.ColumnTypesArray(result).toString(), 'Int,Int,Int,Int,Char,Char,Date'); - - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - - var arr = Result2Array.RowsArray(result); - - test.equal(arr.length, 235); - test.equal(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T'), true); - test.equal(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T'), true); - - for (var j = 0; j < 1;++j) { - Helpers.logInfo(arr[j].toString()); - } - - returnedQueryHandle = queryHandle; - - Async.whilst( - function () { - return fetchResult !== null; - }, - function (callback) { - client.fetch(returnedQueryHandle, function (err, result) { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback(err); - } - ); - }, - function (err) { - if (err) { - throw err.message; - } else { - cb(err); - } - } - ); - }, - function (cb) { - client.closeQuery(returnedQueryHandle, cb); - }, - function (queryHandle, cb) { - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_AutoCommitMode.js b/test/test_AutoCommitMode.js deleted file mode 100644 index 0077d14..0000000 --- a/test/test_AutoCommitMode.js +++ /dev/null @@ -1,76 +0,0 @@ -exports['test_AutoCommitMode'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - Helpers.logInfo(module.filename.toString() + ' started...'); - - test.expect(1); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection connected'); - - client.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.setAutoCommitMode(false, function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.commit(function (err) { - if (err) { - errorHandler(err); - } else { - client.query('select * from node_test', function (err, result) { - if (err) { - errorHandler(err); - } else { - test.equal(Result2Array.TotalRowsCount(result), 1, 'Didn\'t commit!!!'); - - client.setAutoCommitMode(true, function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - test.done(); - Helpers.logInfo('Test passed.'); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BadConnect.js b/test/test_BadConnect.js deleted file mode 100644 index dbe28bb..0000000 --- a/test/test_BadConnect.js +++ /dev/null @@ -1,29 +0,0 @@ -exports['test_BadConnect'] = function (test) { - var CUBRID = require('../'), - config = require('./testSetup/test_Setup').config, - client = CUBRID.createCUBRIDConnection(config.host, config.port, config.user, 'xyz', 'demodb_xyz'), - Helpers = CUBRID.Helpers; - - Helpers.logInfo(module.filename.toString() + ' started...'); - - test.expect(1); - - client.connect(function (err) { - if (err) { - test.ok([ - // This is the correct message, CUBRID should return when a database is not found. - "-677:Failed to connect to database server, 'demodb_xyz', on the following host(s): localhost:localhost", - // When CUBRID is installed and started as a root, the following error is returned. - // This may be a CUBRID bug or a spec. Need to keep these until we figure out - // whether this is a bug or not. - '-985:The hostname on the database connection string should be specified when multihost is set in "databases.txt".', - // On CUBRID 9.1 and 8.4.1 the following error is returned. - "-985:No error message available."].indexOf(err.message) > -1); - Helpers.logInfo('Test passed.'); - test.done(); - } else { - throw 'We should not get here!'; - } - }); -}; - diff --git a/test/test_BadPort.js b/test/test_BadPort.js deleted file mode 100644 index 67c0a40..0000000 --- a/test/test_BadPort.js +++ /dev/null @@ -1,20 +0,0 @@ -exports['test_BadPort'] = function (test) { - var CUBRID = require('../'), - config = require('./testSetup/test_Setup').config, - client = CUBRID.createCUBRIDConnection(config.host, 80, config.user, config.password, config.database), - Helpers = CUBRID.Helpers; - - test.expect(1); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - test.ok(['connect ECONNREFUSED', 'connect ETIMEDOUT', 'read ECONNRESET'].indexOf(err.message) > -1); - Helpers.logInfo('Test passed.'); - test.done(); - } else { - throw 'We should not get here!'; - } - }); -}; diff --git a/test/test_BadSQLSyntax.js b/test/test_BadSQLSyntax.js deleted file mode 100644 index b10c8aa..0000000 --- a/test/test_BadSQLSyntax.js +++ /dev/null @@ -1,42 +0,0 @@ -exports['test_BadSQLSyntax'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - testSetup = require('./testSetup/test_Setup'), - client = testSetup.createDefaultCUBRIDDemodbConnection(); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - test.expect(1); - - function errorHandler(err) { - Helpers.logError(err.message); - test.equal(err.message, '-493:Syntax: Unknown class "game_xyz". select * from game_xyz'); - } - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from game_xyz'); - - client.query('select * from game_xyz', function (err) { - if (err) { - errorHandler(err); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } else { - throw 'We should never get here!'; - } - }); - } - }); -}; diff --git a/test/test_BasicBatchExecute.js b/test/test_BasicBatchExecute.js deleted file mode 100644 index 9648eda..0000000 --- a/test/test_BasicBatchExecute.js +++ /dev/null @@ -1,49 +0,0 @@ -exports['test_BasicBatchExecute'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - function errorHandler(err) { - throw err.message; - } - - Helpers.logInfo(module.filename.toString() + ' started...'); - test.expect(0); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); -}; - - diff --git a/test/test_BasicBatchExecute_ImplicitConnect.js b/test/test_BasicBatchExecute_ImplicitConnect.js deleted file mode 100644 index 25bb651..0000000 --- a/test/test_BasicBatchExecute_ImplicitConnect.js +++ /dev/null @@ -1,42 +0,0 @@ -exports['test_BasiBatchExecute_ImplicitConnect'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - function errorHandler(err) { - throw err.message; - } - - Helpers.logInfo(module.filename.toString() + ' started...'); - test.expect(0); - - Helpers.logInfo('Connected.'); - client.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/test/test_BasicConnect.js b/test/test_BasicConnect.js deleted file mode 100644 index 5d721a0..0000000 --- a/test/test_BasicConnect.js +++ /dev/null @@ -1,37 +0,0 @@ -exports['test_BasicConnect'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - client.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicEvents.js b/test/test_BasicEvents.js deleted file mode 100644 index 3b5a9f7..0000000 --- a/test/test_BasicEvents.js +++ /dev/null @@ -1,29 +0,0 @@ -exports['test_BasicEvents'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - Helpers.logInfo('Unit test ' + module.filename.toString() + ' started...'); - test.expect(0); - - client.connect(function () { - client.close(function () { - }); - }); - - client.on(client.EVENT_ERROR, function () { - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; - diff --git a/test/test_BasicEvents_Error.js b/test/test_BasicEvents_Error.js deleted file mode 100644 index e9a7ba8..0000000 --- a/test/test_BasicEvents_Error.js +++ /dev/null @@ -1,33 +0,0 @@ -exports['test_BasicEvents_Error'] = function (test) { - var CUBRID = require('../'), - config = require('./testSetup/test_Setup').config, - client = CUBRID.createCUBRIDConnection(config.host, config.port, 'unknown_user', 'xyz', config.database), - Helpers = CUBRID.Helpers; - - test.expect(1); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (!err) { - client.close(function () { - }); - } - }); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - test.ok(err.message === '-165:User "unknown_user" is invalid.'); - Helpers.logInfo('Test passed.'); - test.done(); - }); - - client.on(client.EVENT_CONNECTED, function () { - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - throw 'We should not get here!'; - }); -}; - diff --git a/test/test_BasicEvents_Error_2.js b/test/test_BasicEvents_Error_2.js deleted file mode 100644 index e6ffeb5..0000000 --- a/test/test_BasicEvents_Error_2.js +++ /dev/null @@ -1,27 +0,0 @@ -exports['test_BasicEvents_Error_2'] = function (test) { - var CUBRID = require('../'), - config = require('./testSetup/test_Setup').config, - client = CUBRID.createCUBRIDConnection(config.host, config.port, 'unknown_user', 'xyz', config.database), - Helpers = CUBRID.Helpers; - - test.expect(1); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - test.ok(err.message === '-165:User "unknown_user" is invalid.'); - Helpers.logInfo('Test passed.'); - test.done(); - }); - - client.on(client.EVENT_CONNECTED, function () { - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - throw 'We should not get here!'; - }); -}; diff --git a/test/test_BasicExecute.js b/test/test_BasicExecute.js deleted file mode 100644 index 1a7a369..0000000 --- a/test/test_BasicExecute.js +++ /dev/null @@ -1,54 +0,0 @@ -exports['test_BasicExecute'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.execute('DROP TABLE IF EXISTS node_test', function (err) { - if (err) { - errorHandler(err); - } else { - client.execute('CREATE TABLE node_test(id INT)', function (err) { - if (err) { - errorHandler(err); - } else { - client.execute('INSERT INTO node_test VALUES(1)', function (err) { - if (err) { - errorHandler(err); - } else { - client.execute('DROP TABLE node_test', function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicExecute_2.js b/test/test_BasicExecute_2.js deleted file mode 100644 index 045ecf7..0000000 --- a/test/test_BasicExecute_2.js +++ /dev/null @@ -1,43 +0,0 @@ -exports['test_BasicExecute_2'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - var sqlsArr = []; - - Helpers.logInfo('Connected.'); - - sqlsArr.push('DROP TABLE IF EXISTS node_test'); - sqlsArr.push('CREATE TABLE node_test(id INT)'); - sqlsArr.push('INSERT INTO node_test VALUES(2)'); - sqlsArr.push('DROP TABLE IF EXISTS node_test'); - - client.batchExecuteNoQuery(sqlsArr, function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicExtendedSelect.js b/test/test_BasicExtendedSelect.js deleted file mode 100644 index 000716e..0000000 --- a/test/test_BasicExtendedSelect.js +++ /dev/null @@ -1,85 +0,0 @@ -exports['test_BasicExtendedSelect'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(9); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - Helpers.logInfo('Querying: select * from game'); - client.query('select * from game', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.equal(Result2Array.TotalRowsCount(result), 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - test.equal(Result2Array.ColumnNamesArray(result).toString(), 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - test.equal(Result2Array.ColumnTypesArray(result).toString(), 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - test.equal(arr.length, 235); - test.equal(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T'), true); - test.equal(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T'), true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - client.fetch(queryHandle, function (err, result) { - if (err) { - errorHandler(err); - } else { - if (result) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - test.equal(arr.length, 241); - test.equal(arr[0].toString().startsWith('2004,20317,14375,30124,GRE,S,2004-08-26T'), true); - test.equal(arr[arr.length - 1].toString().startsWith('2004,20060,14340,30125,JPN,B,2004-08-25T'), true); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/test/test_BasicExtendedSelect_Sequence.js b/test/test_BasicExtendedSelect_Sequence.js deleted file mode 100644 index 7f604c1..0000000 --- a/test/test_BasicExtendedSelect_Sequence.js +++ /dev/null @@ -1,58 +0,0 @@ -exports['test_BasicExtendedSelect_Sequence'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(8); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.getEngineVersion(cb); - }, - function (engineVersion, cb) { - Helpers.logInfo('Engine version is: ' + engineVersion); - client.query('select * from code', cb); - }, - function (result, queryHandle, cb) { - test.equal(Result2Array.TotalRowsCount(result), 6); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - - var arr = Result2Array.RowsArray(result); - - test.equal(arr.length, 6); - test.equal(arr[0].toString(), 'X,Mixed'); - test.equal(arr[1].toString(), 'W,Woman'); - test.equal(arr[2].toString(), 'M,Man'); - test.equal(arr[3].toString(), 'B,Bronze'); - test.equal(arr[4].toString(), 'S,Silver'); - test.equal(arr[5].toString(), 'G,Gold'); - - for (var k = 0; k < arr.length; k++) { - Helpers.logInfo(arr[k].toString()); - } - - client.closeQuery(queryHandle, cb); - - Helpers.logInfo('Query closed.'); - }, - function (queryHandle, cb) { - client.close(cb); - Helpers.logInfo('Connection closed.'); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_BasicMultiFetch.js b/test/test_BasicMultiFetch.js deleted file mode 100644 index 996da64..0000000 --- a/test/test_BasicMultiFetch.js +++ /dev/null @@ -1,100 +0,0 @@ -exports['test_BasicMultiFetch'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - fetchResult; - - test.expect(41); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - var errHandler = function (err) { - Helpers.logInfo('Error - ' + err.message); - throw err.message; - }; - - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.getEngineVersion(function (err, result) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - client.query('select * from game', function (err, result, queryHandle) { - if (err) { - errHandler(err); - } else { - test.equal(Result2Array.TotalRowsCount(result), 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - test.equal(Result2Array.ColumnNamesArray(result).toString(), 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - test.equal(Result2Array.ColumnTypesArray(result).toString(), 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - test.equal(arr.length, 235); - test.equal(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T'), true); - test.equal(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T'), true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - - ActionQueue.while( - function () { - return fetchResult !== null; - }, - function (callback) { - client.fetch(queryHandle, function (err, result) { - if (err) { - errHandler(err); - } else { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - }); - }, - function (err) { - if (err) { - errHandler(err); - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.close(function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - } - ); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicMultiFetch_Sequence.js b/test/test_BasicMultiFetch_Sequence.js deleted file mode 100644 index 9e35a50..0000000 --- a/test/test_BasicMultiFetch_Sequence.js +++ /dev/null @@ -1,83 +0,0 @@ -exports['test_BasicMultiFetch_Sequence'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - returnedQueryHandle, fetchResult; - - test.expect(41); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.getEngineVersion(cb); - }, - function (engineVersion, cb) { - Helpers.logInfo('EngineVersion is: ' + engineVersion); - client.query('select * from game', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.RowsArray(result).length === 235); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - test.ok(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - test.ok(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 235); - test.ok(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - test.ok(arr[arr.length - 1].toString().startsWith('2004,20317,14457,30124,ITA,G,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - returnedQueryHandle = queryHandle; - ActionQueue.while( - function () { - return fetchResult !== null; - }, - function (callback) { - client.fetch(returnedQueryHandle, function (err, result) { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 241 || arr.length === 224); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - ); - }, - function (err) { - if (err) { - throw err.message; - } else { - cb.call(err); - } - } - ); - }, - function (cb) { - client.closeQuery(returnedQueryHandle, cb); - }, - function (queryHandle, cb) { - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_BasicMultifetchOldProtocol.js b/test/test_BasicMultifetchOldProtocol.js deleted file mode 100644 index 1dba2a7..0000000 --- a/test/test_BasicMultifetchOldProtocol.js +++ /dev/null @@ -1,101 +0,0 @@ -exports['test_BasicMultifetchOldProtocol'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - fetchResult; - - test.expect(41); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - var errHandler = function (err) { - Helpers.logInfo('Error - ' + err.message); - throw err.message; - }; - - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.getEngineVersion(function (err, result) { - if (err) { - errHandler(err); - } else { - client.setEnforceOldQueryProtocol(true); - Helpers.logInfo('CUBRID engine version: ' + result); - client.query('select * from game', function (err, result, queryHandle) { - if (err) { - errHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 8653); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - test.ok(Result2Array.ColumnNamesArray(result).toString() === 'host_year,event_code,athlete_code,stadium_code,nation_code,medal,game_date'); - Helpers.logInfo('Query result column names: ' + Result2Array.ColumnNamesArray(result)); - test.ok(Result2Array.ColumnTypesArray(result).toString() === 'Int,Int,Int,Int,Char,Char,Date'); - Helpers.logInfo('Query result column data types: ' + Result2Array.ColumnTypesArray(result)); - Helpers.logInfo('Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 241); - test.ok(arr[0].toString().startsWith('2004,20021,14345,30116,NGR,B,2004-08-28T') === true); - test.ok(arr[arr.length - 1].toString().startsWith('2004,20317,12906,30124,USA,B,2004-08-26T') === true); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - - ActionQueue.while( - function () { - return fetchResult !== null; - }, - function (callback) { - client.fetch(queryHandle, function (err, result) { - if (err) { - errHandler(err); - } else { - if (result !== null) { - Helpers.logInfo('Fetch results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 241 || arr.length === 218); - for (var k = 0; k < 1; k++) { - Helpers.logInfo(arr[k].toString()); - } - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - fetchResult = result; - callback.call(err); - } - }); - }, - function (err) { - if (err) { - errHandler(err); - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - errHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.close(function (err) { - if (err) { - errHandler(err); - } else { - client.setEnforceOldQueryProtocol(false); - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - } - ); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicQueriesQueue.js b/test/test_BasicQueriesQueue.js deleted file mode 100644 index 0470ebf..0000000 --- a/test/test_BasicQueriesQueue.js +++ /dev/null @@ -1,67 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - SQL_1 = 'SELECT COUNT(*) FROM [code]', - SQL_2 = 'SELECT * FROM [code] WHERE s_name = \'X\'', - SQL_3 = 'SELECT COUNT(*) FROM [code] WHERE f_name LIKE \'M%\''; - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - Helpers.logInfo('Executing: ' + SQL_1); - - client.addQuery(SQL_1, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result: ' + arr); - test.ok(arr[0][0].toString() === '6'); - } - }); - - Helpers.logInfo('Executing: ' + SQL_2); - - client.addQuery(SQL_2, function (err, result) { - if (err) { - throw err; - } else { - Helpers.logInfo('Result: ' + Result2Array.RowsArray(result)); - test.ok(Result2Array.RowsArray(result).toString() === 'X,Mixed'); - } - }); - - Helpers.logInfo('Executing: ' + SQL_3); - - client.addQuery(SQL_3, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - - Helpers.logInfo('Result: ' + Result2Array.RowsArray(result)); - - test.ok(arr[0][0].toString() === '2'); - - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicQueriesQueue_ImplicitConnect.js b/test/test_BasicQueriesQueue_ImplicitConnect.js deleted file mode 100644 index afa5296..0000000 --- a/test/test_BasicQueriesQueue_ImplicitConnect.js +++ /dev/null @@ -1,56 +0,0 @@ -exports['test_BasicQueriesQueue_ImplicitConnect'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - SQL_1 = 'SELECT COUNT(*) FROM [code]', - SQL_2 = 'SELECT * FROM [code] WHERE s_name = \'X\'', - SQL_3 = 'SELECT COUNT(*) FROM [code] WHERE f_name LIKE \'M%\''; - - function errorHandler(err) { - throw err.message; - } - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - Helpers.logInfo('Executing [1]: ' + SQL_1); - client.addQuery(SQL_1, function (err, result) { - if (err) { - errorHandler(err); - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result [1]: ' + Result2Array.RowsArray(result)); - test.ok(arr[0][0].toString() === '6'); - } - }); - - Helpers.logInfo('Executing [2]: ' + SQL_2); - client.addQuery(SQL_2, function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Result [2]: ' + Result2Array.RowsArray(result)); - test.ok(Result2Array.RowsArray(result).toString() === 'X,Mixed'); - } - }); - - Helpers.logInfo('Executing [3]: ' + SQL_3); - client.addQuery(SQL_3, function (err, result) { - if (err) { - errorHandler(err); - } else { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Result [3]: ' + Result2Array.RowsArray(result)); - test.ok(arr[0][0].toString() === '2'); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); -}; diff --git a/test/test_BasicSelect.js b/test/test_BasicSelect.js deleted file mode 100644 index c3a9fa1..0000000 --- a/test/test_BasicSelect.js +++ /dev/null @@ -1,53 +0,0 @@ -exports['test_BasicSelect'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - test.ok(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_BasicSelect_Events.js b/test/test_BasicSelect_Events.js deleted file mode 100644 index 7c75f2d..0000000 --- a/test/test_BasicSelect_Events.js +++ /dev/null @@ -1,75 +0,0 @@ -exports['test_BasicSelect_Events'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - -// TODO: avoid global variables. - global.savedQueryHandle = null; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from game'); - client.query('select * from game', function () { - }); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - global.savedQueryHandle = queryHandle; // Save handle - needed for further fetch operations - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('Fetching more rows...'); - client.fetch(global.savedQueryHandle, function () { - }); - }); - - client.on(client.EVENT_FETCH_DATA_AVAILABLE, function (result) { - Helpers.logInfo('*** Fetch data received.'); - Helpers.logInfo('*** Current fetch of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - // Continue to fetch... - Helpers.logInfo('...'); - Helpers.logInfo('...fetching more rows...'); - Helpers.logInfo('...'); - setTimeout(function () { - client.fetch(global.savedQueryHandle, function () { - }); - }, Math.random() * 500); // Simulate different responses time for each fetch - }); - - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function () { - Helpers.logInfo('No more data to receive.'); - Helpers.logInfo('Closing query...'); - client.closeQuery(global.savedQueryHandle, function () { - }); - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Query closed.'); - global.savedQueryHandle = null; - Helpers.logInfo('Closing connection...'); - - client.close(function () { - }); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; - diff --git a/test/test_BasicSelect_ImplicitConnect.js b/test/test_BasicSelect_ImplicitConnect.js deleted file mode 100644 index 6aab686..0000000 --- a/test/test_BasicSelect_ImplicitConnect.js +++ /dev/null @@ -1,54 +0,0 @@ -exports['test_BasicSelect_ImplicitConnect'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function errorHandler(err) { - throw err.message; - } - - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - test.ok(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - - for (var j = 0; j < 1; ++j) { - Helpers.logInfo(arr[j].toString()); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; - - diff --git a/test/test_Basic_QueriesQueue_Events.js b/test/test_Basic_QueriesQueue_Events.js deleted file mode 100644 index 8df572c..0000000 --- a/test/test_Basic_QueriesQueue_Events.js +++ /dev/null @@ -1,70 +0,0 @@ -exports['test_Basic_QueriesQueue_Events'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - SQL_A = 'SELECT * FROM event', - SQL_B = 'SELECT * FROM record'; - - test.expect(4); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw err; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - client.addQuery(SQL_A, null); - client.addQuery(SQL_B, null); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle, sql) { - Helpers.logInfo('[' + sql + '] executed - query handle is: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Query result first row: ' + arr[0]); - switch (sql) { - case SQL_A: - test.ok(Result2Array.TotalRowsCount(result) === 422); - test.ok(arr[0].toString() === '20421,Wrestling,Greco-Roman 97kg,M,1'); - break; - case SQL_B: - test.ok(Result2Array.TotalRowsCount(result) === 2000); - test.ok(arr[0].toString() === '2000,20243,14214,G,681.1,Score'); - } - Helpers.logInfo('...let\'s fetch more data...'); - client.fetch(queryHandle); - }); - - client.on(client.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - client.closeQuery(queryHandle, null); - }); - - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('There is no more data to fetch for query with handle: ' + queryHandle); - client.closeQuery(queryHandle, null); - }); - - client.on(client.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo('Query with handle: ' + queryHandle + ' was closed!'); - if (client.queriesQueueIsEmpty()) { - client.close(); - } else { - Helpers.logInfo('(...it\'s not the right time to close the connection! - there are some queries still pending execution...)'); - } - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; diff --git a/test/test_Basic_QueriesQueue_Events_Error.js b/test/test_Basic_QueriesQueue_Events_Error.js deleted file mode 100644 index e71e342..0000000 --- a/test/test_Basic_QueriesQueue_Events_Error.js +++ /dev/null @@ -1,33 +0,0 @@ -exports['test_Basic_QueriesQueue_Events_Error'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - SQL_A = 'SELECT * from x_code'; - - test.expect(1); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - test.ok(err.message === '-493:Syntax: Unknown class "x_code". select * from x_code'); - client.close(); - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - client.addQuery(SQL_A, null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - setTimeout(function () { - client.removeAllListeners(); - test.done(); - }, 1000); - }); -}; diff --git a/test/test_BatchExecuteNoQueryPacket.js b/test/test_BatchExecuteNoQueryPacket.js deleted file mode 100644 index a79efb8..0000000 --- a/test/test_BatchExecuteNoQueryPacket.js +++ /dev/null @@ -1,44 +0,0 @@ -exports['test_BatchExecuteNoQueryPacket'] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - PacketReader = require('../src' + codeCoveragePath + '/packets/PacketReader'), - PacketWriter = require('../src' + codeCoveragePath + '/packets/PacketWriter'), - BatchExecuteNoQueryPacket = require('../src' + codeCoveragePath + '/packets/BatchExecuteNoQueryPacket'), - CAS = require('../src' + codeCoveragePath + '/constants/CASConstants'), - packetReader = new PacketReader(), - batchExecuteNoQueryPacket = new BatchExecuteNoQueryPacket({ - SQLs: ['create table t1(id int)', 'drop table t1'], - casInfo: [0, 255, 255, 255], - autoCommitMode: 1, - dbVersion: '8.4.1' - }), - packetWriter = new PacketWriter(batchExecuteNoQueryPacket.getBufferLength()); - - test.expect(16); - - batchExecuteNoQueryPacket.write(packetWriter); - test.equal(packetWriter._toBuffer()[3], 52); // Total length - - test.equal(packetWriter._toBuffer()[4], 0); // CasInfo - test.equal(packetWriter._toBuffer()[5], 255); // CasInfo - test.equal(packetWriter._toBuffer()[6], 255); // CasInfo - test.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - test.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_EXECUTE_BATCH); - test.equal(packetWriter._toBuffer()[13], 1); - test.equal(packetWriter._toBuffer().slice(18, 41).toString(), 'create table t1(id int)'); - test.equal(packetWriter._toBuffer().slice(41 + 1 + 4, 59).toString(), 'drop table t1'); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - batchExecuteNoQueryPacket.parse(packetReader); - - test.equal(batchExecuteNoQueryPacket.casInfo[0], 0); // CasInfo - test.equal(batchExecuteNoQueryPacket.casInfo[1], 255); // CasInfo - test.equal(batchExecuteNoQueryPacket.casInfo[2], 255); // CasInfo - test.equal(batchExecuteNoQueryPacket.casInfo[3], 255); // CasInfo - - test.equal(batchExecuteNoQueryPacket.responseCode, 0); - - test.equal(batchExecuteNoQueryPacket.errorCode, 0); - test.equal(batchExecuteNoQueryPacket.errorMsg, ''); - test.done(); -}; diff --git a/test/test_BatchExecuteVariant.js b/test/test_BatchExecuteVariant.js deleted file mode 100644 index 161303d..0000000 --- a/test/test_BatchExecuteVariant.js +++ /dev/null @@ -1,54 +0,0 @@ -exports['test_BatchExecuteVariant'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function errorHandler(err) { - throw err.message; - } - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.batchExecuteNoQuery('drop table if exists node_test', function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery('create table node_test(id int)', function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery('insert into node_test values(1)', function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery('drop table node_test', function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/test/test_BatchExecute_Error.js b/test/test_BatchExecute_Error.js deleted file mode 100644 index d04eece..0000000 --- a/test/test_BatchExecute_Error.js +++ /dev/null @@ -1,60 +0,0 @@ -exports['test_BatchExecute_Error'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - throw err; - } else { - if (client.getEngineVersion().startsWith('8.4.1')) { - test.expect(2); - } else { - test.expect(4); - } - - Helpers.logInfo('Connected.'); - - var sqlsArr = []; - - sqlsArr.push('drop table if exists node_test'); - sqlsArr.push('create table node_test(id xyz)'); - sqlsArr.push('create table node_test(id abc)'); - - client.batchExecuteNoQuery(sqlsArr, function (err) { - // There should be an error message. - test.ok(err); - - // Driver version >= 8.4.3 return an array of errors. - if (err instanceof Array) { - test.ok(err.length == 2); - - // CUBRID 8.4.x - if (client.getEngineVersion().startsWith('8.4')) { - test.ok(err[0].message === '-494:Semantic: xyz is not defined. create class node_test ( id xyz ) '); - test.ok(err[1].message === '-494:Semantic: abc is not defined. create class node_test ( id abc ) '); - } else { - // CUBRID 9.0+ - test.ok(err[0].message === "-494:Semantic: before ' xyz)'\nxyz is not defined. create class node_test ( id xyz ) "); - test.ok(err[1].message === "-494:Semantic: before ' abc)'\nabc is not defined. create class node_test ( id abc ) "); - } - } else { - // Driver version in 8.4.1 returns a single error. - test.ok(err.message === '-494:Semantic: xyz is not defined. create class node_test ( id xyz ) '); - } - - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - }); - } - }); -}; diff --git a/test/test_BigString.js b/test/test_BigString.js deleted file mode 100644 index ce9d19b..0000000 --- a/test/test_BigString.js +++ /dev/null @@ -1,72 +0,0 @@ -exports['test_BigString'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Creating the test table...'); - client.batchExecuteNoQuery( - [ - 'drop table if exists test_big_string', - 'CREATE TABLE test_big_string(str char(1000000))', - 'INSERT INTO test_big_string VALUES(\'QWERTY\')' - ], - function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Querying: select * from test_big_string'); - client.query('select * from test_big_string', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 1); - test.ok(arr[0][0].startsWith('QWERTY') === true); - test.ok(arr[0][0].length === 1000000); - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.batchExecuteNoQuery('drop table test_big_string', function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - } - ); - } - }); -}; - diff --git a/test/test_Blob.js b/test/test_Blob.js deleted file mode 100644 index 4ed9554..0000000 --- a/test/test_Blob.js +++ /dev/null @@ -1,61 +0,0 @@ -exports['test_Blob'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - var data = ''; - - for (var i = 0; i < 5120; i++) { - data += '11111111'; - } - - client.batchExecuteNoQuery(['drop table if exists test_lob', - 'create table test_lob(bl BLOB)', - 'insert into test_lob values(BIT_TO_BLOB(B\'' + data + '\'))'], cb); - }, - function (cb) { - Helpers.logInfo('Create table and insert done.'); - client.query('select * from test_lob', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Query executed.'); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - client.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - function (buff, read_length, cb) { - Helpers.logInfo('LOB Read done.'); - Helpers.logInfo(read_length); - Helpers.logInfo(buff.length); - test.ok(read_length === 5120); - test.ok(buff.length === 5120); - for (var i = 0; i < read_length; i++) { - test.ok(buff[i] === 255); - } - client.batchExecuteNoQuery(['DROP TABLE test_lob'], cb); - }, - function (cb) { - Helpers.logInfo('Drop table done.'); - client.close(cb); - } - ], function (err) { - if (err) { - Helpers.logError(err); - client.close(function () { - test.done(); - }); - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_Blob_Insert.js b/test/test_Blob_Insert.js deleted file mode 100644 index aee2d0e..0000000 --- a/test/test_Blob_Insert.js +++ /dev/null @@ -1,68 +0,0 @@ -exports['test_Blob_Insert'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(2*client._LOB_MAX_IO_LENGTH + 1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.batchExecuteNoQuery(['drop table if exists test_blob', - 'create table test_blob(id int, bl blob)'], cb); - }, - function (cb) { - Helpers.logInfo('Create table done.'); - client.lobNew(client.LOB_TYPE_BLOB, cb); - }, - function (lobObject, cb) { - Helpers.logInfo('LobNew done.'); - Helpers.logInfo('Number of bytes to write: ' + 2 * client._LOB_MAX_IO_LENGTH); - var data = new Buffer(2 * client._LOB_MAX_IO_LENGTH); - for (var i = 0; i < 2 * client._LOB_MAX_IO_LENGTH; i++) { - data[i] = i; - } - client.lobWrite(lobObject, 1, data, cb); - }, - function (lobObject, written_length, cb) { - Helpers.logInfo('LobWrite done.'); - client.executeWithTypedParams('insert into test_blob values(1, ?)', [lobObject], ['blob'], cb); - }, - function (cb) { - Helpers.logInfo('Querying: select bl test_blob.'); - client.query('select bl from test_blob', cb); - }, - function (result, queryhandle, cb) { - Helpers.logInfo("Query executed."); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - client.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - function (buf, readLength, cb) { - Helpers.logInfo("LobRead done.."); - Helpers.logInfo('Number of bytes read: ' + readLength); - test.ok(readLength === 2 * client._LOB_MAX_IO_LENGTH); - for (var i = 0; i < buf.length; i++) { - test.ok(buf[i] === i % 256); - } - client.batchExecuteNoQuery(['DROP TABLE test_blob'], cb); - }, - function (cb) { - Helpers.logInfo('Drop table done.'); - client.close(cb); - } - ], - function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_Cache.js b/test/test_Cache.js deleted file mode 100644 index 98d18cc..0000000 --- a/test/test_Cache.js +++ /dev/null @@ -1,37 +0,0 @@ -exports['test_Cache'] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - Cache = require('../src' + codeCoveragePath + '/utils/Cache'), - Helpers = require('../src' + codeCoveragePath + '/utils/Helpers'); - - test.expect(9); - - var cache = new Cache(); - - cache.getSet(1, '1'); - cache.getSet(2, '22'); - cache.getSet(3, '333'); - - test.equal(cache.contains(1), true); - test.equal(cache.contains(2), true); - test.equal(cache.contains(3), true); - test.equal(cache.get(1), '1'); - test.equal(cache.get(2), '22'); - test.equal(cache.get(3), '333'); - test.equal(cache.contains(9), false); - - cache.clear(); - - test.equal(cache.contains(1), false); - - var cache2 = new Cache(3); - - cache2.getSet(1, '1'); - - setTimeout(function () { - test.equal(cache2.contains(1), false); - Helpers.logInfo('Unit test ended OK.'); - test.done(); - }, - 4000 - ); -}; diff --git a/test/test_ClientInfoExchangePacket.js b/test/test_ClientInfoExchangePacket.js deleted file mode 100644 index 54e808c..0000000 --- a/test/test_ClientInfoExchangePacket.js +++ /dev/null @@ -1,20 +0,0 @@ -exports['test_clientInfoExchangePacket'] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - PacketReader = require('../src' + codeCoveragePath + '/packets/PacketReader'), - PacketWriter = require('../src' + codeCoveragePath + '/packets/PacketWriter'), - ClientInfoExchange = require('../src' + codeCoveragePath + '/packets/ClientInfoExchangePacket'), - packetReader = new PacketReader(), - clientInfoExchange = new ClientInfoExchange(), - packetWriter = new PacketWriter(clientInfoExchange.getBufferLength()); - - test.expect(3); - - clientInfoExchange.write(packetWriter); - test.equal(packetWriter._toBuffer().slice(0, 5), 'CUBRK'); - test.equal(packetWriter._toBuffer()[5], 3); - - packetReader.write(new Buffer([0, 0, 1, 2])); //=258 - clientInfoExchange.parse(packetReader); - test.equal(clientInfoExchange.newConnectionPort, 258); - test.done(); -}; diff --git a/test/test_Clob.js b/test/test_Clob.js deleted file mode 100644 index dd799d4..0000000 --- a/test/test_Clob.js +++ /dev/null @@ -1,49 +0,0 @@ -exports['test_Clob'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.batchExecuteNoQuery(['drop table if exists test_lob', - 'create table test_lob(cl CLOB)', - 'insert into test_lob values(CHAR_TO_CLOB(\'Clob test\'))'], cb); - }, - function (cb) { - Helpers.logInfo('Create table and insert done.'); - client.query('select * from test_lob', cb); - }, - function (result, queryHandle, cb) { - Helpers.logInfo('Query executed.'); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - client.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - function (str, read_length, cb) { - Helpers.logInfo('LOB Read done.'); - test.ok(read_length === 9); - test.ok(str === 'Clob test'); - - client.batchExecuteNoQuery(['DROP TABLE test_lob'], cb); - }, - function (cb) { - Helpers.logInfo('Drop table done.'); - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_Clob_Insert.js b/test/test_Clob_Insert.js deleted file mode 100644 index a81ed6f..0000000 --- a/test/test_Clob_Insert.js +++ /dev/null @@ -1,62 +0,0 @@ -exports['test_Clob_Insert'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - client.batchExecuteNoQuery(['drop table if exists test_clob', - 'create table test_clob(id int, cl clob)'], cb); - }, - function (cb) { - Helpers.logInfo('Create table done.'); - client.lobNew(client.LOB_TYPE_CLOB, cb); - }, - function (lobObject, cb) { - Helpers.logInfo('LobNew done.'); - var data = 'Test CLOB content.'; - client.lobWrite(lobObject, 1, data, cb); - }, - function (lobObject, written_length, cb) { - Helpers.logInfo('LobWrite done.'); - client.executeWithTypedParams('insert into test_clob values(1, ?)', [lobObject], ['clob'], cb); - }, - function (cb) { - Helpers.logInfo('Querying: select cl test_clob.'); - client.query('select cl from test_clob', cb); - }, - function (result, queryhandle, cb) { - Helpers.logInfo("Query executed."); - var arr = Result2Array.RowsArray(result); - var lobObject = arr[0][0]; - client.lobRead(lobObject, 1, lobObject.lobLength, cb); - }, - function (string, readLength, cb) { - Helpers.logInfo("LobRead done.."); - Helpers.logInfo('Number of bytes read: ' + readLength); - test.ok(readLength === 'Test CLOB content.'.length); - test.ok(string === 'Test CLOB content.'); - client.batchExecuteNoQuery(['DROP TABLE test_clob'], cb); - }, - function (cb) { - Helpers.logInfo('Drop table done.'); - client.close(cb); - } - ], - function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_CloseDatabasePacket.js b/test/test_CloseDatabasePacket.js deleted file mode 100644 index 7c50b47..0000000 --- a/test/test_CloseDatabasePacket.js +++ /dev/null @@ -1,39 +0,0 @@ -exports['test_CloseConnectionPacket'] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - PacketReader = require('../src' + codeCoveragePath + '/packets/PacketReader'), - PacketWriter = require('../src' + codeCoveragePath + '/packets/PacketWriter'), - CloseDatabasePacket = require('../src' + codeCoveragePath + '/packets/CloseDatabasePacket'), - CAS = require('../src' + codeCoveragePath + '/constants/CASConstants'); - - test.expect(14); - var packetReader = new PacketReader(), - closeDatabasePacket = new CloseDatabasePacket({casInfo : [0, 255, 255, 255]}), - packetWriter = new PacketWriter(closeDatabasePacket.getBufferLength()); - - closeDatabasePacket.write(packetWriter); - test.equal(packetWriter._toBuffer()[3], 1); // Total length - - test.equal(packetWriter._toBuffer()[4], 0); // CasInfo - test.equal(packetWriter._toBuffer()[5], 255); // CasInfo - test.equal(packetWriter._toBuffer()[6], 255); // CasInfo - test.equal(packetWriter._toBuffer()[7], 255); // CasInfo - - test.equal(packetWriter._toBuffer()[8], CAS.CASFunctionCode.CAS_FC_CON_CLOSE); - - packetReader.write(new Buffer([0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0])); - - test.equal(packetReader._packetLength(), 12); - - closeDatabasePacket.parse(packetReader); - - test.equal(closeDatabasePacket.casInfo[0], 0); // CasInfo - test.equal(closeDatabasePacket.casInfo[1], 255); // CasInfo - test.equal(closeDatabasePacket.casInfo[2], 255); // CasInfo - test.equal(closeDatabasePacket.casInfo[3], 255); // CasInfo - - test.equal(closeDatabasePacket.responseCode, 0); - - test.equal(closeDatabasePacket.errorCode, 0); - test.equal(closeDatabasePacket.errorMsg, ''); - test.done(); -}; diff --git a/test/test_CloseDefault.js b/test/test_CloseDefault.js deleted file mode 100644 index 70fb005..0000000 --- a/test/test_CloseDefault.js +++ /dev/null @@ -1,58 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function errorHandler(err) { - throw err.message; - } - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Executing query...'); - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - var foundQueryHandle = false; - for (var i = 0; i < client._queriesPacketList.length; i++) { - if (client._queriesPacketList[i].queryHandle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - test.ok(foundQueryHandle === true); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - foundQueryHandle = false; - for (var i = 0; i < client._queriesPacketList.length; i++) { - if (client._queriesPacketList[i].handle === queryHandle) { - foundQueryHandle = true; - break; - } - } - - test.ok(foundQueryHandle === false); - - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/test_Connect.js b/test/test_Connect.js deleted file mode 100644 index 87e2bde..0000000 --- a/test/test_Connect.js +++ /dev/null @@ -1,37 +0,0 @@ -exports['test_Connect'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function errorHandler(err) { - throw err.message; - } - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - client.getEngineVersion(function (err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('CUBRID engine version: ' + result); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; - diff --git a/test/test_ConnectCollision.js b/test/test_ConnectCollision.js deleted file mode 100644 index 838b1d5..0000000 --- a/test/test_ConnectCollision.js +++ /dev/null @@ -1,40 +0,0 @@ -exports['test_ConnectCollision'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function () { - // Close connection after 3 sec. - setTimeout(function (err) { - if (err) { - Helpers.logInfo('Error: ' + err.message); - } else { - Helpers.logInfo('Connected.'); - client.close(function (err) { - if (err) { - Helpers.logInfo('Error: ' + err.message); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }, 3000); - }); - - // Try to connect again - setTimeout(function () { - client.connect(function (err) { - if (err) { - Helpers.logInfo('Error: ' + err.message); - test.ok(err.message === 'A connection is already in progress! - denying current connection request.'); - } else { - client.close(null); - } - }); - }, 0); -}; diff --git a/test/test_ConnectTimeout.js b/test/test_ConnectTimeout.js deleted file mode 100644 index 50a69bd..0000000 --- a/test/test_ConnectTimeout.js +++ /dev/null @@ -1,44 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - host = 'www.google.com' - ErrorMessages = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/ErrorMessages'), - client = new CUBRID.createCUBRIDConnection(host); - - test.expect(3); - - client.setConnectionTimeout(2000); - - client.connect(function (err) { - if (err) { - test.equal(err.message, ErrorMessages.ERROR_CONNECTION_TIMEOUT); - - client = new CUBRID.createConnection({ - host: host, - connectionTimeout: 2000 - }); - - client.connect(function (err) { - if (err) { - test.equal(err.message, ErrorMessages.ERROR_CONNECTION_TIMEOUT); - - client = new CUBRID.createConnection(host, 33000, 'public', '', 'demodb', 0, 2000); - - client.connect(function (err) { - if (err) { - test.equal(err.message, ErrorMessages.ERROR_CONNECTION_TIMEOUT); - test.done(); - } else { - throw 'We should not get here!'; - } - }); - } else { - throw 'We should not get here!'; - } - }); - } else { - throw 'We should not get here!'; - } - }); -}; diff --git a/test/test_Connect_Events.js b/test/test_Connect_Events.js deleted file mode 100644 index b10f758..0000000 --- a/test/test_Connect_Events.js +++ /dev/null @@ -1,38 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - throw err.message; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connection opened.'); - client.query('select * from game'); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - client.closeQuery(queryHandle, function () { - }); - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - client.close(); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed'); - Helpers.logInfo('Test passed'); - client.removeAllListeners(); - test.done(); - }); -}; - diff --git a/test/test_Connect_Sequence.js b/test/test_Connect_Sequence.js deleted file mode 100644 index c60f260..0000000 --- a/test/test_Connect_Sequence.js +++ /dev/null @@ -1,31 +0,0 @@ -exports['test_ConnectSequence'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue; - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (callback) { - client.connect(callback); - }, - function (callback) { - client.getEngineVersion(callback); - }, - function (version, callback) { - test.notEqual(version, null); - Helpers.logInfo('Engine version: ' + version); - client.close(callback); - } - ], - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_DataTypes.js b/test/test_DataTypes.js deleted file mode 100644 index 30f7e92..0000000 --- a/test/test_DataTypes.js +++ /dev/null @@ -1,129 +0,0 @@ -exports['test_DataTypes'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - var isCUBRID9 = client.getEngineVersion().startsWith('9'); - - test.expect(21 + (isCUBRID9 ? 1 : 0)); - - Helpers.logInfo('Connected.'); - Helpers.logInfo('Creating the test table...'); - - client.batchExecuteNoQuery([ - 'DROP TABLE IF EXISTS test_data_types', - 'CREATE TABLE test_data_types(' + - 'a BIGINT,' + - 'b BIT(1),' + - 'c BIT VARYING(1),' + - 'd BLOB,' + - 'e CHARACTER(1),' + - 'f CLOB,' + - 'g DATE,' + - 'h DATETIME,' + - 'i DOUBLE,' + - 'j FLOAT,' + - 'k INTEGER,' + - 'l MONETARY,' + - 'm NATIONAL CHARACTER(1),' + - 'o NATIONAL CHARACTER VARYING(100),' + - 'p NUMERIC(15,0),' + - 'r CHARACTER VARYING(100),' + - 's TIME,' + - 't TIMESTAMP,' + - (isCUBRID9 ? "z ENUM('red', 'blue', 'yellow') DEFAULT 'red'," : '') + - 'u VARCHAR(4096)' + - ')', - "INSERT INTO test_data_types VALUES(15, B'0', B'0', 'qwerty', 'a', 'qwerty', '2012-10-02', '2012-10-02 13:25:45', 1.5, 2.5, 14, 3.14, N'9', N'95', 16, 'varchar', '1899-12-31 13:25:45', '2012-10-02 13:25:45', " + (isCUBRID9 ? "'blue', " : '') + "'varchar')" - ], function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from test_data_types'); - - client.query('SELECT * FROM test_data_types', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 1); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 1); - test.ok(arr[0][0] === 15); - test.ok(arr[0][1][0] === 0); - test.ok(arr[0][2][0] === 0); - test.ok(typeof(arr[0][3]) === 'object'); - test.ok(arr[0][4] === 'a'); - test.ok(typeof(arr[0][5]) === 'object'); - test.ok(arr[0][6].toString().startsWith('2012-10-02') === true); - test.ok(arr[0][7].toString().startsWith('2012-10-02') === true); - test.ok(arr[0][8] === 1.5); - test.ok(arr[0][9] === 2.5); - test.ok(arr[0][10] === 14); - test.ok(arr[0][11] === 3.14); - test.ok(arr[0][12] === '9'); - test.ok(arr[0][13] === '95'); - test.ok(arr[0][14] === 16); - test.ok(arr[0][15] === 'varchar'); - test.ok(arr[0][16].toString().startsWith('1899-12-31') === true); - test.ok(arr[0][17].toString().startsWith('2012-10-02') === true); - - if (isCUBRID9) { - // ENUM was defined, check it. - test.ok(arr[0][18] === 'blue'); - test.ok(arr[0][19] === 'varchar'); - } else { - test.ok(arr[0][18] === 'varchar'); - } - - for (var j = 0; j < arr.length; ++j) { - Helpers.logInfo(arr[j].toString()); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.batchExecuteNoQuery('DROP TABLE test_data_types', function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_DataTypesEvents.js b/test/test_DataTypesEvents.js deleted file mode 100644 index 5e95554..0000000 --- a/test/test_DataTypesEvents.js +++ /dev/null @@ -1,113 +0,0 @@ -exports['test_DataTypesEvents'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - -// TODO: avoid using global variables. - global.savedQueryHandle = null; - global.batchExecuteNo = 0; - - test.expect(21); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(null); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error: ' + err.message); - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Batch execute: create table and insert.'); - client.batchExecuteNoQuery( - [ - 'drop table if exists test_data_types', - 'CREATE TABLE test_data_types(' + - 'a bigint,' + - 'b bit(1),' + - 'c bit varying(1),' + - 'd blob,' + - 'e character(1),' + - 'f clob,' + - 'g date,' + - 'h datetime,' + - 'i double,' + - 'j float,' + - 'k integer,' + - 'l monetary,' + - 'm national character(1),' + - 'o national character varying(100),' + - 'p numeric(15,0),' + - 'r character varying(100),' + - 's time,' + - 't timestamp,' + - 'u character varying(4096))', - 'insert into test_data_types values(15, B\'0\',B\'0\', \'qwerty\', \'a\', \'qwerty\', \'2012-10-02\',' + - '\'2012-10-02 13:25:45\', 1.5, 2.5, 14, 3.14, N\'9\', N\'95\', 16, \'varchar\', \'1899-12-31 13:25:45\',' + - '\'2012-10-02 13:25:45\', \'varchar\')' - ], - null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - if (global.batchExecuteNo === 0) { - Helpers.logInfo('Batch execute done.'); - Helpers.logInfo('Querying: select * from test_data_types'); - global.batchExecuteNo = 1; - client.query('select * from test_data_types', null); - } else { - Helpers.logInfo('Batch execute done.'); - Helpers.logInfo('Closing query...'); - client.closeQuery(global.savedQueryHandle, null); - } - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - global.savedQueryHandle = queryHandle; // Save handle - needed for further fetch operations - test.ok(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Returned rows count: ' + Result2Array.RowsArray(result).length); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 1); - test.ok(arr[0][0] === 15); - test.ok(arr[0][1][0] === 0); - test.ok(arr[0][2][0] === 0); - test.ok(typeof(arr[0][3]) === 'object'); - test.ok(arr[0][4] === 'a'); - test.ok(typeof(arr[0][5]) === 'object'); - test.ok(arr[0][6].toString().startsWith('2012-10-02') === true); - test.ok(arr[0][7].toString().startsWith('2012-10-02') === true); - test.ok(arr[0][8] === 1.5); - test.ok(arr[0][9] === 2.5); - test.ok(arr[0][10] === 14); - test.ok(arr[0][11] === 3.14); - test.ok(arr[0][12] === '9'); - test.ok(arr[0][13] === '95'); - test.ok(arr[0][14] === 16); - test.ok(arr[0][15] === 'varchar'); - test.ok(arr[0][16].toString().startsWith('1899-12-31') === true); - test.ok(arr[0][17].toString().startsWith('2012-10-02') === true); - test.ok(arr[0][18] === 'varchar'); - - client.batchExecuteNoQuery('drop table test_data_types', null); - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Query closed.'); - global.savedQueryHandle = null; - Helpers.logInfo('Closing connection...'); - client.close(null); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; - diff --git a/test/test_EmitEvent.js b/test/test_EmitEvent.js deleted file mode 100644 index 57f10d9..0000000 --- a/test/test_EmitEvent.js +++ /dev/null @@ -1,42 +0,0 @@ -exports['test_EmitEvent'] = function (test) { - var events = require('events'), - CUBRID = require('../'), - Helpers = CUBRID.Helpers, - testing; - - var Test = function (err) { - this.err = err; - - this.EVENT_ERROR = 'error'; - this.EVENT_SUCCESS = 'success'; - }; - - Test.prototype = new events.EventEmitter; - - Test.prototype.increment = function () { - var self = this; - - Helpers._emitEvent(self, self.err, this.EVENT_ERROR, this.EVENT_SUCCESS, 'Success event'); - }; - - var test1 = new Test(null); - var test2 = new Test(new Error('Error!')); - - test2.on(test2.EVENT_ERROR, function (err) { - test.equal(err.message, 'Error!'); - }); - - test1.on(test1.EVENT_SUCCESS, function (messaje) { - test.equal(messaje, 'Success event'); - }); - - test.expect(2); - - Helpers.logInfo('Unit test ' + module.filename.toString() + ' started...'); - test1.increment(); - test2.increment(); - - Helpers.logInfo('Unit test ended OK.'); - test.done(); -}; - diff --git a/test/test_Encoding_Korean.js b/test/test_Encoding_Korean.js deleted file mode 100644 index b682700..0000000 --- a/test/test_Encoding_Korean.js +++ /dev/null @@ -1,47 +0,0 @@ -exports['test_Encoding_Korean'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - testData = '이 소포를 부치고 싶은데요.'; // KO: 'I would like to send off this package.' - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - Helpers.logInfo('Connected...'); - client.batchExecuteNoQuery(['drop table if exists test_encoding', 'create table test_encoding(str varchar(256))'], cb); - }, - function (cb) { - client.batchExecuteNoQuery('insert into test_encoding values(\'' + testData + '\')', cb); - }, - function (cb) { - client.query('select * from test_encoding where str = \'' + testData + '\'', cb); - }, - function (result, queryHandle, cb) { - var arr = Result2Array.RowsArray(result); - test.ok(arr[0][0] === testData); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.batchExecuteNoQuery('drop table test_encoding', cb); - }, - function (cb) { - client.close(cb); - } - ], - function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_Encoding_Russian.js b/test/test_Encoding_Russian.js deleted file mode 100644 index 8b9f2f0..0000000 --- a/test/test_Encoding_Russian.js +++ /dev/null @@ -1,46 +0,0 @@ -exports['test_Encoding_Russian'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - testData = 'Я хотел бы отослать этот пакет.'; // Russian: 'I would like to send off this package.' - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - Helpers.logInfo('Connected...'); - client.batchExecuteNoQuery(['drop table if exists test_encoding', 'create table test_encoding(str varchar(256))'], cb); - }, - function (cb) { - client.batchExecuteNoQuery('insert into test_encoding values(\'' + testData + '\')', cb); - }, - function (cb) { - client.query('select * from test_encoding where str = \'' + testData + '\'', cb); - }, - function (result, queryHandle, cb) { - var arr = Result2Array.RowsArray(result); - test.ok(arr[0][0] === testData); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.batchExecuteNoQuery('drop table test_encoding', cb); - }, - function (cb) { - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_ExecuteQueryPacket.js b/test/test_ExecuteQueryPacket.js index 72717f5..d8f1c53 100644 --- a/test/test_ExecuteQueryPacket.js +++ b/test/test_ExecuteQueryPacket.js @@ -4,7 +4,6 @@ exports['test_ExecuteQueryPacket'] = function (test) { PacketWriter = require('../src' + codeCoveragePath + '/packets/PacketWriter'), ExecuteQueryPacket = require('../src' + codeCoveragePath + '/packets/ExecuteQueryPacket'), CAS = require('../src' + codeCoveragePath + '/constants/CASConstants'), - assert = require('assert'), packetReader = new PacketReader(), executeQueryPacket = new ExecuteQueryPacket({ sql: 'select * from code', diff --git a/test/test_ExecuteWithParams.js b/test/test_ExecuteWithParams.js deleted file mode 100644 index 89787af..0000000 --- a/test/test_ExecuteWithParams.js +++ /dev/null @@ -1,58 +0,0 @@ -exports['test_ExecuteWithParams'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - assert = require('assert'), - sqlDrop = 'drop table if exists ?', - sqlCreate = 'create table ?(id int)', - sqlInsert = 'insert into ? values(1)', - arrValues = ['node_test']; - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.executeWithParams(sqlDrop, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - client.executeWithParams(sqlCreate, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - client.executeWithParams(sqlInsert, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - client.executeWithParams(sqlDrop, arrValues, ['"'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_ExecuteWithTypedParams.js b/test/test_ExecuteWithTypedParams.js deleted file mode 100644 index 225fe53..0000000 --- a/test/test_ExecuteWithTypedParams.js +++ /dev/null @@ -1,115 +0,0 @@ -exports['test_ExecuteWithTypedParams'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(19); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - client.batchExecuteNoQuery( - [ - 'drop table if exists test_params', - 'CREATE TABLE test_params(' + - 'a bigint,' + - 'b bit(8),' + - 'c bit varying(8),' + - 'd character(1),' + - 'e date,' + - 'f datetime,' + - 'g double,' + - 'h float,' + - 'i integer,' + - 'j monetary,' + - 'k national character(1),' + - 'l national character varying(100),' + - 'm numeric(15,0),' + - 'n character varying(100),' + - 'o time,' + - 'p timestamp,' + - 'q character varying(4096))' - ], - function (err) { - if (err) { - errorHandler(err); - } else { - var bitValue = new Buffer(1); - bitValue[0] = 0; - var varBitValue = new Buffer(1); - varBitValue[0] = 128; - var date = new Date(); - date.setUTCFullYear(2012, 10, 2); - date.setUTCHours(13); - date.setUTCMinutes(25); - date.setUTCSeconds(45); - date.setUTCMilliseconds(0); - client.executeWithTypedParams('insert into test_params values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', - [15, bitValue, varBitValue, 'a', date, date, 1.5, 2.5, 14, 3.14, '9' , '95', 16, 'varnchar', date, date, 'varchar'], - ['bigint', 'bit', 'varbit', 'char', 'date', 'datetime', 'double', 'float', 'int', 'monetary', - 'nchar', 'varnchar', 'numeric', 'varchar', 'time', 'timestamp', 'varchar'], - function (err) { - if (err) { - errorHandler(err); - } else { - client.query('select * from test_params', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 1); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 1); - test.ok(arr[0][0] === 15); - test.ok(arr[0][1][0] === 0); - test.ok(arr[0][2][0] === 128); - test.ok(arr[0][3] === 'a'); - test.ok(arr[0][4].toString() === '2012-10-02T00:00:00.000Z'); - test.ok(arr[0][5].toString() === '2012-10-02T13:25:45.000Z'); - test.ok(arr[0][6] === 1.5); - test.ok(arr[0][7] === 2.5); - test.ok(arr[0][8] === 14); - test.ok(arr[0][9] === 3.14); - test.ok(arr[0][10] === '9'); - test.ok(arr[0][11] === '95'); - test.ok(arr[0][12] === 16); - test.ok(arr[0][13] === 'varnchar'); - test.ok(arr[0][14].toString() === '1899-12-31T13:25:45.000Z'); - test.ok(arr[0][15].toString() === '2012-10-02T13:25:45.000Z'); - test.ok(arr[0][16] === 'varchar'); - - for (var j = 0; j < arr.length; j++) { - Helpers.logInfo(arr[j].toString()); - } - client.execute('drop table test_params', function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_GetDbParameter.js b/test/test_GetDbParameter.js deleted file mode 100644 index d6cb659..0000000 --- a/test/test_GetDbParameter.js +++ /dev/null @@ -1,45 +0,0 @@ -exports['test_GetDbParameter'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); - - function errorHandler(err) { - throw err.message; - } - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - - client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, - CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { - if (err) { - errorHandler(err); - } else { - client.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, function (err, value) { - if (err) { - errorHandler(err); - } else { - test.ok(value === CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_GetDbParameterError.js b/test/test_GetDbParameterError.js deleted file mode 100644 index 8bf09ee..0000000 --- a/test/test_GetDbParameterError.js +++ /dev/null @@ -1,39 +0,0 @@ -//var CUBRID = require('../'), -// client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), -// Helpers = CUBRID.Helpers, -// CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); -// -//exports['test_GetDbParameterError'] = function (test) { -// test.expect(1); -// function errorHandler(err) { -// Helpers.logInfo(err.message); -// test.ok(err.message === '-1011:CAS_ER_PARAM_NAME'); -// client.close(function (err) { -// if (err) { -// errorHandler(err); -// } else { -// Helpers.logInfo('Connection closed.'); -// Helpers.logInfo('Test passed.'); -// test.done(); -// } -// }); -// } -// -// Helpers.logInfo(module.filename.toString() + ' started...'); -// -// client.connect(function (err) { -// if (err) { -// errorHandler(err); -// } else { -// Helpers.logInfo('Connected OK.'); -// -// client.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH, function (err, value) { -// if (err) { -// errorHandler(err); -// } else { -// throw 'We should not get here'; -// } -// }); -// } -// }); -//}; diff --git a/test/test_GetDbParameter_Events.js b/test/test_GetDbParameter_Events.js deleted file mode 100644 index 303572a..0000000 --- a/test/test_GetDbParameter_Events.js +++ /dev/null @@ -1,67 +0,0 @@ -exports['test_GetDbParameter_Events'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - client.getDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, null); - }); - - client.on(client.EVENT_GET_DB_PARAMETER_COMPLETED, function (value) { - var isolationLevel = ''; - - if (typeof value === 'undefined') { - throw "Db parameter retrieved unsuccessfully!"; - } - - switch (value) { - case CAS.CUBRIDIsolationLevel.TRAN_UNKNOWN_ISOLATION: - isolationLevel = 'TRAN_UNKNOWN_ISOLATION'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE: - isolationLevel = 'TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_COMMIT_CLASS_COMMIT_INSTANCE: - isolationLevel = 'TRAN_COMMIT_CLASS_COMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_UNCOMMIT_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_UNCOMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_COMMIT_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_REP_INSTANCE: - isolationLevel = 'TRAN_REP_CLASS_REP_INSTANCE'; - break; - case CAS.CUBRIDIsolationLevel.TRAN_SERIALIZABLE: - isolationLevel = 'TRAN_SERIALIZABLE'; - break; - } - - if (isolationLevel === '') { - throw "Db parameter value is not recognized!"; - } - - Helpers.logInfo('Get Db parameter completed: ' + isolationLevel); - client.close(); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; diff --git a/test/test_IndexExports.js b/test/test_IndexExports.js deleted file mode 100644 index 170edbf..0000000 --- a/test/test_IndexExports.js +++ /dev/null @@ -1,59 +0,0 @@ -exports['test_IndexExports'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 215); - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - test.ok(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - - for (var j = 0; j < 1; j++) { - Helpers.logInfo(arr[j].toString()); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_LastInsertID.js b/test/test_LastInsertID.js deleted file mode 100644 index b22dea2..0000000 --- a/test/test_LastInsertID.js +++ /dev/null @@ -1,69 +0,0 @@ -exports['test_LastInsertID'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - - client.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, text VARCHAR(32))'], function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['insert into node_test values(NULL, \'database\'),(NULL, \'manager\')'], function (err) { - if (err) { - errorHandler(err); - } else { - client.query('select LAST_INSERT_ID()', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 1); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr[0].toString() === '1'); - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_Named_Functions.js b/test/test_Named_Functions.js deleted file mode 100644 index ea4db9c..0000000 --- a/test/test_Named_Functions.js +++ /dev/null @@ -1,59 +0,0 @@ -exports['test_Named_Functions'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(connect_callback); - - function connect_callback(err) { - if (err) { - errorHandler(err); - } else { - client.query('select * from game', query_callback); - } - } - - function query_callback(err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query results:'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - Helpers.logInfo('Total query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('First "batch" of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - Helpers.logInfo('Fetching more rows...'); - client.fetch(queryHandle, fetch_callback); - } - } - - function fetch_callback(err, result) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Fetch results:'); - Helpers.logInfo('*** Fetch data received.'); - Helpers.logInfo('*** Current fetch of data returned rows count: ' + Result2Array.RowsArray(result).length); - Helpers.logInfo('*** First row: ' + Result2Array.RowsArray(result)[0].toString()); - client.close(close_callback); - } - } - - function close_callback(err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - } -}; diff --git a/test/test_NodePool.js b/test/test_NodePool.js deleted file mode 100644 index f1c3e1e..0000000 --- a/test/test_NodePool.js +++ /dev/null @@ -1,159 +0,0 @@ -exports['test_NodePool'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - testSetup = require('./testSetup/test_Setup'), - generic_pool = require('generic-pool'); - - test.expect(8); - Helpers.logInfo(module.filename.toString() + ' started...'); - - var pool = generic_pool.Pool({ - name : 'cubrid-node-pool', - max : 2, - create : function (callback) { - var client = testSetup.createDefaultCUBRIDDemodbConnection(); - - client.connect(function (err) { - if (!err) { - Helpers.logInfo('Connection opened.'); - } - callback(err, client); - }); - }, - destroy : function (db) { - db.close(function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('Connection closed.'); - } - }); - }, - idleTimeoutMillis : 30000, - priorityRange : 3, - log : false - }); - - pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[1] Query results:'); - test.ok(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[1] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[1] Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[1] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } - }, 1); - - pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[2] Query results:'); - test.ok(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[2] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[2] Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[2] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } - }, 1); - - pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[3] Query results:'); - test.ok(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[3] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[3] Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[3] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } - }, 2); - - pool.acquire(function (err, client) { - if (err) { - Helpers.logError(err); - } - else { - client.query("select * from code", function (err, result, queryHandle) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[4] Query results:'); - test.ok(Result2Array.TotalRowsCount(result) === 6); - Helpers.logInfo('[4] Query results rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('[4] Query results:'); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 6); - client.closeQuery(queryHandle, function (err) { - if (err) { - Helpers.logError(err); - } else { - Helpers.logInfo('[4] Query closed.'); - // Return object back to pool - pool.release(client); - } - }); - } - }); - } - }, 1); - - pool.drain(function () { - pool.destroyAllNow(function () { - test.done(); - }); - }); -}; diff --git a/test/test_ObjectsArray.js b/test/test_ObjectsArray.js deleted file mode 100644 index 9d94de0..0000000 --- a/test/test_ObjectsArray.js +++ /dev/null @@ -1,61 +0,0 @@ -exports['test_ObjectsArray'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(6); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 215); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - var arr = Result2Array.ObjectsArray(result); - - test.ok(arr.length === 215); - test.ok(arr[arr.length - 1].code === 'AFG'); - test.ok(arr[arr.length - 1].name === 'Afghanistan'); - test.ok(arr[arr.length - 1].continent === 'Asia'); - test.ok(arr[arr.length - 1].capital === 'Kabul'); - - for (var j = 0; j < 1; ++j) { - Helpers.logInfo(arr[j].code + "," + arr[j].name + "," + arr[j].continent + "," + arr[j].capital); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_ParallelQueries.js b/test/test_ParallelQueries.js deleted file mode 100644 index 719fb05..0000000 --- a/test/test_ParallelQueries.js +++ /dev/null @@ -1,100 +0,0 @@ -exports['test_ParallelQueries'] = function (test) { - var CUBRID = require('../'), - testSetup = require('./testSetup/test_Setup'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function fork(async_calls) { - for (var i = 0; i < async_calls.length; i++) { - async_calls[i](); - } - - setTimeout(function () { - Helpers.logInfo('Test passed.'); - test.done(); - }, 3000); - } - - function A() { - Helpers.logInfo('Function A called.'); - Helpers.logInfo('Connecting... [A].'); - - var client = testSetup.createDefaultCUBRIDDemodbConnection(); - - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connected [A], on port: ' + client.connectionBrokerPort); - setTimeout(function () { - client.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('Querying [A]: select * from nation'); - if (err) { - throw err; - } else { - Helpers.logInfo('Query result rows count [A]: ' + Result2Array.TotalRowsCount(result)); - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed [A].'); - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed [A].'); - } - }); - } - }); - } - }); - }, 3000); - } - }); - } - - function B() { - Helpers.logInfo('Function B called.'); - var client2 = testSetup.createDefaultCUBRIDDemodbConnection(); - Helpers.logInfo('Connecting... [B].'); - client2.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connected [B], on port: ' + client2.connectionBrokerPort); - client2.query('select * from game', function (err, result, queryHandle) { - Helpers.logInfo('Querying [B]: select * from game'); - if (err) { - throw err; - } else { - Helpers.logInfo('Query result rows count [B]: ' + Result2Array.TotalRowsCount(result)); - client2.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed [B].'); - client2.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed [B].'); - } - }); - } - }); - } - }); - } - }); - } - - function C() { - Helpers.logInfo('Function C called.'); - } - - fork([A, B, C]); -}; diff --git a/test/test_ParallelQueries_2.js b/test/test_ParallelQueries_2.js deleted file mode 100644 index add38b1..0000000 --- a/test/test_ParallelQueries_2.js +++ /dev/null @@ -1,94 +0,0 @@ -exports['test_ParallelQueries_2'] = function (test) { - var CUBRID = require('../'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - testSetup = require('./testSetup/test_Setup'), - // First connection - client = testSetup.createDefaultCUBRIDDemodbConnection(), - // Second connection - client2 = testSetup.createDefaultCUBRIDDemodbConnection(); - - test.expect(0); - - Helpers.logInfo(module.filename.toString() + ' started...'); - - function A() { - Helpers.logInfo('Function A called.'); - Helpers.logInfo('Connecting... [A].'); - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connected [A], on port: ' + client.connectionBrokerPort); - setTimeout(function () { - Helpers.logInfo('setTimeout is triggered. Executing client.query()'); - - client.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('Querying [A]: select * from nation'); - if (err) { - throw err; - } else { - Helpers.logInfo('Query result rows count [A]: ' + Result2Array.TotalRowsCount(result)); - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed [A].'); - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed [A].'); - } - }); - } - }); - } - }); - }, 3000); - } - }); - } - - function B() { - Helpers.logInfo('Function B called.'); - Helpers.logInfo('Connecting... [B].'); - client2.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connected [B], on port: ' + client2.connectionBrokerPort); - client2.query('select * from game', function (err, result, queryHandle) { - Helpers.logInfo('Querying [B]: select * from game'); - if (err) { - throw err; - } else { - Helpers.logInfo('Query result rows count [B]: ' + Result2Array.TotalRowsCount(result)); - client2.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed [B].'); - client2.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed [B].'); - } - }); - } - }); - } - }); - } - }); - } - - A(); - B(); - - setTimeout(function () { - Helpers.logInfo('Test passed.'); - test.done(); - }, 5000); -}; diff --git a/test/test_ParallelQueries_3.js b/test/test_ParallelQueries_3.js deleted file mode 100644 index e217f5c..0000000 --- a/test/test_ParallelQueries_3.js +++ /dev/null @@ -1,67 +0,0 @@ -exports['test_ParallelQueries_3'] = function (test) { - var CUBRID = require('../'), - testSetup = require('./testSetup/test_Setup'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - var executed = 0; - - function errorHandler(err) { - throw err.message; - } - - function RunQueryInSeparateConnection(i) { - setTimeout(function () { - Helpers.logInfo('Opening connecting no. ' + i + '...'); - var client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection no. ' + i + ' was opened on port: ' + client.connectionBrokerPort); - - client.query('select * from nation', function (err, result, queryHandle) { - Helpers.logInfo('On connection no. ' + i + ' we are executing query: select * from nation'); - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('On connection no. ' + i + ' we got query result rows count: ' + Result2Array.TotalRowsCount(result)); - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed for connection no. ' + i + '.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection no. ' + i + ' was closed.'); - executed++; - Helpers.logInfo('Functions completed: ' + executed + ' out of 10 scheduled.'); - } - }); - } - }); - } - }); - } - }); - }, Math.random() * 1000); - } - - Helpers.logInfo('Please wait 10 sec. for the test to complete...'); - setTimeout(function () { - Helpers.logInfo('Test passed.'); - test.done(); - }, 10000); - - // Open 10 connections and for each, execute a query - for (var i = 1; i <= 10; ++i) { - RunQueryInSeparateConnection(i); - } -}; diff --git a/test/test_PrepareExecuteOldProtocolPacket.js b/test/test_PrepareExecuteOldProtocolPacket.js index ea6401a..37df7b6 100644 --- a/test/test_PrepareExecuteOldProtocolPacket.js +++ b/test/test_PrepareExecuteOldProtocolPacket.js @@ -2,7 +2,7 @@ exports['test_PrepareExecuteOldProtocolPacket'] = function (test) { var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', PacketReader = require('../src' + codeCoveragePath + '/packets/PacketReader'), PacketWriter = require('../src' + codeCoveragePath + '/packets/PacketWriter'), - PrepareExecuteOldProtocolPacket = require('../src' + codeCoveragePath + '/packets/PrepareExecuteOldProtocolPacket'), + PrepareExecutePacket = require('../src' + codeCoveragePath + '/packets/PrepareExecutePacket'), CAS = require('../src' + codeCoveragePath + '/constants/CASConstants'); test.expect(48); @@ -14,11 +14,11 @@ exports['test_PrepareExecuteOldProtocolPacket'] = function (test) { paramValues : {}, paramTypes : {} }, - prepareExecuteOldProtocolPacket = new PrepareExecuteOldProtocolPacket(options), + prepareExecutePacket = new PrepareExecutePacket(options), packetReader = new PacketReader(), - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getPrepareBufferLength()); + packetWriter = new PacketWriter(prepareExecutePacket.getPrepareBufferLength()); - prepareExecuteOldProtocolPacket.writePrepare(packetWriter); + prepareExecutePacket.writePrepare(packetWriter); test.equal(packetWriter._toBuffer()[3], 34); // Total length test.equal(packetWriter._toBuffer()[4], 0); // Casinfo @@ -40,30 +40,30 @@ exports['test_PrepareExecuteOldProtocolPacket'] = function (test) { 6, 0, 0, 0, 7, 102, 95, 110, 97, 109, 101, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 99, 111, 100, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])); - prepareExecuteOldProtocolPacket.parsePrepare(packetReader); - test.equal(prepareExecuteOldProtocolPacket.queryHandle, 1); - test.equal(prepareExecuteOldProtocolPacket.resultCacheLifetime, -1); - test.equal(prepareExecuteOldProtocolPacket.statementType, 21); - test.equal(prepareExecuteOldProtocolPacket.bindCount, 0); - test.equal(prepareExecuteOldProtocolPacket.isUpdatable, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].ColumnType, 1); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].Scale, -1); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].Name, "s_name"); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].RealName, ""); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].TableName, "code"); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsNullable, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].DafaultValue, ""); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsAutoIncrement, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsUniqueKey, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsPrimaryKey, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsReverseIndex, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsReverseUnique, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsForeignKey, false); - test.equal(prepareExecuteOldProtocolPacket.infoArray[0].IsShared, false); + prepareExecutePacket.parsePrepare(packetReader); + test.equal(prepareExecutePacket.queryHandle, 1); + test.equal(prepareExecutePacket.resultCacheLifetime, -1); + test.equal(prepareExecutePacket.statementType, 21); + test.equal(prepareExecutePacket.bindCount, 0); + test.equal(prepareExecutePacket.isUpdatable, false); + test.equal(prepareExecutePacket.infoArray[0].ColumnType, 1); + test.equal(prepareExecutePacket.infoArray[0].Scale, -1); + test.equal(prepareExecutePacket.infoArray[0].Name, "s_name"); + test.equal(prepareExecutePacket.infoArray[0].RealName, ""); + test.equal(prepareExecutePacket.infoArray[0].TableName, "code"); + test.equal(prepareExecutePacket.infoArray[0].IsNullable, false); + test.equal(prepareExecutePacket.infoArray[0].DafaultValue, ""); + test.equal(prepareExecutePacket.infoArray[0].IsAutoIncrement, false); + test.equal(prepareExecutePacket.infoArray[0].IsUniqueKey, false); + test.equal(prepareExecutePacket.infoArray[0].IsPrimaryKey, false); + test.equal(prepareExecutePacket.infoArray[0].IsReverseIndex, false); + test.equal(prepareExecutePacket.infoArray[0].IsReverseUnique, false); + test.equal(prepareExecutePacket.infoArray[0].IsForeignKey, false); + test.equal(prepareExecutePacket.infoArray[0].IsShared, false); packetReader = new PacketReader(); - packetWriter = new PacketWriter(prepareExecuteOldProtocolPacket.getExecuteBufferLength()); - prepareExecuteOldProtocolPacket.writeExecute(packetWriter); + packetWriter = new PacketWriter(prepareExecutePacket.getExecuteBufferLength()); + prepareExecutePacket.writeExecute(packetWriter); test.equal(packetWriter._toBuffer()[3], 69); // Total length test.equal(packetWriter._toBuffer()[4], 1); // Casinfo @@ -92,7 +92,7 @@ exports['test_PrepareExecuteOldProtocolPacket'] = function (test) { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 83, 0, 0, 0, 0, 7, 83, 105, 108, 118, 101, 114, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 71, 0, 0, 0, 0, 5, 71, 111, 108, 100, 0])); - var resultSet = prepareExecuteOldProtocolPacket.parseExecute(packetReader).resultSet; + var resultSet = prepareExecutePacket.parseExecute(packetReader).resultSet; test.equal(resultSet, '{"ColumnNames":["s_name","f_name"],"ColumnDataTypes":["Char","String"],"RowsCount":6,"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"],["B","Bronze"],["S","Silver"],["G","Gold"]]}'); test.done(); diff --git a/test/test_QueriesQueue.js b/test/test_QueriesQueue.js deleted file mode 100644 index 82d6332..0000000 --- a/test/test_QueriesQueue.js +++ /dev/null @@ -1,123 +0,0 @@ -exports['test_QueriesQueue'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - SQL_A = 'SELECT * from nation', - SQL_B = 'SELECT * from code', - SQL_C = 'SELECT * from game'; - - test.expect(8); - Helpers.logInfo(module.filename.toString() + ' started...'); - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - client.addQuery(SQL_A, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - client.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - client.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' closed!'); - } - }); - } - }); - } - }); - - client.addQuery(SQL_B, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 6); - test.ok(arr[0].toString() === 'X,Mixed'); - client.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - client.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' closed!'); - } - }); - } - }); - } - }); - - client.addQuery(SQL_C, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 235); - test.ok(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - client.fetch(queryHandle, function (err, result, handle) { - if (err) { - throw err; - } else { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - if (result !== null) { - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - test.ok(arr.length === 241); - test.ok(arr[0].toString() === '2004,20317,14375,30124,GRE,S,2004-08-26T00:00:00.000Z'); - } else { - Helpers.logInfo('There was no data to fetch.'); - } - client.closeQuery(handle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' closed!'); - } - }); - } - }); - } - }); - - setTimeout(function () { - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - }, 5000); - } - }); -}; diff --git a/test/test_QueriesQueue_Events.js b/test/test_QueriesQueue_Events.js deleted file mode 100644 index a15fe7b..0000000 --- a/test/test_QueriesQueue_Events.js +++ /dev/null @@ -1,76 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - SQL_A = 'SELECT * from nation', - SQL_B = 'SELECT * from code', - SQL_C = 'SELECT * from game'; - - test.expect(6); - Helpers.logInfo(module.filename.toString() + ' started...'); - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw err; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - client.addQuery(SQL_A, null); - client.addQuery(SQL_B, null); - client.addQuery(SQL_C, null); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle, sql) { - Helpers.logInfo('Executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - switch (sql) { - case SQL_A: - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - break; - case SQL_B: - test.ok(Result2Array.TotalRowsCount(result) === 6); - test.ok(arr[0].toString() === 'X,Mixed'); - break; - case SQL_C: - test.ok(arr.length === 235); - test.ok(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - } - client.fetch(queryHandle, null); - }); - - client.on(client.EVENT_FETCH_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - client.closeQuery(queryHandle, null); - }); - - client.on(client.EVENT_FETCH_NO_MORE_DATA_AVAILABLE, function (queryHandle) { - Helpers.logInfo('Fetch executed for queryHandle: ' + queryHandle); - Helpers.logInfo('There is no more data to fetch.'); - client.closeQuery(queryHandle, null); - }); - - client.on(client.EVENT_QUERY_CLOSED, function (queryHandle) { - Helpers.logInfo(queryHandle + ' was closed!'); - if (client.queriesQueueIsEmpty()) { - setTimeout(function () { - client.close(); - }, 1000); - } - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; diff --git a/test/test_QueriesQueue_Mixed.js b/test/test_QueriesQueue_Mixed.js deleted file mode 100644 index 2e40375..0000000 --- a/test/test_QueriesQueue_Mixed.js +++ /dev/null @@ -1,66 +0,0 @@ -exports['test_QueriesQueue_Mixed'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - SQL_DELETE = 'DELETE FROM [code] WHERE s_name = \'A\'', - SQL_INSERT = 'INSERT INTO [code] VALUES(\'A\', \'ABC\')', - SQL_COUNT = 'SELECT COUNT(*) from [code]'; - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - - Helpers.logInfo('Queue-ing: ' + SQL_DELETE); - client.addNonQuery(SQL_DELETE, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_DELETE + ' executed.'); - } - }); - - Helpers.logInfo('Queue-ing: ' + SQL_INSERT); - client.addNonQuery(SQL_INSERT, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_INSERT + ' executed.'); - } - }); - - Helpers.logInfo('Queue-ing: ' + SQL_COUNT); - client.addQuery(SQL_COUNT, function (err, result) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_COUNT + ' executed.'); - Helpers.logInfo('Table rows count: ' + Result2Array.TotalRowsCount(result)); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 1); - test.ok(arr[0][0] === 7); - } - }); - - Helpers.logInfo('Executing: ' + SQL_DELETE); - client.addNonQuery(SQL_DELETE, null); - client.addQuery(SQL_COUNT, function (err, result) { - if (err) { - throw err; - } else { - var arr = Result2Array.RowsArray(result); - test.ok(arr[0][0] === 6); - client.close(function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - }); - } - }); - } - }); -}; diff --git a/test/test_QueriesQueue_MultiFetch.js b/test/test_QueriesQueue_MultiFetch.js deleted file mode 100644 index f199269..0000000 --- a/test/test_QueriesQueue_MultiFetch.js +++ /dev/null @@ -1,178 +0,0 @@ -exports['test_QueriesQueue_MultiFetch'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array, - SQL_A = 'SELECT * from event', - SQL_B = 'SELECT * from game', - SQL_C = 'SELECT * from participant', - SQL_A_fetchResult, SQL_B_fetchResult, SQL_C_fetchResult; - - test.expect(6); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection opened...'); - - client.addQuery(SQL_A, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_A + ' executed! - handle: ' + queryHandle); - - var arr = Result2Array.RowsArray(result); - - test.ok(Result2Array.TotalRowsCount(result) === 422); - test.ok(arr[0].toString() === '20421,Wrestling,Greco-Roman 97kg,M,1'); - - ActionQueue.while( - function () { - return SQL_A_fetchResult !== null; - }, - function (callback) { - client.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_A_fetchResult = result; - callback.call(err); - } - }); - }, - function (err) { - if (err) { - throw err; - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - client.addQuery(SQL_B, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_B + ' executed! - handle: ' + queryHandle); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 235); - test.ok(arr[0].toString() === '2004,20021,14345,30116,NGR,B,2004-08-28T00:00:00.000Z'); - - ActionQueue.while( - function () { - return SQL_B_fetchResult !== null; - }, - function (callback) { - client.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_B_fetchResult = result; - callback.call(err); - } - }); - }, - function (err) { - if (err) { - throw err; - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - client.addQuery(SQL_C, function (err, result, queryHandle) { - if (err) { - throw err; - } else { - Helpers.logInfo(SQL_C + ' executed! - handle: ' + queryHandle); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 309); - test.ok(arr[0].toString() === '2004,ZAM,0,0,0'); - ActionQueue.while( - function () { - return SQL_C_fetchResult !== null; - }, - function (callback) { - client.fetch(queryHandle, function (err, result) { - if (err) { - throw err; - } else { - if (result !== null) { - Helpers.logInfo('Fetch executed for queryHandle ' + queryHandle); - var arr = Result2Array.RowsArray(result); - Helpers.logInfo('Fetch results - first row: ' + queryHandle + ': ' + arr[0]); - } else { - Helpers.logInfo('There is no more data to fetch.'); - } - SQL_C_fetchResult = result; - callback.call(err); - } - }); - }, - function (err) { - if (err) { - throw err; - } else { - client.closeQuery(queryHandle, function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Query closed.'); - } - }); - } - } - ); - } - }); - - setTimeout(function () { - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - }, 5000); - } - }); -}; diff --git a/test/test_QueryCollision_01.js b/test/test_QueryCollision_01.js deleted file mode 100644 index ac27939..0000000 --- a/test/test_QueryCollision_01.js +++ /dev/null @@ -1,53 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(10); - Helpers.logInfo(module.filename.toString() + ' started...'); - - test.ok(client.connectionPending === false); - test.ok(client.connectionOpened === false); - - client.connect(function () { - test.ok(client.connectionPending === false); - test.ok(client.connectionOpened === true); - - Helpers.logInfo('Executing first query...'); - client.query('select * from nation', function () { - Helpers.logInfo('First query call completed.'); - test.ok(client.connectionPending === false); - test.ok(client.connectionOpened === true); - - Helpers.logInfo('Executing second query...'); - client.query('select * from nation', function () { - }); - }); - - // Close the connection; this will close also the active query status - setTimeout(function () { - test.ok(client.connectionPending === false); - test.ok(client.connectionOpened === true); - - client.close(function () { - }); - }, 2000); - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - test.ok(client.connectionPending === false); - test.ok(client.connectionOpened === false); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; - - diff --git a/test/test_QueryCollision_02.js b/test/test_QueryCollision_02.js deleted file mode 100644 index 04933f6..0000000 --- a/test/test_QueryCollision_02.js +++ /dev/null @@ -1,72 +0,0 @@ -var path = require('path'), - Util = require('util'); - -exports[path.basename(__filename)] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - EventEmitter = require('events').EventEmitter, - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - var getSingleValue = function (sql, client) { - this.sql = sql; - this.client = client; - - EventEmitter.call(this); - }; - - Util.inherits(getSingleValue, EventEmitter); - - getSingleValue.prototype.run = function () { - var self = this; - - this.client.query(this.sql, function (err, result, queryHandle) { - if (err) { - self.emit('error', err); - } else { - self.client.closeQuery(queryHandle, function (err) { - if (err) { - self.emit('error', err); - } else { - self.emit('done', Result2Array.RowsArray(result)[0][0]); - } - }); - } - }); - }; - - var getMyValue = new getSingleValue('select count(*) from game', client); - - getMyValue.on('error', function (err) { - Helpers.logInfo(err.message); - throw err; - }); - - getMyValue.on('done', function (result) { - test.ok(result === 8653); - - Helpers.logInfo('Test 1 passed.'); - }); - - var getMyValue2 = new getSingleValue('select wrong_count(*) from game', client); - - getMyValue2.on('error', function (err) { - if (client.getEngineVersion().startsWith('8.4')) { - test.ok(err.message === "-493:Syntax: syntax error, unexpected '*' "); - } else { - test.ok(err.message === "-493:Syntax: In line 1, column 20 before ') from game'\nSyntax error: unexpected '*', expecting SELECT or VALUE or VALUES or '(' "); - } - - Helpers.logInfo('Test 2 passed.'); - - client.close(function () { - test.done(); - }); - }); - - getMyValue.run(); - getMyValue2.run(); -}; diff --git a/test/test_QueryOldProtocol.js b/test/test_QueryOldProtocol.js deleted file mode 100644 index 0e88ed5..0000000 --- a/test/test_QueryOldProtocol.js +++ /dev/null @@ -1,64 +0,0 @@ -exports['test_QueryOldProtocol'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - - client.setEnforceOldQueryProtocol(true); - - Helpers.logInfo('Querying: select * from nation'); - - client.query('select * from nation', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 215); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 215); - test.ok(arr[0].toString() === 'SRB,Serbia,Europe,Beograd'); - test.ok(arr[arr.length - 1].toString() === 'AFG,Afghanistan,Asia,Kabul'); - - for (var j = 0; j < 1; ++j) { - Helpers.logInfo(arr[j].toString()); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - client.setEnforceOldQueryProtocol(false); - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_QueryWithParams.js b/test/test_QueryWithParams.js index 121cc18..12098b2 100644 --- a/test/test_QueryWithParams.js +++ b/test/test_QueryWithParams.js @@ -1,6 +1,6 @@ exports['test_QueryWithParams'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, Result2Array = CUBRID.Result2Array; diff --git a/test/test_QueryWithParams_2.js b/test/test_QueryWithParams_2.js index 46b931c..4e7fb71 100644 --- a/test/test_QueryWithParams_2.js +++ b/test/test_QueryWithParams_2.js @@ -1,26 +1,26 @@ var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array, - sql = 'SELECT * FROM ? WHERE ? LIKE ? AND LENGTH(?) > ?', - arrValues = ['nation', 'code', 'A%', 'capital', '5']; + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + Result2Array = CUBRID.Result2Array, + sql = 'SELECT * FROM ? WHERE ? LIKE ? AND LENGTH(?) > ?', + arrValues = ['nation', 'code', 'A%', 'capital', '5']; exports['queryWithParams with defined arrValues and arrDelimiters'] = function (test) { - var arrDelimiters = ['`', '', '\'', '', '']; + var arrDelimiters = ['`', '', '\'', '', '']; - test.expect(1); + test.expect(1); Helpers.logInfo(module.filename.toString() + ' started...'); client.connect(function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Connected.'); Helpers.logInfo('Querying: ' + sql); - client.queryWithParams(sql, arrValues, arrDelimiters, function (err, result, queryHandle) { + client.queryWithParams(sql, arrValues, arrDelimiters, function (err, result, queryHandle) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); @@ -28,12 +28,12 @@ exports['queryWithParams with defined arrValues and arrDelimiters'] = function ( client.closeQuery(queryHandle, function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Query closed.'); client.close(function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Connection closed.'); Helpers.logInfo('Test passed.'); @@ -49,23 +49,23 @@ exports['queryWithParams with defined arrValues and arrDelimiters'] = function ( } exports['queryWithParams with defined arrValues but partially defined arrDelimiters (missing delimiters for strings and numbers)'] = function (test) { - var // Intentionally omitted the last delimiter. node-cubrid should - // automatically set it as single quotes. - arrDelimiters = ['`', '', '\'', '']; + var // Intentionally omitted the last delimiter. node-cubrid should + // automatically set it as single quotes. + arrDelimiters = ['`', '', '\'', '']; - test.expect(1); + test.expect(1); Helpers.logInfo(module.filename.toString() + ' started...'); client.connect(function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Connected.'); Helpers.logInfo('Querying: ' + sql); - client.queryWithParams(sql, arrValues, arrDelimiters, function (err, result, queryHandle) { + client.queryWithParams(sql, arrValues, arrDelimiters, function (err, result, queryHandle) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); @@ -73,12 +73,12 @@ exports['queryWithParams with defined arrValues but partially defined arrDelimit client.closeQuery(queryHandle, function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Query closed.'); client.close(function (err) { if (err) { - throw err; + throw err; } else { Helpers.logInfo('Connection closed.'); Helpers.logInfo('Test passed.'); diff --git a/test/test_QueryWithTypedParams.js b/test/test_QueryWithTypedParams.js index 2ac5255..f60b6ed 100644 --- a/test/test_QueryWithTypedParams.js +++ b/test/test_QueryWithTypedParams.js @@ -1,6 +1,6 @@ exports['test_QueryWithTypedParams'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, Result2Array = CUBRID.Result2Array, sql = 'select * from nation where continent = ?', diff --git a/test/test_Rollback.js b/test/test_Rollback.js deleted file mode 100644 index 62ec25f..0000000 --- a/test/test_Rollback.js +++ /dev/null @@ -1,74 +0,0 @@ -exports['test_Rollback'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection connected'); - client.batchExecuteNoQuery(['drop table if exists node_test', 'create table node_test(id int)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.setAutoCommitMode(false, function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['insert into node_test values(1)'], function (err) { - if (err) { - errorHandler(err); - } else { - client.rollback(function (err) { - if (err) { - errorHandler(err); - } else { - client.query('select * from node_test', function (err, result) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) !== 1, 'Didn\'t rollback!!!'); - - client.setAutoCommitMode(true, function (err) { - if (err) { - errorHandler(err); - } else { - client.batchExecuteNoQuery(['drop table node_test'], function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_Schema.js b/test/test_Schema.js deleted file mode 100644 index 1aee411..0000000 --- a/test/test_Schema.js +++ /dev/null @@ -1,62 +0,0 @@ -exports['test_Schema'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (callback) { - client.connect(callback); - }, - function (callback) { - client.getSchema(client.SCHEMA_TABLE, null, callback); - }, - function (result, callback) { - Helpers.logInfo('Schema tables results:'); - - for (var i = 0; i < result.length; ++i) { - Helpers.logInfo(result[i]); - } - - if (client.getEngineVersion().startsWith('8.4')) { - test.ok(result.length === 32); - } else { - if (client.getEngineVersion().startsWith('9')) { - test.ok(result.length === 33); - } - } - callback(); - }, - function (callback) { - client.getSchema(client.SCHEMA_VIEW, null, callback); - }, - function (result, callback) { - Helpers.logInfo('Schema views results:'); - - for (var i = 0; i < result.length; ++i) { - Helpers.logInfo(result[i]); - } - - if (client.getEngineVersion().startsWith('8.4')) { - test.ok(result.length === 16); - } else { - test.ok(result.length === 17); - } - - callback(); - }, - function (callback) { - client.close(callback); - } - ], function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_SchemaAttribute.js b/test/test_SchemaAttribute.js index b26ee84..6f6f6b6 100644 --- a/test/test_SchemaAttribute.js +++ b/test/test_SchemaAttribute.js @@ -1,10 +1,10 @@ exports['test_SchemaAttribute'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue; + var CUBRID = require('../'), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + ActionQueue = CUBRID.ActionQueue; - test.expect(9); + test.expect(9); Helpers.logInfo(module.filename.toString() + ' started...'); ActionQueue.enqueue([ @@ -19,22 +19,22 @@ exports['test_SchemaAttribute'] = function (test) { Helpers.logInfo(result[i]); } - // CUBRID 8.4.x + // CUBRID 8.4.x if (client.getEngineVersion().startsWith('8.4')) { test.ok(result.length === 191); } else { - // CUBRID 9.0+ + // CUBRID 9.0+ test.ok(result.length === 212); } test.ok(result[0].Name === 'code'); test.ok(result[0].Scale === 0); - // CUBRID 8.4.x + // CUBRID 8.4.x if (client.getEngineVersion().startsWith('8.4')) { test.ok(result[0].Precision === 0); } else { - // CUBRID 9.0+ + // CUBRID 9.0+ test.ok(result[0].Precision === 10); } diff --git a/test/test_SchemaClassPrivilege.js b/test/test_SchemaClassPrivilege.js index 489fbe6..2ff66e2 100644 --- a/test/test_SchemaClassPrivilege.js +++ b/test/test_SchemaClassPrivilege.js @@ -1,10 +1,10 @@ exports['test_SchemaClassPrivilege'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue; + var CUBRID = require('../'), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + ActionQueue = CUBRID.ActionQueue; - test.expect(4); + test.expect(4); Helpers.logInfo(module.filename.toString() + ' started...'); ActionQueue.enqueue([ @@ -19,11 +19,11 @@ exports['test_SchemaClassPrivilege'] = function (test) { Helpers.logInfo(result[i]); } - // CUBRID 8.4.x + // CUBRID 8.4.x if (client.getEngineVersion().startsWith('8.4')) { test.ok(result.length === 96); } else { - // CUBRID 9.0+ + // CUBRID 9.0+ test.ok(result.length === 97); } diff --git a/test/test_SchemaConstraint.js b/test/test_SchemaConstraint.js index a3ea5d2..bb6a55d 100644 --- a/test/test_SchemaConstraint.js +++ b/test/test_SchemaConstraint.js @@ -1,6 +1,6 @@ exports['test_SchemaConstraint'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, ActionQueue = CUBRID.ActionQueue; diff --git a/test/test_SchemaExportedKeys.js b/test/test_SchemaExportedKeys.js index c6065ba..8216da8 100644 --- a/test/test_SchemaExportedKeys.js +++ b/test/test_SchemaExportedKeys.js @@ -1,6 +1,6 @@ exports['test_SchemaExportedKeys'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, ActionQueue = CUBRID.ActionQueue; diff --git a/test/test_SchemaImportedKeys.js b/test/test_SchemaImportedKeys.js index f8f7ca7..57deadd 100644 --- a/test/test_SchemaImportedKeys.js +++ b/test/test_SchemaImportedKeys.js @@ -1,10 +1,10 @@ exports['test_SchemaImportedKeys'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue; + var CUBRID = require('../'), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + ActionQueue = CUBRID.ActionQueue; - test.expect(17); + test.expect(17); Helpers.logInfo(module.filename.toString() + ' started...'); ActionQueue.enqueue([ @@ -19,9 +19,9 @@ exports['test_SchemaImportedKeys'] = function (test) { Helpers.logInfo(result[i]); } - test.ok(result.length === 2); + test.ok(result.length === 2); - // CUBRID 8.4.x + // CUBRID 8.4.x if (client.getEngineVersion().startsWith('8.4')) { test.ok(result[0].FkName === 'fk_game_athlete_code'); test.ok(result[0].PkName === 'pk_athlete_code'); @@ -40,7 +40,7 @@ exports['test_SchemaImportedKeys'] = function (test) { test.ok(result[1].UpdateAction === 1); test.ok(result[1].DeleteAction === 1); } else { - // CUBRID 9.0+ + // CUBRID 9.0+ test.ok(result[0].FkName === 'fk_game_event_code'); test.ok(result[0].PkName === 'pk_event_code'); test.ok(result[0].FkTableName === 'game'); diff --git a/test/test_SchemaPrimaryKeys.js b/test/test_SchemaPrimaryKeys.js index 23ab956..a1237f8 100644 --- a/test/test_SchemaPrimaryKeys.js +++ b/test/test_SchemaPrimaryKeys.js @@ -1,6 +1,6 @@ exports['test_PrimaryKeys'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, ActionQueue = CUBRID.ActionQueue; diff --git a/test/test_SchemaUsers.js b/test/test_SchemaUsers.js index 3edf4e1..eeb6ef9 100644 --- a/test/test_SchemaUsers.js +++ b/test/test_SchemaUsers.js @@ -1,43 +1,43 @@ exports['test_SchemaUsers'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; + var CUBRID = require('../'), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + ActionQueue = CUBRID.ActionQueue, + Result2Array = CUBRID.Result2Array; - test.expect(1); + test.expect(1); Helpers.logInfo(module.filename.toString() + ' started...'); ActionQueue.enqueue([ - function (callback) { - client.connect(callback); - }, - function (callback) { - client.query('select [name] from db_user', callback); - }, - function (result, queryHandle, callback) { - Helpers.logInfo(Result2Array.ColumnNamesArray(result).toString()); + function (callback) { + client.connect(callback); + }, + function (callback) { + client.query('select [name] from db_user', callback); + }, + function (result, queryHandle, callback) { + Helpers.logInfo(Result2Array.ColumnNamesArray(result).toString()); - var arr = Result2Array.RowsArray(result); - test.ok(arr.length === 2); + var arr = Result2Array.RowsArray(result); + test.ok(arr.length === 2); - for (var i = 0; i < arr.length; ++i) { - Helpers.logInfo(arr[i].toString()); - } + for (var i = 0; i < arr.length; ++i) { + Helpers.logInfo(arr[i].toString()); + } - callback(); - }, + callback(); + }, - function (callback) { - client.close(callback); - } - ], - function (err) { - if (err) { - throw err.message; - } else { - Helpers.logInfo('Test passed.'); - test.done(); - } - }); + function (callback) { + client.close(callback); + } + ], + function (err) { + if (err) { + throw err.message; + } else { + Helpers.logInfo('Test passed.'); + test.done(); + } + }); }; diff --git a/test/test_Schema_Events.js b/test/test_Schema_Events.js index cd95492..b1f9bdb 100644 --- a/test/test_Schema_Events.js +++ b/test/test_Schema_Events.js @@ -1,10 +1,10 @@ exports['test_Schema_Events'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - currentSchemaToReceive = 0; + var CUBRID = require('../'), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), + Helpers = CUBRID.Helpers, + currentSchemaToReceive = 0; - test.expect(2); + test.expect(2); Helpers.logInfo(module.filename.toString() + ' started...'); client.connect(); @@ -23,11 +23,11 @@ exports['test_Schema_Events'] = function (test) { client.on(client.EVENT_SCHEMA_DATA_AVAILABLE, function (result) { Helpers.logInfo('Schema data received.'); - for (var i = 0; i < result.length; ++i) { + for (var i = 0; i < result.length; ++i) { Helpers.logInfo(result[i]); } - if (client.getEngineVersion().startsWith('8.4')) { + if (client.getEngineVersion().startsWith('8.4')) { if (currentSchemaToReceive === client.SCHEMA_TABLE) { test.ok(result.length === 32); } else { diff --git a/test/test_Schema_Tables.js b/test/test_Schema_Tables.js index 434fed0..57c155c 100644 --- a/test/test_Schema_Tables.js +++ b/test/test_Schema_Tables.js @@ -1,6 +1,6 @@ exports['test_Schema_Tables'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, ActionQueue = CUBRID.ActionQueue; diff --git a/test/test_Schema_Views.js b/test/test_Schema_Views.js index 2687c8a..a5d7fd9 100644 --- a/test/test_Schema_Views.js +++ b/test/test_Schema_Views.js @@ -1,6 +1,6 @@ exports['test_Schema_Views'] = function (test) { var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), + client = require('./testSetup').createDefaultCUBRIDDemodbConnection(), Helpers = CUBRID.Helpers, ActionQueue = CUBRID.ActionQueue; diff --git a/test/test_SelectConstant_01.js b/test/test_SelectConstant_01.js deleted file mode 100644 index e61b823..0000000 --- a/test/test_SelectConstant_01.js +++ /dev/null @@ -1,59 +0,0 @@ -exports['test_SelectConstant_01'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select 1'); - - client.query('select 1', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 1); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 1); - test.ok(arr[0].toString() === '1'); - - for (var j = 0; j < arr.length; ++j) { - Helpers.logInfo(arr[j].toString()); - } - } - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - }); - } - }); -}; diff --git a/test/test_SelectConstant_02.js b/test/test_SelectConstant_02.js deleted file mode 100644 index 7d74d2e..0000000 --- a/test/test_SelectConstant_02.js +++ /dev/null @@ -1,61 +0,0 @@ -exports['test_SelectConstant_02'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - function errorHandler(err) { - throw err.message; - } - - test.expect(4); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select null from nation where rownum < 3'); - - client.query('select null from nation where rownum < 3', function (err, result, queryHandle) { - if (err) { - errorHandler(err); - } else { - test.ok(Result2Array.TotalRowsCount(result) === 2); - - Helpers.logInfo('Query result rows count: ' + Result2Array.TotalRowsCount(result)); - Helpers.logInfo('Query results:'); - - var arr = Result2Array.RowsArray(result); - - test.ok(arr.length === 2); - test.ok(arr[0].toString() === ''); - test.ok(arr[1].toString() === ''); - - for (var j = 0; j < arr.length; ++j) { - Helpers.logInfo('Value returned: [' + arr[j].toString() + ']'); - } - - client.closeQuery(queryHandle, function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Query closed.'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; diff --git a/test/test_SetAutoCommit.js b/test/test_SetAutoCommit.js deleted file mode 100644 index 7a828fd..0000000 --- a/test/test_SetAutoCommit.js +++ /dev/null @@ -1,43 +0,0 @@ -exports['test_SetAutoCommit'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(2); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connected...'); - - client.setAutoCommitMode(false, function (err) { - if (err) { - throw err; - } else { - test.ok(client.autoCommitMode === false, 'AutoCommitMode not set correctly!'); - - client.setAutoCommitMode(true, function (err) { - if (err) { - throw err; - } else { - test.ok(client.autoCommitMode === true, 'AutoCommitMode not set correctly!'); - - client.close(function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed...'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); - } - }); -}; - diff --git a/test/test_SetDbParameter.js b/test/test_SetDbParameter.js deleted file mode 100644 index 90070bb..0000000 --- a/test/test_SetDbParameter.js +++ /dev/null @@ -1,37 +0,0 @@ -exports['test_SetDbParameter'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); - - function errorHandler(err) { - throw err.message; - } - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - - client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, function (err) { - if (err) { - errorHandler(err); - } else { - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - }); - } - }); -}; diff --git a/test/test_SetDbParameterError.js b/test/test_SetDbParameterError.js deleted file mode 100644 index ed3b23c..0000000 --- a/test/test_SetDbParameterError.js +++ /dev/null @@ -1,40 +0,0 @@ -exports['test_SetDbParameterError'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); - - test.expect(1); - function errorHandler(err) { - Helpers.logInfo(err.message); - - test.ok(err.message === '-1011:CAS_ER_PARAM_NAME'); - - client.close(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); - } - - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected OK.'); - client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_MAX_STRING_LENGTH, 99, function (err) { - if (err) { - errorHandler(err); - } else { - throw 'We should not get here'; - } - }); - } - }); -}; diff --git a/test/test_SetDbParameter_Events.js b/test/test_SetDbParameter_Events.js deleted file mode 100644 index 2dfa23f..0000000 --- a/test/test_SetDbParameter_Events.js +++ /dev/null @@ -1,35 +0,0 @@ -exports['test_SetDbParameter_Events'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - CAS = require('../src' + (process.env.CODE_COV ? '-cov' : '') + '/constants/CASConstants'); - - test.expect(0); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logInfo('Error: ' + err.message); - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - client.setDatabaseParameter(CAS.CCIDbParam.CCI_PARAM_ISOLATION_LEVEL, - CAS.CUBRIDIsolationLevel.TRAN_REP_CLASS_COMMIT_INSTANCE, - null); - }); - - client.on(client.EVENT_SET_DB_PARAMETER_COMPLETED, function () { - Helpers.logInfo('Set Db parameter completed.'); - client.close(); - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; diff --git a/test/test_SocketError.js b/test/test_SocketError.js deleted file mode 100644 index 969e4d9..0000000 --- a/test/test_SocketError.js +++ /dev/null @@ -1,33 +0,0 @@ -exports['test_SocketError'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers; - - test.expect(1); - Helpers.logInfo(module.filename.toString() + ' started...'); - - function errorHandler(err) { - Helpers.logInfo(err.message); - test.ok(err.message === 'This socket is closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - - client.connect(function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Querying: select * from nation'); - client._socket.destroy(); - client.query('select * from nation', function (err) { - if (err) { - errorHandler(err); - } else { - Helpers.logInfo('We should not get here!'); - client.close(null); - } - }); - } - }); -}; diff --git a/test/test_Transaction.js b/test/test_Transaction.js deleted file mode 100644 index 7c04ab5..0000000 --- a/test/test_Transaction.js +++ /dev/null @@ -1,64 +0,0 @@ -exports['test_Transaction'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - ActionQueue = CUBRID.ActionQueue, - Result2Array = CUBRID.Result2Array; - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - - ActionQueue.enqueue([ - function (cb) { - client.connect(cb); - }, - function (cb) { - Helpers.logInfo('Connected...'); - client.batchExecuteNoQuery(['drop table if exists test_tran', 'create table test_tran(id int)'], cb); - }, - function (cb) { - client.beginTransaction(cb); - }, - function (cb) { - client.batchExecuteNoQuery('insert into test_tran values(1)', cb); - }, - function (cb) { - client.query('select * from test_tran', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.TotalRowsCount(result) === 1); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.rollback(cb); - }, - function (cb) { - client.query('select * from test_tran', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.TotalRowsCount(result) === 0); - client.closeQuery(queryHandle, cb); - }, - function (queryHandle, cb) { - client.batchExecuteNoQuery('drop table test_tran', cb); - }, - function (cb) { - client.commit(cb); - }, - function (cb) { - client.query('select count(*) from db_class where class_name = \'test_tran\'', cb); - }, - function (result, queryHandle, cb) { - test.ok(Result2Array.RowsArray(result)[0][0] === 0); - client.close(cb); - } - ], function (err) { - if (err) { - throw err; - } else { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - test.done(); - } - }); -}; diff --git a/test/test_Transaction_Commit_Error.js b/test/test_Transaction_Commit_Error.js deleted file mode 100644 index 73e8435..0000000 --- a/test/test_Transaction_Commit_Error.js +++ /dev/null @@ -1,62 +0,0 @@ -exports['test_Transaction_Commit_Error'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - async = require('async'), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - - Helpers.logInfo(module.filename.toString() + ' started...'); - test.expect(2); - var shards = [0, 1]; - - client.connect(function (err) { - if (err) { - Helpers.logError(err); - } - else { - Helpers.logInfo('Connected'); - - client.setAutoCommitMode(true); - client.setEnforceOldQueryProtocol(true); - - async.eachSeries(shards, selectAll, function (err) { - if (err) { - Helpers.logInfo(err); - } - - client.close(); - }); - } - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); - - function selectAll(shardId, done) { - var sql = 'SELECT * FROM code'; - - Helpers.logInfo(sql); - - client.addQuery(sql, function (err, result, queryHandle) { - if (err) { - done(err); - } - else { - Helpers.logInfo('Shard(' + shardId + ') holds ' + Result2Array.TotalRowsCount(result) + ' records'); - client.closeQuery(queryHandle, function (err) { - client.commit(function (err) { - if (err) { - Helpers.logError(err); - test.ok(err.message === 'AutoCommitMode is enabled! - denying commit request.'); - } - done(); - }); - }); - } - }); - }; -}; diff --git a/test/test_Transaction_Events.js b/test/test_Transaction_Events.js deleted file mode 100644 index e7d2013..0000000 --- a/test/test_Transaction_Events.js +++ /dev/null @@ -1,108 +0,0 @@ -exports['test_Transaction_Events'] = function (test) { - var CUBRID = require('../'), - client = require('./testSetup/test_Setup').createDefaultCUBRIDDemodbConnection(), - Helpers = CUBRID.Helpers, - Result2Array = CUBRID.Result2Array; - -// TODO: avoid global variables. - global.savedQueryHandle = null; - global.batchExecuteNo = 1; - global.queryNo = 1; - - test.expect(3); - Helpers.logInfo(module.filename.toString() + ' started...'); - - client.connect(); - - client.on(client.EVENT_ERROR, function (err) { - Helpers.logError('Error!: ' + err.message); - throw 'We should not get here!'; - }); - - client.on(client.EVENT_CONNECTED, function () { - Helpers.logInfo('Connected.'); - Helpers.logInfo('Execute: create test table'); - client.batchExecuteNoQuery(['drop table if exists test_tran', 'create table test_tran(id int)'], null); - }); - - client.on(client.EVENT_BATCH_COMMANDS_COMPLETED, function () { - Helpers.logInfo('Batch executeDone'); - if (global.batchExecuteNo === 1) { - client.beginTransaction(null); - global.batchExecuteNo++; - } else { - if (global.batchExecuteNo === 2) { - Helpers.logInfo('Querying: select * from test_tran'); - client.query('select * from test_tran'); - global.batchExecuteNo++; - } - else { - Helpers.logInfo('Commiting transaction.'); - client.commit(null); - } - } - }); - - client.on(client.EVENT_BEGIN_TRANSACTION, function () { - Helpers.logInfo('Begin transaction.'); - Helpers.logInfo('Execute: insert into test_tran values(1)'); - client.batchExecuteNoQuery('insert into test_tran values(1)', null); - }); - - client.on(client.EVENT_ROLLBACK_COMPLETED, function () { - Helpers.logInfo('Transaction rollback completed.'); - Helpers.logInfo('Querying: select * from test_tran'); - client.query('select * from test_tran'); - }); - - client.on(client.EVENT_COMMIT_COMPLETED, function () { - Helpers.logInfo('Transaction commit completed.'); - Helpers.logInfo('select count(*) from db_class where class_name = \'test_tran\''); - client.query('select count(*) from db_class where class_name = \'test_tran\''); - }); - - client.on(client.EVENT_QUERY_DATA_AVAILABLE, function (result, queryHandle) { - Helpers.logInfo('Data received.'); - Helpers.logInfo('Returned active query handle: ' + queryHandle); - global.savedQueryHandle = queryHandle; // Save handle - needed for further fetch operations - if (global.queryNo === 1) { - test.ok(Result2Array.TotalRowsCount(result) === 1); - client.closeQuery(global.savedQueryHandle, null); - } else { - if (global.queryNo === 2) { - test.ok(Result2Array.TotalRowsCount(result) === 0); - client.closeQuery(global.savedQueryHandle, null); - } else { - test.ok(Result2Array.RowsArray(result)[0][0] === 0); - client.closeQuery(global.savedQueryHandle, null); - } - } - }); - - client.on(client.EVENT_QUERY_CLOSED, function () { - Helpers.logInfo('Query closed.'); - global.savedQueryHandle = null; - if (global.queryNo === 1) { - Helpers.logInfo('Transaction do rollback.'); - client.rollback(null); - global.queryNo++; - } else { - if (global.queryNo === 2) { - Helpers.logInfo('Execute: drop table test_tran'); - client.batchExecuteNoQuery('drop table test_tran', null); - global.queryNo++; - } else { - Helpers.logInfo('Closing connection...'); - client.close(); - } - } - }); - - client.on(client.EVENT_CONNECTION_CLOSED, function () { - Helpers.logInfo('Connection closed.'); - Helpers.logInfo('Test passed.'); - client.removeAllListeners(); - test.done(); - }); -}; - diff --git a/test/test_Utils.js b/test/test_Utils.js deleted file mode 100644 index 3409356..0000000 --- a/test/test_Utils.js +++ /dev/null @@ -1,33 +0,0 @@ -var path = require('path'); - -exports[path.basename(__filename)] = function (test) { - var codeCoveragePath = process.env.CODE_COV ? '-cov' : '', - srcDir = '../src' + codeCoveragePath, - GetResultsArray = require(srcDir + '/resultset/Result2Array').RowsArray, - GetResultsColumnNamesArray = require(srcDir + '/resultset/Result2Array').ColumnNamesArray, - GetResultsColumnTypesArray = require(srcDir + '/resultset/Result2Array').ColumnTypesArray, - GetResultsCount = require(srcDir + '/resultset/Result2Array').TotalRowsCount, - GetResultsObjectsArrays = require(srcDir + '/resultset/Result2Array').ObjectsArray; - - test.expect(10); - - var json_str = '{"ColumnNames":["s_name","f_name"],' + - '"ColumnDataTypes":["char","string"],' + - '"RowsCount":99,' + - '"ColumnValues":[["X","Mixed"],["W","Woman"],["M","Man"]]}'; - - test.equal(GetResultsArray(json_str).toString(), 'X,Mixed,W,Woman,M,Man'); - test.equal(GetResultsColumnNamesArray(json_str).toString(), 's_name,f_name'); - test.equal(GetResultsColumnTypesArray(json_str).toString(), 'char,string'); - test.equal(GetResultsCount(json_str), 99); - - var objectsArray = GetResultsObjectsArrays(json_str); - test.equal(objectsArray[0].s_name, 'X'); - test.equal(objectsArray[0].f_name, 'Mixed'); - test.equal(objectsArray[1].s_name, 'W'); - test.equal(objectsArray[1].f_name, 'Woman'); - test.equal(objectsArray[2].s_name, 'M'); - test.equal(objectsArray[2].f_name, 'Man'); - - test.done(); -}; diff --git a/tutorials/Introduction to CUBRID Node.js driver - Part I.docx b/tutorials/Introduction to CUBRID Node.js driver - Part I.docx deleted file mode 100644 index cdeda94b9b0ae3de62c244f446a9fde83d512e32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188666 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 z 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%0DGF3%x~$FbGXt0xYnoF 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ⅆm z(nwG~7)mg2Z*}!{P$Qu+W0Ce6oPZ#`4KHK{g%$nwwTKm_7aPF1&i-^l3A5bzJ-w+3PR~bC>d*QwY(m*=$JP4*NE@SYRLgP-@7RZbsLjwnQ z4hD)dzBH%B1Wk*NBXX!v;vA5ufeM*UumcES!GZ*TMXES;{yq(1J8g* zzvv@)qa)f{0lNSyO#$#j2Ji_9L7WgI^?(OppdtDKJV-<^ptUtfgGh8@9lruR4I$n@ zEP@KzLn{yu!Xpp^ry=&j@Odz(g(vbH1L&v?vC+^-up6nPt%JCHNJ>XaFb2#_9Xxyf z`RB_rE9)mkkOaU%Jj*clReMyB{KY0h3=%%tkZI}8?>YGH-VHm<@#^f0XT{s1rpI#a za=gxA(1vq%SwzCk(RX<{X1eChZLmF!-`2xv zqosPWuiRo{7v^V|21YJuyZFXw%je9T*VQ%c^1>AbQy8odr`d;K%}?B+W*NlDaG8t8 z8pRX@0pL2tak5y%7GYpV2C_NGX7UgJ@DJ!2vIvQ{LWgj98Ig1p9gxT@AlI&@0h=Oav=lw_ev+PtWsGV@ z&oXw)(4@n)RH66_l`zUI8h8f@@V;i_qT%L2xWb{pgY;k0bzmoA5}J|go1dg0Gi2H} z2)bnGkoFBoY_>uI3DuZ)K$o^{!%X><@dOdB#RvI;6Tu0hc%d&k7l2YAgim=^$tlfR z4j6e6sEtx^c~)ZxU?da2(k@6tbwK2!yC5tPPE3DTKRDlj0BWJ!ZgWM~2;oir|Y7oB1t$SL2FKWtac z1<&Ld;7B!_fgxnH7)z*4mQ6iixvj1B*okBK2|zbg%Se-xA(WkzB08lVQXqwqP+-gu zR}NtEW{&`o65i0)hKmhOYiO8(69cW8ymk3gd9pc_rTmPdwKOmlWRwX&N(ezO#FTeb9er2vo-BWX%swR%c zyE{%mtd=@u{$|p$AV4>#b(SfzQ_C+(>p+FJNDXvfUFKKN0=Hs2G4&wK5V2$?4{Q|P z1jSN0HCR)m=UkDKLq-g-9@&e=(Q_M!)o@Hm&y-c~7#g_~B>5y`_z8gh0WHnOMZM+| z2$?3r0~|`CkzOzg^a9DJ6ygQQuLIrSq_U#WFF91{JJ_R$*dh<(%TF>=$*a!`3mSO> z_+&n!b4VUQX*5JOzOp70nUMihtDrn05U@Bk-N%>)k-+G&6Y?n?g`YIdHT|`%j3J|b zcr>Wi*zqn!!M{+$hNJP7X^Z#K+p)ZBHUQZ9$hp^B<9uNk9TqIw~wbonhJ8XJirK{X!Ir|ZFQR@}O{c&<$ zy6lomZ@h?OiXynpie^sgyc0*Nu=}|;&b{!~^X$ehd#oIH1Eh}N*@h3W7a)>3vg;5l ziJ@MW0iLLUyscZ>o;%T!O?R}m+rgfmOA*}MVroFvu=eEHuNF10) zu~s==Av`EPWNJqdbEb!DYWkyt!_lD ztfvulfekn*>>lhfCqW}P0m*Pcmby%4CJz$^jDb?n&Pp8q&U6(IqKKvw(}NnMgrXv0 z5h9(%0ogE0FrD~HTXM32d_*!#P~J}11og1i)|6nPYCVp?pb5At=~9z5T_trGN@;3* zGPP(32weaxzypKyIP4G1LnH@~FvF38Fd7&cO}IE(S;@texo$zn0b#X(z>o*h(D{{u z(g*+fpZ^)#8n}{!8h8*7y7`2!l4N8?qR>Y=f?b085p}{COaXfZiTor1qm{0u=R^Xi zK19!(8VND;{d`Y2m#*H`MRICiW`10y>GO_6M*Ldefgr9!uiEN7E03zkDog)Rbqs(lBCw~TB*#*!w4&7nFcGySRsmy~)3=u|kD zSi5V>p~}%nDpV~E;X^E>()DVCRZUBK$Il-BWjY>BrxLQ;$b5`>7pjHsrM@w>V9jz2 zN-e_V%JgHZ=z1S!4s;CTfTm#+=x!M6VEy8!oHmM_hBGpS{`}AXoGHfx@)b@a6O)TS zfz_hL^DAZ5mfXm2E_7H~TEs6@ihZ*%J25G^yx6gHXKchU5qaU9`Ch|K@2CX!O@`4M zic%^1F3Ci-%t=rO_a`TI4;UHMf(MotVjN@x0DKaJ55VP7gr!L!HNldC0!3YdU(mv^ zSW&@ev1M~B2EPgeke{>@xyQ*2(trUw22E2ZXmppTATao8JUs&{_6-Jt3Sqd|zW(gb z{!CVE^izIiG#Le1_UQ%vZ8k2<4&*(iB)m8vip=yE*}(LX^a2mEZc&L=lfWr0SUmz@ zGH9?61|S4m8D#-p$IrP-=&-^wt+3<4BI!Qq3>>2`_cAOM2dvglH0O@4<10fCGSM~| zCU%UoEC2wwHa-S)3q>d(eP!#@kjY6S2uT5l@UdhTMQf>X>8fPrB*-o#IOGGPygr}*$5k^ysf>yon^6bDj93xv7){MRR)_x_? zJ3S)9tuXw;5zs{QbL0<+{Nx=_LHKFwpLe(XRjYvyV7o@0%2@w!KFmReS<12dm+I+> zx53!{<&rHN3lTN#(-X62nfNRWMYg)OjNM?2&mdDUnHgqgjwJ?X6ahvQ;8Qu1?JzCV zOrgtkMol)EYv)j-WT7PQnHjUFq6t%kBJh5K<36DW{ZH2@*032K~eX z-$&B8b9mrTNG~aF0!GFY*I8FkoJjS6tE&!NDdA4-89=ao*vuGSE99c^^M6Ac6eOx8V@Ni@N5pK~8yw z)J-9ruZ$NGLe3R9I}+EOWh-ZfDkr~y1O}<7EQWVw`bxUNyZdee`q+Yn`{(%Ue5? z4%23J!A-+#S)(?N6~z?FHUw@M;LZWh$G}y{jbwwXaQGGHL(&X4a~k24>;s+8g)>X14p zYyQDvn516G-Rc4pnR`^|!obxc1?`x6=M@WP+|F(`Vs4UkONIj3on*P93F=q7s>%_f zzPesG9n+=DTj(k8j;Ckk2S_m>dZZM% zzZ|WUVr@j%WauDUvvF}FD-J~^^6SW81)M>iTDl4TQuu+rm$@@_K11IEYxJ6@Bs0?o1>421= z65eV0 zN&YrAhj~vj5hLPXd)e4@Oa^{!N!vgsz)Hk9>muCNTHqUTLBw3xIy^YZz}*bgnF!%e z5hV6H&X!hNbK1&Awkjmj9N5PJM65%+$0_MfK^t@Wo6?=qbc*>Y;#6jFG5;`2A##bX z^6}}-#!Ct&j|1E3V$Is66=l|^e+@JtJTiszIF(IHB~tiwsv;0N<<8Z~i&Lfjs|39} z3X}%wUkbQVTH-kUQILFmyiwtV@Hn&x0C8A1WDeVIyRZ96%K}G8N_XBDfA7>yKQbNO z+>6$8`s%16P?`O6CwR9Q=&Ln$?A_7R`|kJt;r~Puw5KzebkbbT<+0;PoTVI5H}(X& zNa(kxc|gbhB_4}Y{DIgsSVW83982Ow3vGQW-Az>gIVz3;F%w({|2iFN)(oK(iV`Mo zEX91)q>{mkR@9JYjw5|H6|qzTr#sL_L_jv+$6%^BcYEqaCPNA)2;60a)3ITPJOBp# z@=40JpxYeXqsTmcRToq<)=!}2aVuZ_I;H&JN8N{^_~$wAessBUX_ih6&Bkl|NprN- ztX)u{c4<-837I%1X&2;xe315wU;Kjn;zy1@(vXZE8Z11q;2Fy`V=ey9GYMV!4I|Ki z>Tv_@H!P4&<}-*l0e1G&IXHoOaem;y7yjL<&QHd{`?-h#PM~{p=bML*yp5mWKm65q z;NtEq(rL516#$w}U}0y&)o7%)Gck+lxEY8M6BDYCDDBV9Lw(ic6xV~j2KQmp5yyLVsfgus}{a2Bd_h3ci4-Vi(F5zZ1E$wkB-0B!~DVb z2*9!zD-rfYe@Pj`-yHzd3{I#=Fp$$p8V7)0gu{=_ugpRPb*hwWeayHtOK&z_k}mu@ z#zgLrFs5B)9%Gnhh?}+Rv|3m^egzFW<0wnClWl6wY1v3(9nj4~5n*ydx>6qh4G?q$ zYa2CdP2*&PzMd((HG}7DqjQI0=$t9wUu3u;4qnb#4A>}A*(%gXrycr?maT}><_tfH7%ksu7n=H{5wSgAzS(oI5TWOt?s5(({a*3T*Bm)rt@ zLKowu2t1mYa9oz3ZSLGbV>o&hz&_TDkK}wl0mRB35ku9OVFJTbc*@?#3~0bH4s{d z7OXJyG2?`Ncwp?n zjLyknd>MMih_-ar5TcrN`7n6_feIuQ(n!Z?JRx1_x?p)e35WzRaXnSbc}kF<{Jns| zphG-o1aF@fI%j<8FQbNP0v?FDbk6^P4+ahR~F7`A9~9*%-ZSWGBxfuLzBXX`9`Yv~s^VJRwuf-n(H6;xDeP`Ecms1}V9TyZLc zThK_oB{Lb^jwFh+y?|hCU|<0OV9wr6Moqc` zzw(aA1dYw;imK2UAW^_T>SzH9c-lV!u~82~MLYYjq@5|eeOl-oxrjgo8*JT>R|7n_ zSb%^Pp5qwc)^%%V;L*-+^aWTj@swh<-X19X4tKNZ9s@d=ZWU_Mooxq3ER9cWRQqMH z%Tuk`I;{|X$8H+7l5-dXastM!?e$XMH0PmLvSCAzg%_Py>_CUYQ@=X_My3hAVhCd8 z!TJ|2K+TjT3LAl1=$`OsE%d!NlCt^YEOiZ22 z9XtUBte*f51uGQif(0-|2O$C!1?4+xVM-c z$HnNJdL4Z%?GGx1x5Cq5pqly8zWEAiGT~*r)FuV5F1~CUnlF58S&tZApqk7 z*qzZ|t0K7>s9*M32_bb~GH~ClHPN_Cb-d^-;|1PWIl)W;((PcFuw4xt zvX)92; ztTXXsNU>Ufz0M0n!{KR#)`E5k$z{rvmb-~ZmRTmA6iJFmZ>1`E1z}s*>oNW~bW17b zQ({ANl}eaVT3%opLOGSenruAOCd&+bP`jLHmvpgIIE#+JmGIEASC@5&g~@X$=AvE* z82NQ61^hGt{E8=`vo7F75K7G_kHXL4IOL>G=XKN;Ei5D~gZwwVtFzcN&@{1z)4H^5 z)i$O40vi<39T`~o>c$HIPL5ZFj-1AL(MNR?c8PaHD@DFaqyf1`R*q$jorZ=Ef=NIk zKg_)uoygNpS((TrnB|ant_XJog+_;}v|4pe0`O1M8fYw#(1`*@;rum;%E?W0S`cga+{6rC&SebPJ;vL%Zs6RZS6*8E!LB1q zm);tVXO`ZyEEK74-nyy3x985=?iv}cCFAL5pIebk+l_p11S}qIHz4*OW;ly(j*ykt zmvsR196JMZSWa3LY6S(!dFwXcGSyWNiZ(ZXz)dEsUneQz^rJ1f2F^*`lFW1IfK&)~ z&;j~nP$0^jIdiZMG4mZq!(OCNBA}%?mJV!Eg|iTi+6;cC3ThN5{n85#QU-W>fuDoQ z(S>0^I)6!e7JVU1UN>oAI#=KgY=XmZFio&2!5zjzI_LtJDdpD=QYv)&OX2tghSM(g zG+@AI13Xwl$N+4_%rwL2g#Cq?GHNh-N?~w!4sE~R7)zZ_jfS7HG{iqdL-d_K(s7)? z^c`pWl-dPs^ml4zMFI`*f(;E6H5)G?P$#Uv8NGoYt)J)`9mJD?PYXu^V4o4ZeOl<8 zDKjCS&t>)(^!>LO;Lfs*Z)_};4?Vr&2M>Sq{?060YNJWc?e}(;*-f<})7>$X{RG-$ z%p(m8&CUhm^A+a8$K-CIPwW8;=@%HJWb2l&ic=nH4@P3YB;6&M;K-bs5=kZ_s*Z=O%9)ias z3AD$UGZwOWJ5`7xjfT>a1TwHV-VHn8>llXUpI|UY#DjL(xV<*KD_uyZ1~;9?*RMQc zvT#6uC627cBKZ_&q!K=1h+;8_lVp zlR)les`*_<^x_wvYJv)#DDvZWO5;UUWGcakxFSqK`PByiGQz?@>cWb?}s zdH5$8Fa0_Ros6M3Hym2r$hj?IID>fmRM7c^c=nTP@P6)M0PD~jJKos){uWM~_}~7g ze?Pso(2|0g+B1TX1X>1kwoPYE5aZ|x?-2tf4n!|vN%HlH%{eyY*O473b*yj<(j99X zQ@;hkJ4r&1JO^$XyLATa$+b%pH0>H1GwuEDQluIDq-*BToN9K=QA`}3qO#(QdT3N` zZGU_ojGGiyGG+lZrTlW1xPBq_P;Z@X?u3(Y(hQ%IjMw&z~ zba}-f@;ITQ+F(Ys<(B;JSG|m}UBEr%YIZAwX7KyF=JH4tbzdFb(2CT5zd&+5^&8Dp zL~iXV<#%Y2yJZZ?0)WmC9+N&E)JghF*Wi`o#hW@JOzM-Iq-gBaJLj%<0GuM7i~*S1 z`~@c*uQ5ZTuanRlziMS8%=<~=d7E2$*Enu`<(>Zr8OSW z&FUA2a`{!Q=CeN?W+WNIPkv2MXQPi13Gh3=dOjY0int6ibf|K_R<3X(C)fm`zPb)- zCBY{teuTL0oML{lTEDG{cYSqAI!&k}N}tkrITINu6|S6I@gLZyca6LHNLwJst<|R5 zuEUsYePXNtFv)l|>(_+zra|-zV|Nng8Nu79h|Wc6WAJ=#@w=e6%`ku@cxBTooJIPJ zpM6(rf_RAO9gQX8&N`$ufwK-Zo1#w3_H$upYZd^qZ|GeXcK71g?wI<=%K*or+_`d2 zQKdH39h;WHT}8&gFP7wDD+RM#aE#fUshC%RI>uO}g09!Ri&;-Kzu?g{ z24Kh9TnGJ4I6Mfw{?TvNU-G!CY?Pnw_!VB7c35>wAO9*u4K*9bN!oS&a$&&&K!h}Y zy!7jse)%nvj%LP~w!plwoGodeCN*} z`!9dlg?m!MRQWLH`2` z1Q-Y~5J-Z61_BHO7zi+Mu45pO1m`*h1pN;%5MUs{0QUsg?Ux+&tUFGHkzCg95RN77 zek=b~7XCd`?o0x=#mW8ZHhd|Mc95}0DcH#p5L|$P00RLA&O!{>H34VJvqhHEAasLD zCYAZ8fBL7_w{GPokY}HJDwoT4wAmBQ!lAJ4cITa)irjQTDcy)d3cELX*D(M(nxFIW z*REa53kSjLP7LZFe*({0h?D@N00RLA0t}o}7_g^3c$XEIxd3wa?%f@QHg0a=zV9n8 zzx;+9ZiL-G@x&9yP8`eU^7TetH%1`_bbS>!qHvvv_&de<)J>C;4cu4EwKLp)#k)=s zXm$$eIfe0{vjGMI3Y6g*jjvqGmQsP)N z#=Rw63dZe*aCRMF!tG$(Atfu2ZW2aFuvXAX&Rk4SPK1G08(58WKV|R)7zi*BU?9N2 z*@FRlqdlrRxBhaG_lXlHxF-bOEqO_7;DsWjK>kN!VRK-n}_z!feCF_R3RdDu<#JyEmT+g;I3WOjD0RjYq zJA|OY-Q5YU9o*d=0tvwh*1-wx?$AIWXyfh@XbA3Zw;TRz-Lt>%tb1Sf+2^4jX4kB$ zQKN?ZYE;cpzHl;6Oo!%AT&!L*?hZ`I?xI9nIc8l$JAajggcm;D#MdlF6PyvSW7|jr z-IFN)2Cv1>17y=44dzzjIcK;zj(3?>Ztod9SqT|;P6$r3b7 zq#PoC4@^`MbzaDiofT~+hgSj}K?CMWo6n@5ve;vOYA-`&S&^d5(;^UbIvg44WiiUs zD6W4qx4hg8q$~t19=_1HudobO5WtFZXuOK{JIy}ZnWn^Ic}Fg)CEtFhatlorE$(VP zRr1|bCjA+M;z7&F5H#nc9W?Ll;_w?Xfq##I6D^qV?5CCIJ1hz+_E1y**};0M@mc?? zU(s`Oyb6m=m>rx}H6(wSaXK!aT}UCdU%!T9K%b!x_$BpI1Po-Bf+IsaBM=ZIv69(76-E(`u!@jD|l7giMj(V@5_;Hz}>CT1M|aLTR1e@TS&}z zes@|4DD&T&Oc;g=sddcrP={1J_t`|uO*>OjtOhV0D)pGse4Q=jh%~t*f73d6@#;;c z;J?YoMI#dQvsv3Pm+R6Ox?Fm=$6NNpOhJz&i`%N1PW+<43H%mZN+sR%u~B|%@8!5e zwD^~f*~K9fP=yPbemzOQWRAzrBQDeo#&;+y|J*{*7#Zl`t?SL3R;sbxXk*}ZE6(tN zo&D_znqW{6_5S;wH07drq>!&)=&N3#p&fP@7}*H^h=`9mLe5}2%Fa3IE4}#r`a6CP ztLW$WAw@*_|3%Wj1Udj7;J#=7KF@5NzcbomkQc&vq1g{H`FisC+l`I2g~O~xdJ^P#?`F^jd~$jn4x|Ps)@^u{^%>NMn6Q_GIbC%t8D0B%V+gU`~iMBZzjeIgaFe zo!*3c75xRJjFWF3i7DV8bvH+QW^`oyR-nW1mQ7ME^#jW1uz%_5%0)PQA6&EXN+*S( zsNvzwa}JAt>zCkbwA31OUvY?{nh%9AVgfV}^vHsCDCF~NR{r#GC4eqI;_@_+e)ex2 zV#y9sAC|hwEV!R!ybXXBY;CZhye9TtlmT6_3}aVG_}e^LgW<*n-$#+1C*ypX12xXG zs`-QoaW}y!+=!UZ0x_=Q2!b+~o;<^?-v`VMbb{hD=NLp%g$9B7{+enAkAKr&9TM0s za5zgio+)|lN!NGq2yW5Aj|HJJ=Hqa)IA8#M> zM?{C-T=f5c`w&y(KerF14VE+ZsjS>AATJVB3yX@rjbP_PV!5>Uus)dad=|tWJLp`jg&V=ogFB~^|lQ2k>WzfsV&R~Zf24u zCK?)Py!n39i+kQXCK8gj6s(kN^z_49gKZCg=vOyAFP9-g!+@)$1CL>)+x20e^M~8+ zD_$YY060W4ICzwIh$M>TsY4H`iWoruj)RKNPk#%yi><7h;`%~jg*w~vPfFrRQH0?T zV3lkTFvv{}^0K1oP95LN;!-=nT7i}^A~4frk%y#DJ82Kt!ml|$z2E*4VfDk`HTKg~ z5z+@!9w1!cQ~Ncj!ATZAXxH4RARGFo`=zW+U`E|_Hg(pmy0znr;V_3grd@OWl%$WN;zwi}7Vl&~ zl|V{ZY}|6GXj<1|;@6m#e#Jv_H-;7;8b9yk^2)ve&(7Gsq|ak$Gy4lMID`xF6`wJ{rRQy1j1;M&q1_yRwRE1U>_0h=WWj>biD}<(fUXAR_)$xz6gJ190YcPxCJncmjV4ENwKD;JWp@ z=el)NEM@*^=86}=K$ypYZyjoSWdkn0P0|3Wr@ieT}K<$-e-ka2~@*7yk4L z0Ygc2%IElSy>F|}l;C=upIE?roa4P1&7-&oucV`--mhk~B@!pz>>XT9kv{Y)`EU5& z>(rdgR+}FI^OZ8}K3zGu9(8~0GYlkro1*a{GvDmEJ6W@ski{Is>c&-TzFmN?UdGZE z^8DWGE_OV)ZiSPj?u9b1iK#*Ur`HgvCXnp-3vRD_{J*?vY^>? z{ojl~H#2_OM&s63{Feu8ookuQ;}%(cnnc~>Fe`gs6_itB9l|d`-G+BdO?`)WKl)t% zg2|>-NB_tRNTV5=VQ|vSz#5Fv+lVSSy6(L1sa=u2I4$VuqD68jUMY;s4f zS#|!$jq6^du|ss98#v=HLViK*Sz{9*l_)u=XrK|aVCMKYma>|{|0`jf&~qnE|EfU` z({?6vp%MB}`pp+(JV0oL&YRoL!1%vwWWZ7o31bnC^PAC6 z(DNn-kN_s@$kpM~r4k?YJ}qMn*E1s>&00K*xt+ko_t~@7Gr7L;8jHpG1@T@QCn}!$ zpS6mo9oz{pER8GfAb~NB4Rd2t=fJ^{6*I)r*G&`^yYThvg|*pcH``YENn*uE<&J+L zYd}@bT*w}XpedbZgs-;@DYWe&B9Y)uY`jg$bpNpqh`?NT7>eOXg*Rj)bBGJo1+_z%Vw+DL zo#>@pCov~WwB`Z#UdGI-UgWvJH#6i){%v`)lkgV)>o<*8iA)t4Lsrs;h8 zKXKD&%Bt{OH7q5RUk3rE7@<;rwj@O}AN}wBRDs zmT`nJZp9mL)!YF#T}R%0i#t_MWFhrUjpfAHWaB=s+gu8WIu2Xj$8U6dZ<02WG#WG=R$sfbM@(x8x#%A6wB4)QuuLZr5OAtt&Gqp< z2KFD-gfAUe@1FhsIjFEU;_Vyi-tVpSa64)Lwb*jVXSi6&@0L>N#^3)&)1-rBlgsgb zv)o_<`cYJzasu<4+>Eb;9OSc7le0>B{;FzLW>yWa$mgu%5B_8(@skNTCtXsPiptw{ zgend!#Jkzf{S^-<)g|pbQ&dkG{D=d-no3eD37{54XC2hdHkMGbz8_Z0}JFfqz`JH?_m{c-ze%zJnIZxY3G|8`8Fu z`TKeQhna)B0{{l^^2jGz@5@Tf70q!uZyN`WF9mO*PO^Ou+vBoBv+e3j`TY)F>+v~W z>+PWbi-)`Z`DKrrWksO9Xk1NA2(jbq+H@f3+9C(;+A^l@` z*%Oj*I1CQS&Ii)s@&wzc{T?DBmm#83LNghO@89 zVz` z0beu63P{O;k`)YAIWQnN(s(K60L!ril*EU_o4Vv(a+kF85|BMp3!hIjpjWRG6~F$( z2qRAg0jQmCG6L3g0kkIE;8f3XdTZ67EqeRne78}=o*i6L(m^m6>)Rud*Hjb3C-%ed^HH@k1YUwmrC#J)3+pG@}CYSoF0!JODeA0 z?48k4o0OvDtf=g*6ELmC3VEO5@S%7Pk1GBV@&)n+j%VEN0mZJ-yq$-YM2xZS%BKD9 z*UJ63<1zy9pBy9{0#aaz$MNlz{%DW?ujh}r4>KSjyd6^UWjq{>z>jBB)$bo6!?eKW zzB^imW^3a=^_l4K6jGTnJ2}Gqg-ycxPwtUJ82c7p1%eG|`3r80 zxNOwa)#`lR2l+7y2%Lp6B56HHQztG=8kk}r_CJC}HiZ1)J6G;=r6p{E48ezIPk>TrM+OHm$P`erdJ>3LLUra)q;3n5=w|Bfz1 zgC4uC2yWlPc=%}G=*iD_akqRo$J}~frm5Gz=9<&LO^?4izMFvcP*u?aR$(eeZ=;Ca z#`e4D?X%PV{NoYN3a=QT{x*Ivp{utwJHW5lO0L+P;rHxPeUU#~(=t;WUF}1NNc||$ zD~E^%g4mJy4?O<;Yfe?hxQPr8R=jG_Tcg{xXR8gQ`PpgWnOIkK%{a1A|L-?Nskjrb2%1UWFg0yJaefj)=r1#eAnx#vP*J`xC^fT$u z9$UJQS~*4bKhogm<7%NGFu;1X48FTR@Z38CcT)@_rEYX*eJk04fNi+!8>Q%m_=09w z4ZTk-=Mwr3CLivz5W^qo&Xip_ofY!mITo;3^|avTx*%U4CB0791o+=Y#)y}HVc@g5 z)3H)!e$w!En!`)^Q+>dIueuql!usA=@pWMTBYMtMSn1kd0Cz6{A1s#}G*IhqOC)d` zALoE2rG4w7(`i5a09!!6^~GMu(6IP0xN)w!bCy>=rvCiJA=0~48k4S6_vgR$qjPB+ z5MRUUp$o5wr1)8dV9m&zmHu+;!`Ff*i2?0u-AixAO9ku0F zaI_%T2S0h!<>x>}nc!l;7_~XsY;+%BKAhSCirDCZH2B{q<=Sl(mLOoTyst-&wT4tMDl*wwQuNszx?0HahA5G?&3buVlIwZ5BTYa zA|=e3Q}72}1P$oo3iB=5p~p;zC%R5E^wQ_?GHo{`Qy%V}zqR-|E=NhJ@bg9W7RTP^ zHEvg0;feEAJCibPgX9UzUD`iR=lH^foE|kAJMi=ku!ntHNMss=!ew?=jUk1Z$;U{u z|6<22n;H)*ZUS6&7>NXD1?|wAEJg@>(1pN*wP^66KgqO(mHJ_Dta>Y!ZjRG>wj_Yt zR91FL-u6Ara93a>058Oc0bkDxlsI1zgYoC|w_L9lJtnv`nlnnIT7RauWqqL*@M0=7 zvb~aXSu=pClsApT^*{0XLw~TzSLsO-0S@)ZNQv2vH11W!%6O}MmDt6y#dl$r7y!9^i!)B11DPPUXc|+wWB?<$ij9bM!hHW*N8%0>=+PSGiz%CiBjVRPpGIx4U1U1Az;? z!7%)hPTlqbBcp%aE+ zF5Z{v4$+8sRLnp|6usDY_%1IeCg7iRP;%wx{Tqu5Gn#W4^-$^Bz+S2NawY%$sTX8& zhbvql^edPoSQ&H_g@_%7FaK==Swu6Bau+Bm8e!HITJC^`&@7j=SEZ~N>=@0Fu=U&;>9mOcZ=okzC_OzhI`a)z!Pp;i^y%Ot&SWF z6U%^h1_TYPw8^#M*m2WplaaD!4Mv|g=*2q0k9HH8Hj_qW>j-T6(KfQiYcXa#yj8oL zTzMng(aM@I!Hmz?wy{u&hPFsk-)&z)#PgAanP>1Ep=RKswm1$F>xMJF)ws!gW+KebU^Brta4TmsI!O~DE&6@f*O|b1WpM7}2@sFMxFC zrwa#t+*Ok7aef9USbm5bd-cYO-;NK_cY2w#wHffxTdG4wiU}c)24+PPwIQ}3F>q{W zcH8=zTY01;zOU$Sv)eh7OL~ZsPFErkZgThDBNsnmR>WG=i4x}ab{z+rUe@@;BrQ?2 z5xy`DuXmEuu`kpr;gU;LSLe9%&Ni_{2VE-a1gECh)c30ThUWlz`YQj7E<=PJSU5|Kgp~%@BRR@7xIPV$Oq}mj)CGFGm5InyNaLHgsX&rso%@fx z9jarwwq;X>=Z@Nv+!Hk?(nEQT>uvar`+15_US=?{5b9oXRLU7h3~L+ED~u0RTBqg? zGw^%`Ya9csH)D;w*XXo5n2+4^nQK<<%Tu-YMo9?Dbix4*aki=}0jb5m{l{a9aV%(6 z7=IvKpxp(~(#$bL+GY(bk=Rxj8A~X}akS}y0oFUtjLjQfZ7z1q_1Z*ceOrH^Hh!K3 z*_?0h&l+hOdl&lrWV}xd!jzL85*M-8TWjX-&sMt^l(RM8Oo#&N(~~q<_ubnENZHDU$${%b0sVbyr0m4$)obOw75R|2w%^dc;#4O2yO-Xv zWPKNUJ<6|UxnS7Bzo*XKb3s~Z0>^ZoBXd)9$h2G~%I%J_D7I5ii1Uc|<>eg&=P$$5 z&hje{jT1=i<=Z%ZN)+G)#^kCFkskmg&CT*=pCkmWtk>v739 z;F76i)V8oTueG{jpEzgD=GGS(jeADVEQ4ewrsS=M>1%_T)`a&GBV{^HF~`d@YB z#Wil^C{%;v>Zi`byYsmeKMDw(m)TCw+?tWWRq3)f?}u*A*}j)3Iywc^)A~;~r6Sqk zZ~A%f^)mC(M@DDNA8S;nBTjc`aodNV2(`VhvWsC=pzb|WYgLQ)OI9#t<&e!tKxLf- zj7wS3CCERw!ps7hN_=b$4>CIrxUG80q;B;-XvTWP$UTu{e|DP{Z=b{v4(=}`>- zzd_oz`WWJy)=de&Z?y83!*I_Y-6cD`wR@S#AY@C``*W4pIXH6hr%D0hqvf^6RF1Pq zluOJ>B<#<$CX;+>Z-G9rn{Cu3I*H7}&KI4!xLjTw)lD#wpjLk^H-^c#V=w(!LEwOc ztm5UPQM^TL!qAPO0)oN|^_8ZBI}Zl&OTQ&_SaLElpKq@*9MDS3Jh}!bNZ+R-kolq( z&p2jg&%_xAfjiPFtTxci_&5|GxbWnhk!hh;el3C}MY~(*3HZ9EXq5j{Qhx{vLD+b7 zTEfhMzo>MEq^RA^z%7NM|1azXmC#{44$ED#-PO&mf=567%x0i3(HX2Siqy0H*;Y?1 z%DoGE+w^3yQne3_Q1SH;1)TFE#{Kl8okWR27JI$IaN)@vAMb`tl{q9{ zttp!tUOZ%^FyhA(%L;aWyQ|Z$$7kj=o=E-tmMC$e<7q9zBH7N%H_ek97iNBTS-tM^ zdUn+=uh`-5XGudC3z2C@meO_xn7XU1P7-2Qp2^HS16M|tXbM(9)YYolRA2z(X zKU91Lydqd}I8^TTfmNHwwyzn7$P!>3W4(0WV zG9rPDi$=YHuOqdA9^J4h)G6ne<-B1&Jmvj-40E;T@|mDiz6y{8Sa|Eq=B!o+ESpra z9ew;^+sp3cP{w*Ww$n?45+4Re?q0vW`nbP={ag8yhnNBm6Ho1x{KQN^+zS~}pw;xa zmn!zy`>I#UvspFL@5-$^B6swO_Lq*}06+dM!Hr7X>-aP^aI0S0=*mo*VI1TeHl`s}DVvp@3K!Af5e0YK<{}&1Z z7pX@#yQ0TsoHF8-s7*z?UxYNL_A8@3>RXg>=67-P+*fU><6Ah5A%H&zL*9^X5AT-Z z_u_)GU-HlLqPW)4eus=F!uS27RrA;tv42ZQ{1a2@T*lDm5^{jkt@P;NK@o&Ucv2vv z=H>IyZ|-_E5i>3a&`oFL7@z|C)YMDrDwb%{v>sj9aOhB-9?O3TpZRj_%=d(8sG(NJ zMqB-UB9W_hCpk3_KUSg$Yb+H{aiQ^9=QzUWPs+xI z5JVVW<@r(G*s()R!SdO8yk{=Y+5}CM4oU4vvCrI%OWm~AU>TZaxmN!ZPMt$UiYt&$ zAKT+UGD-sE&y1v`SBKgpF{k0z(3$^q1-UVnM9n|#(NMr^Voe?!o&C(L)HTn&o%@ol z#!QSH5xT8!=jtTg#iSR%Ulrc*ILRwipQuN-os7;SSbQh&fX?8Ev08>C!CiTY+_OXk zW6+$dwr!O1n0d_S!V=9F)^4HiXm@Co_IL_DFga={JYjCFAYo$~ok6b2+68u=1n1_D zQT!+aellOcoxQAAxum%r#nZ*kgY4F3{pNF4=aQvWB4UNY+ng!p$qB`E<*(tNkYJ!8 zLK$SiaH~7gv}$0in;=2sWOl~Mu8Gh>zGDuF;%SRA{^wB6!$3z2vbLspNZ%tq%k#!4YqkO0Z9)zK^=4F5php z&hA;)0|(LQ=&gpu(^?q_hkvLKZQpj}zZ~es^;6i5)f{zBoR%GDcits1-(r)CTCGaB zHAR-OgwpaN@lft|aVy*^x#WdR2%hQmE|6`+DXk7odTAq3`x?6AB!;go^T#mwNKY)Qwz*;HlaG||BreU9Iv|LJs;!FZZ}vtV0u);*y3G?*K$#Pb zTj%*;5|$3(pQ)4Mp7H9APZb4oTi-h!e^}7hiT`=xF#cI;cTDG#s{ed+;cXfBL23PN zW6@9DS9Oe@W=9&=i+$t!^2vjoYszUz>c$^W;Exr@h zsjYtKyFOVo`wibUkyIeA#c}^fi|(d?mt_EoAwN*GC8ZQU<5GC|;LB<{7Eq?6mN>ml zJYLN{TT#4?ccj13Kek8$RKKzy)&>eH+GXXK0T(%;8(SL9xSF|mXw8q_L$o#uY* z4Q2@s2CxE5F>VrJgZpPA;Q+dD`u%d6jpsf7kwI%^z;J zL>Fo`^g*vL#)BI0f~UA8Hf<(5DBI{sJrK=I`L9}Mw|XzLT>_=<1Lg+rLH`1qz;2U0 zFOI8=em02S+}m=rTQn}ueE-OGTc!Jty8Mnyx=V%r*o8Db%mC<~5~y&y=(!$YxMfG#I_is#QN? zMBJRpuI2U_SItRXw~PxWPO~EjBWT#$tHFT6dlI`Okcx9BAlGtizp5zLgbiKJ&NTJy zvv0fEMaPqfYxen-VMQ@DZsy&SMwz>(MMS%PC2F5YS6igqDse=+C0bzK@ zinO2I#IEl2gJfkkC)7~{QbL#71q|cmpqmK{9d9gS>9;zI_d5&LaTCjFYj9FA z+t{N!f%z#d4x60hzwY9&NE0SP zS+%p6Wz+(FQ1=6YHQS0tSIYiN-P)|YBphf%WDe$tdghx3rtUlOIIh@i6-&Pphen$> zc2r}Qw4b#T!8j#{;xRmwFe}ef+NZbzO-zZ`nQ&^5w3x_TmLrqNu(X(L5`@$Zv2jlY4C0A4&6en)SMzgXiA7Z&8{%gqs9 zK+&telI0*z3|_ z*!b2)G_`Q9){4M62YxV)p;nmTpf)#@T&HsH4r}!?sHl(4SiQ`4hO+LmkZp~mG^iaK zvuvjsQOwd$OGDcR`_RQjFsfQ=`V%LVpC5eHS8oMDnmcOToy=Y?&oCz)D|SwA;7eiY zO6H9_z;=uHXh$5~%G$ymhuBQID@?FrQ1QDNdGk+x$S038HOkR1dxKIfIW~cvL}rWJ zVCF(W#d}NcT(Nem7SqaU4wKZb7d%jex`*XJe3S3W?zn^-!HgY!dTh$9(P8CgG8xvN z(@KR8{%oMe{H82P*{uNySAdt4;_n zpXU5@$5)N8EfX^kU@C_I4RSP*A!;i+Zu;P8MFz`CLM!5DQ;uL?OpCTZe`H*LMx3I| zZV>D>F={Mvjga{AY%#YiYJ+2qZids0h?xT!98dlB)Bg6T&jUdZ)nkvL*LF0+ z$k`hzWZhtxHKTr}*Xd>=`pFgnv`25drC;i2GzCaOJ;sp!WWu8<`EAZit!{u`3%mny zigdH*omKE3)^R$UOfCqxn^MrQKO0t)cBau+=T4hcuQaiVJXX(UC4@|777@({%eVG~ z;*;9WDmUA)w>gBDIK=yvw8EQmFJfbmJXn3O{B0guP*Yq_NU&zZE*VVz(YTp-yaEYbLK?LZJE7 z*q^s-APexQ{Cl9kgjwy2QXjR}no68Mfx3y6z`|NDiCi@xs^eZ~g-h1W?I`K&vI2e#;DJ92^gR{;b+H`e7$q>hDN%Po zeYMJzS+S$;HHb&LX{&)CoO+*t@>7}?Rb<=l^RZqTDEGI$^t01<{AhO9*lm?+ z%;=U?lxGqY#70ttlz1^WRz;<+?z$$a6X~op?%?I4=?IxfG71#FU>jwxmeu5osEUxY zJfD0GagcCY)4C8C@$*vG?^`n9@B$O^8yCdiHMoK5x2>)|JS3_JNF=exG4=`9u_6r{ zG<$*FRkqVkxk}NWPh}@h`n5M~JMDje=}tSk(MvDsmRxgd?4wlOS5?yEIdtT~iP zEhRu#O%>e_`e1Kr@b{x}*g?&&krI*E8NN}~mupn2g}jvxRy(9Mo*uk=R@eG*Yw;O0 zErYQD`}Jjay|b~*mXP+|ZVG&WHORkiAl8j2{ml=vE7o~SdUA^Q;2o6{_GOb$a~YDN zZTlSt9;Gl#h?q>I(uqO7O5H7cQB_F>#6FrxiJyI~VVkebKjkR#{Yq%um^(H5@TUnL ztZj%M&9T#|hAnfh;N{r5pIhc(|9*Z)w?A zHrm*2p;WXn^(Ve=5M3<2jAv2gadiV-H!3o`nAO1)Xd z@Ku(}nlv3?=#)91EJI$^Z=R|3y?P1pkVHMNvTcl5Fa@eUfL>X+5stir?QMRNLs$%9 zoUv|UC1!9oucImH8!eNo3s=wSE9XUqqFwRj=DbB~VD)X{2NCF@6sTKUp&CgOPjgD^ z5`FOj*YcuHv{^i3m;0Lyl8v)NN6yg7JI3yf}e<9pW8 z7INvf50shX^QMJrK%{;jf7cMirN>sU8!em|boiO4l++pFg}kc}sc>XPWXJVllnCn1 z+as}7erFN762Z3MppR#$9vPtq09AI_K%jK&M!?Cqn4^mjKf;yc^W6@iI8 zk@eV37O?XIE7yo6NfutMzeE-6El9USx}h0@`=9nKFj3eI9A8VyeFVQURW^d{X~OtJ zyW-WA%WsgMtQV;XxCM6{Gf7=>hHt844;QnN@QAEZuOYQPdj~t-2!~KFm+5W%ovLv+ zO?uC(iDs9FQ|Y(tDtk&Ip7)t!Vw-++7S9tyC81zRauB*py<2UVKcgy;CsjN>6|&}+ z=YdEL>lR({6HBPZuouVBSA9jE6cMwX&Pg`QSH9fEZjDkgPhpcFnVQt-{sp`K*$TfN zi?gB0d|uRZdYPwKV1pdO6l@EcXjn46;g;~o({0D3*|XZ%K0D@=VOHDANn=m{E4L&J z_-IA9lMD|HqU!>NJ*XZT3x}A9sa2EOoMW_Skc58hwngCa{b_*MsJl#|RS@$m_t#Hn zONz1HdeSr%iGn)7sKuL=)&*VuKg68Jh+c4Kyt>el`e)CI4c?Weh*Cfw(6$#L}mt%|j z>8$S2QUJoSrW*aog@MfI7%P(ULF{pgRZ(ne__$nlCe?rfB6>z2uejMXwgEVMUSw7U zymC<=vk!WEvQDzl2X-57849Es8TBDns=A0DsncLAR4qGPK_RNI|ZeZbpL8Ro#31i(i z^WoG@o^rM!Ha2s~LID8*Iv-47ICw-%;miqyhw_PRV+Rzn05}8`GP36d7evTU5AlEi zFTg#IS@6@N@&OOhQ>}MxaA&Qz&I2f~9~;SBaz=Zqt?UQC?R&NP<2A)&W5S@#xBql= zi!gC>Jp6%D{IS;nui+1mZv+TmK|6$G7)ySG^&S9smTvs`23+9rOXUNwP)`IVj7&KA zZGoPrHxM9rnM*+bD17qA3J4S4QBQ9m_A?8Em>-DPL?0_4LI?8fUjxZJKRw0qjn~!H z9VHycg3oW4l_GF?EbMzxqIa-)a?occY_E=4FzJ`Gq-mIiPl!n-XhdUpH!0%SQNm#K$K(hjof)VtbWhT|-s}6k zfu5-Zm@dD+GJNLkoX@2J&?mNp==taz43hjlzld{oZk`NTTsc^Dru@DAbGpJU-RG}4 z`PHqK=XUeoi&ljhn89D_?C-6)DrTlF3@ZJW(x)2y_RiDu_9NfT+>+(J zqrxx19$YR5j6ZuGe6KZQuw9FphMQ# zGoHeo`>pQA%X5gNwazVLi;msx;e)3~1e^YD(Bt$71&U61JKy=;@6;FyN^NMRAJiur zg!-jKWgH+b;A7$q{_*R)QQeEJ^E)i!xT3+E)9uFfZsphgZLr2n`|6HCT(4(&A!^qT zM}py_&$efW1X@mr3p=Nm>R3OUf6qI7a+vm&Fvoa-${!X~?ChSU8;mpkD&6~4|98F(3flM5P+Wh?dzt3jp=CFpdCG3^J z9jM>R-!;r!v8ydjmH~#c)9)BabGbk0Y)R`bQ8GRfuJO8e<=QXd)FP!$7<5tGVh>G3 zPOZ5+PV(&NvD^niZ`oNnhrIpFm!SVQ%!GD4Z)n~8`+wY+()%x?o1py0Ub%5uYpleB zX~MU5t24pxF_XLN84tIc{`V&tR#9mxlrRA@VG;%@S-$u!#PR#No$OSw2+U9(qE`3~ ziv+^N_UWv%9sU-aMKr)$@Y@run{OLK#e}f=0D?AlY{nDdSzDg*vceM=8~rK z5^Y?XSAohTxnUd}}oVL6HKgcnF`)s>ejH!^Ok zR}Ee@eD3E~T$LB@?j$($49K?4<`%4FLPidCKi6t+(C}5m#--lDM6?&`dtJ=SCpEk9 zu97nhn|>O%RrIZ`g#r`J&3qbB2d6^lrpW2h?+PP} zqwwz(XQzkQ#IF`LBR~^F>YXabK}KI7Wc4>#=n-#|ZC5<@BDeP&Z+^d9^rR$!am@wF zwQe>op}+4m>&<=vA+65J7=wkA2V6=_sTa?(^2*bseRh-d!Bu=V!$_NPtyby86W$l@ zQA?dh5`*L{MiVZ+d)uJsyS~N?Jz6*ST^Kk}QwZ?NIE&zWd0*wk>?FV)seX>&jZ4@w zNW3{KVO;O(X`7}P+!Yot7F<~(30Ss_%HOuS86kivX**`-Qoi@Q2ql6gYRl%8W?2(q zImSt^1BMN1zY%HO=2x3$DysTIUw^+CAZJ+p)(&>Zqoo|mjs6DxKJL-Xy-+?F7eLo5 zp6HHrsa|O={}!aP-B=gmF8k5FPC#>@IwW+Sl0l>W{4kjEHS@B5n%BOh_%=}TQA{Ro zQi+~<{UT-5Zg!`d7u?e$)|c0mUcUPgP?hahcn5gi>mmP$2nVY1BLiH}G0vqaAVzE}P1?gn2AI*s{SsPS*Z--tb zJ^C!Nn0UCe|E9u8-v_}qXHhdA+?AU%Cw`usuW$(Ah)_Fw`ENU`-qOnaP(s5ldW7-H zfhQ$~dJ$$n@Lxj5a)gLU0uv6nK`J-9K z?A3xk{hzORFsua6io#vY}o4Mp*^XZ_dUJq*e3|M9Zx(`Um-^^-RaeIZ5CMZnvTA(AH2=`%G9*gE3 z0!q9p)M^iTo<+<48}E|;8}B06@1J&W7Z+2OriLr+fM$bc?){wX?CP&82ya2&cEMT# zrv!0-_^(EWMOp6#kRCMl{j5Va4vjqWcin}|lPQ0_7S613a^zDPYcDmbb$QRP(U7A{F)_VaoRGP=uR;`ka#xWELc7}Lk8n}z&;LSV$7 z3nm46HxnxH z(nP)}`=ObO9D8qAM5PH>qEOT6wp9}dqKFAVWru67Nl9)$K|=W zz*;v`lFn#UegusB>W52Fwq|c9PJS7kgU?ae0%8yaE+dZ^m~8V7!i!8$=)fy8^@!+=tqY-gmxMzV^byuRhIuN zY!2`FFR=N|-aoLp((#7ZA$2bDl!vQ951z z?VZH|ZYzmLA_mc`MC4cuq95iGpGB8^9QcbZY>pr+^6JUARYD&~5(*CZNtN0d1zt>S z0XK%u$IRGa25;(h=2CgKW{&U9e*)B{FIBDY3>a#VTUBVvZhY%c_nzNpf*w5~!|V}{KD^vSvF92LpvJND=fSq#QjmQ>{c@4-KIau(B3%Z(c&{az6@N@HMf^$vmZ~i zS2wo0XlmwRG4Y#lHxxB7s7JLLV9S;l5mwuuV~+EizCtj7;_#}2TO=_hl8ok?e*Lj7 z!7r6q(8cEqS}1fZ%a7Q((Nj{2id(xD?1>YzLNTF){>`~BF7Xr`fZ@dCx!4~_J{e3QhzKa$P>CYKfZ$wi3c+r>xXn*BHdcd)+BVcM zO%Bdvqagg5Lcwd0`0>t394;^(QL9Y}HJRlRouHV!69x@qW{f;NP$#nO*9$&Rs`Mtf zixX8^S~3{)hC?WXhKl~LKV?$0z;L^`>%VckWR-$D&d5iV^={Cw0UHLt3BOo<55Y1L z;kHhed&lv~#{S8a%wyL(UnQQCda&)xQ$*VI;k4+I0ld6DhB8%uO7$eWV2LOgg^ zH6ed6ZZxh)TrX&SIap9P8zvT=FG9P|AV-cT+fyT2EM?GqZ$CiI+T6A8E=GB4z`nxX z*nmB~tBu|v77rat5&?EGxWG5i$)o=?%Kkj?T12W+HdSMv5BY4Qq13O<(`mJZ6qBQC zc4a|3Xuh-g2XQ09lzZ}8;d{yx<}yQx+J~8!q`|X6b8E894Oql@z>#bo!3*F~VZXwN1x@ZFyJNku8U8*#qSFBu7&Eqh!^ z;!3gR1!nn4LoAF05T-C0w0&QS2p25PPd;N6cwT3OD{gO`-arBpCG`d5{`Bh^DDD6^ zUJ3^CaC33ynY-Bn-vIEr4n*zNk-IE+lZ){s2VE_KA#W;8m8(B(eKBdWzo4s(!f@}SFkeFcZU-~AJCY_( zOOiQ>Pw3~8waZN{=L}2?d*g59)1p%Nj)&Ub-e@uZh>Sa$F<3dw$E`GVs3wDU#|!rT zRJ3so^5LY|4U`!+#-~rk|9{wf>!_^WZ(mf96p;p{yF*I4OF}@pK^l>6UQ$##l$Hhw z>F!SH?(XKLU*IL~Liqm9KIiT;_PJx+z4!g&ItDTptDahO&d;2mIiHR=Q)iLX6+k)! zkvyp(Y}ETIDLZjM^t(!-gZ%^EC=SAEW3=bk)UKY+t4y^yQ5QkB>el@&ckten`l0$; znFXVvL9{ih%1hd1oqd+-Op+244R#@?_7}S9kYHseP~nP*HXQm}MZnf2rPigQN>xoe z=?LGcF$|QMtp}hBy8eM(y1vT<2=dX)-l86HNl!u@d-n&Q%;pN2&jq~q8+6MXGyC8A z3)8QOpGI8P5PxvY#wamyWoH52k+kk5oqO!%>oxir4e&tF0n$q;WopHfx9h6mrnDws z)CdxJNyhX}?9zGqWAe&PC0~c05iZ(QLRC`7uH(u$_o_pqWs`IjB_f8tPH&;c;l5zU zO4IGe($-2lr}J-&Yh2OxnBbo^zbPEI#J8N=lq)8{9Z!QdLft1DXL`EqN5)N~C+=rU z5#;VJis%amUs+k%P5?%Bj?+@l7|xl0;jS!H@f@i<-G`fI)utGy-&{`@z&Lq)5LNt| zySi=IWYSsNlJF=o%*Y>Fsgyr5(SWg%^(k8||HXinT|Ehjj!!>+9<>WS?xUiZt_M(2 z0v9#xgP_v{1YKD&%*um_UhD>}{Eg7Sd+P}BKuiGhnQ!KE@gT`R>G`-fxfzlF^>>g) zQ~>t-?kiHkhvy^!E_9oPIHZS5jhTQ!bVmpX|NETg4fu=3q<#W*#?Qd-pwPHwQ#wFM zoBmeV6Gc`8qj2g{YJY^W%N0MPKYPy34Ofc23cLf7pP3WYq+?RM0v*m z7sLpJNsjlvgTmm&JFIjXlr|STT#g4f?^MqVevrhRCh#?sTvk^JGCb4vMF0<|Jq0M#d#`-+}qwn-Y3TIdD&Yk|hjR;H*=QTAn zRdo^+Wc+pV2TV9?<_+S}45GE=HOw{4?LJ>31=Gbvf@24cv#c{e-)j&!3%P1ct1$33^d)ncUfp(pq#(B4jZq^uqlz&{mK9 zzg3r_X_z1(8{2vuyeaoQgMXn;Dpgfl!k%7oQo!y|V)Yjvb*$^XuXOq8t)qOX&PQmW zOAK_%ZR5vxY@MZW&xWu!*1Qv;Fq$tySF|j1%w(BUQ}!zx1@B$;uS-9_0k66H&fI;R zn;`a%Bi>;^+K};e37*=`%HUOhMT`h)qSX?bA@694DuXbUWEs%lGDRfj;)$uwx-eU} zf?#i)4u^Lpu#V1zpAW@e?k!tdLZ(Narj|g%yW3XpZTHkDSkBw&4W$7FzaX;WiVCV8 zjS!-z&KT->QaxQh$BfLXcl=Q}@^^7ULFeg-1hYg0`|{$`Pz(1gCMWGAP=+~QZm5H| zxtZ+EAW1Yu-t=dt70fx}1)(dKqQZgs)niJmOzq%~8XFDLreEHS5S!?hU5a&YFlaV7 zTY-NXJ##v@%ZFQ5+X-)mqByJ>$h5ulxVdr~C$4VPR}DEw5=YPZcVZ0Yvkhfjv6Cny zT%#ZqR3fr{ALjdLe?8mfz~ zL0{}S^j@De@t>XPf59O$@1+PB*aS?28!zS3Q*CZv%1JN^*To7AA91+&#Xgx}nI? z&4Wh!Dqq7CzqCkL*zbTREWBMjgC20)>3`K+Xn$GLxcG(MlNo*KD!J|HU)L85+-Lae zl)>-+8Q%V8$bJ+M<^3QIbA*G7p$&Lq!-YdwxH`~%r(lm7ZT#Iy2oi}f0w~eJT_qtg2 z7v0nkTZ{i{-$#+5A(eW#2xuU?(t*=5n?QIaD4xy*5#!N&mASM`=W8=jY%uhsR}t{n zxlymcNsv~-R%p35&8!p=dm%c2C{@@?IKuDbzO0Ue4mQo$G~pi6s4B2XbLZe51J_u< z5%u1G;W=OWap<&xf=6%q>L^iYZH1Q0T12c>ZH7-w5INTYs;Q~bQO0@XUh9e7*_Juj zoZ1C72y-H#tYEky-Up-kB;&;VS+~xcl2x8>8$y_8hv(JhDFp(se8?Qw0{&JII47=? zpq>Ed*5It>dA3uRzH!F2oFSKUNAnW@OX%#ZKTsFvt`Q@e?UIk;C^h=FqdfduD9PGH zyInbr*K@pIZS>*urkqh6NB2IICS&Y;Xwg;^M;vrEDh!f71+#WCWY z`FSFSE|)73|587naEdF>B4z^D6Xb(;*Pc_=z`nnWbkGBbsJH%F!W*TI`wWr;A2)ML zir1>NDx(bW6W-%Ft`H{80NT^B@jc6`lFOj37_qKCF$q_Zb!edWYxv}t4=M+y%Tixy zAqPXU`+hSCU4gG5MDou57|}7NiUA1GHywbp<;ZW28B%Bzm(hUUMAl8IS>g^B%Oi2b z&a*ZLA}gt?D-oaPZIX4k!HAUXD8Zm%c~QX~8l+BS$*ETz^zjb?mU9*G{2~*vcD9kK zhEpyfNtJQ&pQN#S;DsNVw*cMZ)>Sk`i(GA6PSZUUs|&pcTGu%NQ)$sdt>>2U?Y|g% ztW_^N$~TQh5#6>}yNC6n^n=b$^4%NM6A__6K&Bc^KIyBO=N*!O_#b*vmd3tyPIrec zH|x(u%Z_+98r#dz9C5ARWXj|;@4vc-~3!55Q zWZb)d?~VFytI8xtV5nvQ5yMIFcFskZ!^)PF)@h78W!SkW;a!4sso|NI$H-w}?6h}L z^)pLhSu2E{hO(*H3+I##C0&iEfXMy120O!fL$rn2l$z`(!9Q!c3*Ub*sSzrcfqa(N z*?u<|!uh<0ekI{+=2Ki6iq6*HBS`eFoYjXK{Ry_5wxtYmck@a8f(1Bc$eEuae81~}h@6{@Q zm!Jylh7pe`&z~;CZ5iS_Qw_p}^9K5-N2UigEzHbZcwm;ytXz%n&I@=NLxDzCrQmue zbhELYv1$S`8@erc<;3NX{fd{~I~dvsTqwNs&`M%?swyHl;O^-?Phs>Y~Ouz^0Ex0K3Hz>NY4jsRiX;Z!!~&U)}D-AA@aEi zy#3g^^0_EveWm6ya84R(8~Ry@fG~+;a1AT?m^$Ri)>R z+xAz@DuuOTI1Q#F@tmI$AzlWir>GemnXdA8cJ{fd*INXgh2lv@M)+yhWEqhONoCVt zVzif?96Rx>c0av*Hs3S2Ia|Zah6gU`j)nGB7>{cippnGC?ZD#yNE4O~lMy;o(zh6w zy!~DZkEYOKME)zReq6wm{d;!EdyF)(&Fb3uLzRLvXyir`Ph_EIg+Da~J(Vr?Mrv@+ zt>Mhm#W@k{eikXvix+2d$~l1q#PQU{*0v@56br8URe0x8sXDMLl*|?SR$hp`PJ2-w zI4p?o;E!{s&OBwvTB)k=<|$#q-w=gArYWOD4Mbs3 zN&B8M!~W=-8OEE$CHR~=K9@A_iI^{8C|{~^ne z@pt+MxWo#0CRvxKQ2!bWzOcwq%TVWM?eB7teo;qk0FJ*mw6J98?@23Gg$xDV%+)U3 zQxL_0GRW=f1xJ>hNB6jPO%Whr@g!m^J$hC@0PSo|bp+h<_mKAm@cjQzoWubi_>*|$ zR6l8x0&I+9y5^?X$U!%?L$hu?D%WIHK3z9OquhzcQj%VOTWEyEiJOE4CGiY8vjO=d!`6y>lqdy$Q z14sY$=g^+>6V&4_rsUpD5^cW|bg=}72=RI+-ZYw3=8x;4nQCcIN&-6^K^MTKfpxyG zL}xik9UE;wmz8|OWtkr4!+W|SbWs4%SDo>{N}Vv1%6g?87}%vJd6vzMD}mXl3jplF-TMMQse1NBA zfw4lM`^YH+k|J2WdFIpTzo=`tmgiO@A33g}U#zOM{w+w=72M*D0UCO0+9~SiRKs{+ zpbZju5hfVYMS{Q5BWMs!Mj2sgKCnP|*A`h|^wrSjkapG$^CZ0X=GgVPf1ro36htIW z5Y>0B>!Lsaq%8~X+|oV`y{+f>s@dbW0%c!zal(67WF!L4tKyg^XI@N=`7XCc`b8O` z31Ln~!cj_=x=m@xOf^1Um9tk@=(c9UA#%7I8%a7WictMf=-?{asF){wiw@nPH3n$j zQDu|9ZPfsbC$TG~{p%vu{=AWD0(-AL9iA;;prL{IWjB=X`{eYoUc;3h&#SOCTmHaH zQ-wrg_yua@IhSiENXA~h({KIX-i?hO4imG<0v=ZTg4*r|e~EBI1ELpy{rbS@DSuc{ zL3g;(D-=i=JmrbmgcfAteP7I4-Q)upcDs_qlB=sKyQS^_pV@f)RBg}%Q zEU(vprKNlg*u6-Y{XQR_9v~5*g!%ZriCcI;seKHr31+E{rT7M3M; z#orQ&99m&6rnWaS?VHNo>`#|`Bit_aQtpDexfg}9fVhzj9QmktSCcU}hrr*ErTbZX z*3V|RZuTYJBWF%0V&Wdp+U!ke22`g)R3Waqozs>8(zBsYeCM6}iiNux%aX6z%$tZ) z&xOUhv)_!2fj-UeBZ@3d@gSqwptxa8??KFU@Yp6*f{b5|KyY{h(vp&-%eh4Cb?zh z37J$H(_N9bepe3FF$)xHbvpQJ;N<9Zb_7{HTmL8DtZc&Yy|3@B4Dj7X8N=R;fl|f> zLTj#=C+p8PPb4}pSq5Ge1*UL~r8yB<6f6dRJ#WTqUK6kaJA62Yy;B%vrw~^(-`~FR ze5Kw_CUO+vdzJ}{@pQYW0P4=JhUk$rw&=CT zFw@hjpq_NMKYkO4JiWL9ICyto1vKj20&&GnoYT-veQo<{5$McwmKWjCYMW-Oj=h3i zr3+<{yJdjJXWGqvjZCQMc#mJF?umRf{7UFk0Fw_Aql_dT-~=a`F}Q!8TeU91b9bW1 zPi}yKt8Z#sa$+%D7q!xGw;Ow6o~^i2?x#QEv=QZr0q`LKY)k#Z)s$JMiRC5!>hVc0lC)kLvi zE(l!GAGB{o7O)WBSs6YOF+zc(|M$-=Rz?1(1Khn)wtLDHAKiShJFK;T%I+cTHYHE`1qoo)2QY54pL{= z!hGJ&N9tR%IH?!m7=ZEQD-ML@0$-1GHs(441Ab#^F6W$PlRV{I@%qDJZf?fG?XMyPO0poQ z)m)=zb97L$=&AVJnVM2%BBz3zB#hX#-v`Oc$CKRV(>T7cfIkL>+rmVl#%t((p>_Xf zmR`@zRASyOwWdY>8ruc5fE{*%L_SMfkSkspg?jUqyaT^#N0vJ{PfXTNY<8=PoBA(w6bm$hUFD@&e9D6A8#5WgEAbD(~68PC=ODqf! zLmkBI5}DYh&GY4wlTJ~7HccNFf|*A5j>TC%UW7GPjhp2$;=$i z+OdiH@1Z3)xC9#(&9D5z6Hwe|bhq~~rshRK92Y*zv zsf+)fVCl#6fOW97{vDRE&#R-!8op)X3U~in;po><=^c!ta*Cu+kMUQ%p|ckImnh5fILtCB|-p)PMZ&y?#0UL2kmE{ zg@T;xwDT^qlkzfxx1Z4;sQP7e>Oop-Ee{&co#xW@C%hY6obwmW!%yvma?xvp%{OXr z@j9+9hM-948sQr5-mO6;t*PXwUjde5gaa@f12j3M+ZNG>{3AP+)|B*CC&%{nuyJ#% zztRdw0~m}e*lRczo}vpSpv_y%7dTQe1|0;!FP2;rpN}L{sD2N>y-qpr`FvZL&bl>x zW-E;Jd^#FO~V3YneH%_c;dMd(SJ5=~w19IY3_Qf6M=Z zWzlC;aHZhQQEHRk?K-Tlhf)7UB6!ATgsEF(@1uYW9v$AkT$_ehk%bK+zAXNLFgcw< zZthWtkB7=4q3_(RyCdmq1yF`-59v^tyhq2}w_wj-gla@D_W>@T zFD-1Mr_}pg_k3G5L-?GCr;N`Amo*b;y=ii#&!cmPx@K)`8r zwuI)v&X)ivI(Q~of3O|^)dc|4E}ZuQAHdLi;0u?Cr#pT~u_0{)WOpMG=s}4nVgobu z-ZY5+ft47*0(e*3tMUetSD?>83k^PencC*;#KkfCb>U@swz2m=WR-R$icPZ$uM z{1Xje4+l;n%D>48KFyNAn+QH+DnB&Qo(eFd#~mY{KeUkmXrs-SX!(aX0k@tBs*j4W zJ@oFAI1rV@P~&~{Q>p_U(0Pa0{Sc)5CzAg+wcv@b4ghNY&tJL(J>hDV$tJ*D(m$9+ z|AbS!uFsLv%E;ac4`c|v2q#Ala2HDPzUPtrM0&9i*v-Awcll)o`9I3>IqAfT3g;}3>wcyOvyL4$jZsJD)2sx9 zhn2|jRYZmV1*U}lMSN`Y{*M!V;xIP5{k?F1%$vQrsIrH6dS%~}9%JFZW8?tVX(K&* zKR4d9e^`%_8F+1%kPm!6HUFbDpN@sUtVc25xr1{WZ(i&4_Jar_3}J)sK=#+_Qy4p; zn<9qwabL}Sb*%V*hxG`^tvY5BN232Ap0|eovy7|j?$CHwBW;R+zsLEuUD8{RxM^(Q z_rC&pd*-3dJ-`}_?w*2ydG~K3dGBQkoNm6kSFXWcO9;9&H9MZaen8l$0Hj1`RgC(d5MrU+5; z_*Q^D6 znDrt5^*>-u;y+E8bh~%pyo00Kkg`c@;L zi1>CMk47$th1D*o;>3ghCTlZIzKO%7k_R1FRT;qih8~Z&eSrI)6NS_SHrSfA?9H=o^0fd>(*=nBZRgd8Kst>JhTHIVB_L_YJGdplKz`%I0k)b{uh@3?PviM6MVw! zkw^9N4bVLZ_;rt6e+_iKg*wFXQ3a9-H~h!1%)|uZbtE#J#0Y@u6M^;c7VLtDb;DTF zf7;V4hy5Du7XAyYyw(hz@&iZY1MEHAaPUCaP)$`^wK-Pp&z(w!UaBTKb>3%6kSg9Q zm~qp@qX*#e9_VL>rdi+LZmR+vQ@84T#d65J<=~!=PB&G^8j!k-d{f$ToDzFM#&XTt`-BZxEoOr7ls>|Y zzH0h7inv!d4&xLXB2k)I;Vk}5}_r&0A>FiAkBlcjqvX3JVGe--^S zLp)o!Ny>l}YrJ;=5^1>SH7=`rJ%?WV$$PaT2!i6u`(B}w`ew_+_~k$Z0T{HPT#^$h z#s}o+0X$qHq$r7I&BNGe5bK8DsD=|&u~~`TJ(ke@izOzu#WnKZ@`%3-2IGqNdF*+S zBj~=i!1T&00YFshl@`(&Q>ZXQk?aWAU zz=y=ch)$d3WBF>T`nxr*2c*M7QP#6>e>v&LSb@YR1BN#FYX_PfKFTGqjxBE&mKhB9~~GU?r?<1ff&Jd zh8bpT{!kgqUloJ2d3`8}Sx0|qXV+=Dp5a8qYW_=jrG4j+`-;iE<`CSdS=xF!gzc*c z2rwRQblONCwXA{rOeg%J`ZO;$9=(?4GUkFN#GLt9o4D}QV5wOM%~dbVfWl+Kl+xj3 zcNhId*t*N&ZrDb=yawrw)7y;ktt+;V$SJ4*+tX}fHG)Cz`8x~^fcUhDB$65jTWDec z^3<5(G=0z`q#$fGz=W)@fzRA9!`CQ-D%493+{3AOZp>-AN<@-#m&>z=GG`yQBa; zh|hFjqB3ZQ5gz2FA%G`>1-y+PxPHR-umGEC=21d^0**>H!}lH~Bsl;Q#NVf*!df5& zfM=yCp0oDQ0!+XdJ2fm~tTVw6inWgf1Ajn#4=(?Tz}|ym?f+VW0{aQV6C~h|WKUkti_zsEJbCg9C=&6n5)_W+CRQdafB$D? zcD4Gnr>S5w`v$uSZOVnz(Z-0z86VLpXsRTE=^a74wLh^%V9byNdPeemS#ZpQ?IyCftyqO9r5TwMsT!r2dll;z`Jm`8(gh@uH zFr#;4-!Dda1?VON{ z%z)@;abDz6J51O*J*@SaZ%J`zvvp4B$Eiwr&~2K!~H#jy2D zdKWBoTf_*T+a)_!P2_Xxcm&?|B=!}^XODg|Db+|vFeV{zxTu)6LJ-lxwRspi zU|LnTvxNF*MSb(|hM{2mTQFB@!0?*EivpqOpSZGpnG5{p$&ar*zI`^QO_wcu zc_PjfRPl0gH685|8>Ml7%F?(2|LSF19b0+g1^Uv_uDTtrEYitFkoR>DG@MhDx3LMjjd+b-`F&O%2k|oY>K1rH-t{30Wa8<*{E# zi(-#BT>C^k+doj+nR1G~`YbD`w#6(#B**ZM?H2{jPt)K^i|1bPYTM6moj;X<5S_U5 zM%;r5Yv2BP)<^$^1al+qh&P#*Q2jgMN?bIm*VDWlnLjNm7bZFi^oNdbUrIIjyw$AO zh97Nwa^z-VRZ^c2vrta0URjk0_+$#jrH=?SWSL(1V)B3sMt=~YF!+cb*=rh zD%QQrE6=#1dhqmx3L~IaOw$R)Al3E0^FYxCB$rZtml~w4S^cD{L&|B22=o)}vAPwY zBrE9da;2U&g{6^lF!wdK`F!w{SHXmhjh3D}7VK z6Xn;9GHy^@OwGZGq(xSIOrLnkY0153APH;bvYRo-)QN((P5x@x$5?R0eGr;sofy^C zlSr=lgOeks8Hp|Y2(YjgaRE_F615Cvk&`%*~Q9;N@U}> zG2c;9*`vQck>#LaxUaEy3kH5k;8fR=7g27if-seiOI%Q@{*tx4_N-h@2ajy+acEr2v|Zl_lG(aiws~?l zuJtn|GCwzlK*UQQ9>NE$_1EJ+S8t8 zVw^!?@e!5zNVS%{@UqBqmOjs1cv#Fc*&`!$nIhKYSnfrBi1p2`@%#rIW1 zV787?ItGIcLlsj!OKlH>hw@X7w6oD$rd zYL*NWiJiUuI^2gV^_{OZIK=7Z$jELG&xPncOq-myP@Voj(kjU>T+;$Yri4}WOG6Py z;74ABrP`JHy@}(Xvz*Cy8d2-z+C@2VL}{c6DWKvDZW^@MOXqQz=BaW0-Z{XyH#HN+ z#KGx$ZXDD)#4YsaWmnvw@j8p9ha(zc1N`E1YB^~vxx*wGgRL|~YBbVICaE&VRbUt5 zCwF&GpD4;cg?o0d>wte`PZC-fJ$;CtJh}h*muj;zF}C=?Vqx{c%!K`aQ(Y+)xZCY- zbtQ{KI33^s#z9F+^hx0W;Wlu9Z2MNz;mMO1?e{;A)s={-{@JA1D#xQsw+o!?S$l^V zSaK>M_Ozq??XO`Oa^Ej9!jvyPB4gdQ`9?oudJH4j+qB-RQwk&%?*ZXEuE6e@g(7c0|UR_EgF+v{Ij23vnjIirp&;&U18Cf|J990nJGFx z+~ck9F#r4#ySo-%)43B8LcgGv>_AHf1Iyre`(l<_{cCIboZ4wLKnd%jvv?VcKAO-ZXFFvcBa6^8D_0dDF^BZg5}r z?Y{47)I(P*Tz4I(!<)Kih=`Eesk-p+FumIb(~Xv<^BK$J?`Zso%{`_z1Agf@n3V+Z ztEm^Etab(8nGlH9RwP@>x^C%+Gn|%QAP}MDsCguiH+@MuQZer-##WPEYi9fN&Q3#0 z&;CZIb)em&!n(JLY*yzj;UvZu=5+JV64cAI61T$&^zIu!5WD<*d5=Q~DKBRy-{;iHn7lPZ}-8ANj{8vK{(O z%d+<5PP6F-0$VaSn>z(KM7VJDSs+$r+}%GnxKVdlf+e*dBcIPk^?3qkR-DZnicLL6%yG}{s}@s^M(dGZ z8P;m6yEE|zUMMLUj(@g?L+a#MDiWRzpU|-Om^kZ2-RxGH&EHPG>kqY)??ZFiZ$gI@ z#NO__WB(#JDz>$LTsV8xCDp~^an7Zan&-G*`_Z_lU~{F6M%`o?!RGg_0&A?w#2G)d z0E$F1%R%StnP4n`*~lmcH!kpJsFafo0gJo=6CIgrYAHuf3Qa=B%VD_V5+uEp33_%{ zs!iX9I?=fj5Oj`RX7YOO?N5aLB51uvhy>JfTDiL^|BJM@Ud-E~x7aoO4MP2SMJ6NqJnt!CQQPg4@t)|4@NM}6J(N?8ea8_ECPvPlE5>f)H)l|m#k=|R4o zJlSTXle45G5ZT=V>8O=9tmj;x^ZxKq5zQ+q9c$NuAQ)#o72>za0?e!l6+tWNYib+e z6|awYw0KiorLpK@gJY_rf29^j3+S6%zS;6pKUUS0eks?3wE0JjXmeYjwPH`&gLuEq zaNk9CxU?%bP9a~&WLa%PjK$gHTtyIXg|s1&MG!XnHXCmkZ$;_bU~rbpT0z}*yt?0x zwmWsb16<1WItOW7;Wpc=A`hJ2RL8U2Unwuhtc{CvF=BmXW`od@C6;lXnK(s_a|#as zsV+M`wI`V={e?VX@#fQ}eM?91udLD)`a#`icc<0acrDvr?&B>~_O9PgFrBr0H3yCj z`$rh!l|RN8(u76{NxY!DB#W~N_Am_%o7}-fxoVQ3#(S!?qB=S7u2!9WZH;Eq3CDiq z`NdoOF;9dL=y)&VV2UJVSsZ4b86KAMB+1FH{Y*@<`i_=fR+!T$*Su%~Dki&F;_TH} zLt#=hPGjnMesmdA4d#19K(j4&I<#u7T9VX8Ws?#Y)jGe?Zp0~*VFG<7jFIg!tj@bI zI$8eNv#*sIvFTdlT7YTj2N^g|Q)U?dDaIn!RIOxHd;YTb<9bc|9}OWa%ayNHg?vQs*txJ^T0on)^w|ht=XEgL5HbJKo>G|VqMm_6lx^)d@kDhC3h)_c$DV5%?*M!dXA0iLa)yyT zftNIKgY!eHXt4<-pD%f+8hVKH-U8*OE8pnD?=zZOfC(Z8=Rpj;nM-0AeYMF|9a0pT zf8NopkY|dx-#WghMA%8Ub+9q1|2!?&Y8GfueS@LbYNG77r=@=by~FXHg#L-wT^kT` zgjTGsuHp$nwyFBG7MZr;+pj(~Z}wx6&T|cVkcd+1?~BoAciGJziz&mV{1#X`dvmyY z^fsw&dD@ZQjQ3}Mbvcekk$hGB5b}CDQp5qC#I3!*Y-8=*wlSp-qnEj?--~` z-jyT$q|lA8i!{nDgT6;CGsT?PKN^GFmsHQkIg&!-@&#+e&jyyl~G*mzCEV+m5D~Au>NtDk@Ke7*#+;QjCWWJSjnapjB_G^kM zORRfTWwC+6)ca1`F_SkZlB*I+>h6g8SqJ2O<|igSyzTIR)lOx+@SB92!mc4pi`ct$ zbK4=`eHE7qp^;1yM;l&*t;EHRzAq0Ot`rNv8K)&oU%POk>M=PQHI<+qoW@kyZP%bx z&d*yUwa`6VnA6{-o{!s43!(a}&7b(9Vkt6R#J5)&qq({3F^-v^~dJ+ilm-h>t81X22NW@dL7&jlL+$i z2IU)Xemq%E6=r-KRc+DKlIXo(%Z2V6d=1t`H2siz_{Fe_B{$ASs`w}Dk5`$%m4@Yj zswTGsn;~az=HF&~A2x>}1xk=oMRe~vpN;4?xx^~3>3tjO#n23(emPrv;DYxm=5cLQ zrug9N#inR#dwo}yod0d%K={x|ph_(x4ClJ8X?Kl(JWf*?>%$hR_a|TM$vC^eyPDQ; z=ZtHtp(w@mTu;fzDeOfpsvRXn_IMnXPXWSNZ@wqUpAxg1X1|)&k!RA|rMG0#=06K9 z3fL^vwXt!WEI#oldwMZ^p%wVq=&yk?#RVI`2P2de(3zm%l#6OMVB8yz!iTR(4Q|b+ zd9-1ganb)!XAHaY{|xD}mtRkmbENS4s2&^{92IS~Q_B)uH@UJ1D<1b~piK$D#;dt7 z9b$QgNqyA6D6`Erf!t3bRDl0#Tm7i7TMu;z^C5Ee1g>g^$qSIoUdma$n2ftAK$H4kYH8iDl z>U>>~{~_CbJ2O}>G&4M|SL?Jti>mR_g2Sgt-Dv5pul5K_9JvU@7xPZb*dhq0Bo=-6 zT+c&&a9!ii3!N4SH)3lodncWmY*GUsw^cQWggfP}K!IV-H#C#%%q*f;p1h&XkkNRU zHQyVu)Hh+4+xx3)%DUxaK72K$NF(F(b4rspx5d<1j~9hv{NbIqZhW6V^RjXFz#duk3pcN=gOl1Dop9Jf3||1x>^#i1-sc z^jO#ru2k<%aob&Ax-RiJFQ<;S9<@z7Ad77;9Td}$_vPEu$Lq@A*ye2qXAe4XuXlV) zDzA5*AHh7BH6d?)ejPiv{)K8)TzT}#Ju%!1q+kPlSU?))+?)J#g6JG zb!wXlZW-x9C?5*o0`~MSMZ|Ai!!rx#!06FWZ;Z0bW?x)hxH~w_7qQ4(JZ!v+?j!u> zRrnYkUrV?N`$fqoJcfiWnG9l%f7-pr?E8s>Fyvd?kvTUpn#5|?>TnImYQikqLJ}*< zoYI@)%vm#ZH+XcNT`!kNxL&e{Rh@_R2O*or{)K{qzh8^3E4_?RblBDQn7b7`w_U&1 zpr`G+*3q2y^1$vLS|gtAWVuU!#=)- zcTqc|xuHkNUlN24X9h+cXjOQHP>r?i`~7jIlqir-i6TmNjl{f?I8@NOHu`3m0!8{`0DeLBavV+CzwyX^?-u)kG7 z`0}`-n&q*~J$GciCw@eKEUWxPo-J6mXXdqXo{_Ptu6OOB*{%`nl^sdA`ghO_5|BA6 zaXsrszZa|-EAwO=ke?$SMQJ~veo<&B2>L-HdC`FHBQzt8|5E!X!QTr3FXrpEK_u&Gpb4%ujd2>KK z5tjb>d6HM;)RZVa_lSL`L}90W38& zlAx=icSCD&w`6sbL6dxOjOSI?hdq(LXiJVk_;>vG(0n^5(n-RlB9C0zh(o2sJbSzj zab`Q-u+e*Y{|JhEl(ugaNEgw(IQUfw+RzZ%TAKHW>)e!)Fdk<7iEkE?vEOK9OE=$+ za!T7MR+(5ma_R&=r_+3PzOFuxdlTSgfBIlCRLjAYwsg;CXM+=y>nTPA33Em(mv)(1 z^d~**^HQYuW9d>b@E%tBYnbuRlOtX~Q^dB@V_go-oTNs^otl243nq zhSigt+Je_;!f<;6Pu#X137Svx+N@$&-wOS|_J@u!TFi)q_+J#)7l= zj76w*_=C%SnRcGg?UM98a~lt?@xZmJ_8=jE$m?+q&ZB)C8yGAmQ6~Ba@@JK2J7(S) znJj8F9LdcxqZ0g5{glx)4`#4mL4CBP_+Un@Cn>fzq$YNW&fPs7oX;#O!*Cq%r!gB3 z@XrcC^r)7D*l-WBtxkay?_xTc%~WD$qRjgkO@2&;>(hinFVKlgT&?`Sru0-1*&y(@c& zzSl(cZ|fa)+zw?f`ukixJ03R;^l2Wz7>Zoqi|-zBy8IoR8f)j0MPBT1)cP;a3!|?b zi&9=#8M|h#T7hQX3PyK)eRuREmQ#`c>^vPs`wf2!^M-s=3=@LLS? ziWiCO1mWUS{yWOfk)zo=St;a)&{*~W)`!(j4O15!GOr@Z%=R7aA4(`b5ddi&3c27c%J zQ5<`PHG^%_4S64)K;hfU!Nd7W9xb2UUoLW#eU;}?I-pN!!j=w&;-1u`v+Th&l^y+K zE;cWqzh;w26cw9)N#bt0>Deed39%(b0gkI;#XoMsro~sOl zoS1ZFRr#Pe-36C*+8LIZy7#o!$-4`s6Mv`=W(i6joKTc%ueV%JDIotmWBL)6ihR!3{`V)^O zS3IiB#zdCo@U4t8S6Py^ZUsAr-Lf_bKNDl^sdYYO#EO9@EMd7&2j$#-s{z55egIkY zzVkn|gUq`KT`c*93!G1}5Av_t>=ojs>2m`UaK7@pGCKGG(IyDwP|fHpTN5kWkYNzyJ-#>vUL(#BB}Z zGHL@lXWF2f?^2%Zb;+lfFX%D3FC`^aRDba`tJYbUsbta`t$^muqc^DpS7|!xbg$}w z!sAn9)zq1ldA5gs%3BJJ3j5b%CYjarpJeXCy7LpnkxUjJ+Y zGw4{~LT< zIP@oWf7@M6tZjydtgGO{Qt#*Dk{qv3q9PZ`E{ek#y!+9|O0J0ZBw0ugrHJk-k6`

    8)zOfvpL$UHj||J{L|BsVqtRy&evCz|IH zmC*toyUGtJA~C~2B1oeV+)qM#1S_t;e+Tb1hkkKv$Ih#)qmA(Tg`WHOg#MM~97Yp^ zZR-Nm+J&=H+BK8uob2x^I_QdWX0a~ap$fW9`ck9GrZRv!I?oUa` z>zn10fTSecHrd|Ex>7lVucoat!t5V@Noikn6c8+wDtod`^T@8j%<(_Z%`IjYf}E+j zVJjCzyw;Nn6tlUYl{TQkrtUt74<|K#)k!v-G6X0Ia(kEEF|<87bcD1o=yFXsZPZC0 z3STDz3ugd>6CP0LbJTB6GYHT0<%}r=4?UE+|1ALR1Cv+@YD>% z8p*Wv@wOBKTeKyho}X7A!rPO@jPQ(ebi^mO`sG(fYUp2xo6Q7VnQVPLI$_g&1etF3 z#v*JrpfZ4qEZ|n$bJAqEZsmw~a(=HX?WaQ7^U9?3yhL|)7q#ynm5!Qp=E?9(aoBD~ zt78_CY&~$Zc3DeYtB=s_BeNEjUKHP243PRc3Wg84YBMcbK=wl-u>^dvPdsI5gq#aj z@^%b=lGUItTZ~JsFrpn^WjUXy~wi@%Ft~zkNf;2^oXo!fX;3dT`V9bu5Vkt<*oQh_p9FpM>x>mP~@&n25e+r^Xt2An=ePsckcEHGgEg15+6@ zkJZA(w?Msn1!5Z90=M_$&A=dAd8Q@inNtQ8_$rVwmJ-uNBdUCWU(}iD2Hf`~<;7D^ ziEdaj$9}pp9>xjPSeX(UXl}}Iz!h1#lnJA|$A5ALTc0;hjX~xW%a1>z*-)4im+X`l zPf#Dr)2e2M@OXe*+(+Wy*=AVw4m{n%XqeY=#1$e1xBRq#yM@h`(8_R;BcY7^7CKqz zQetGfM5hGh2)sRb+uitJ-at*~F~-2I0RNO#%UV{bXYNhXS?xTOJlEuvkS$NHTEpur zDvYPdyg_k7vk=~*RuzxECn8C-h08OU3ND&3n0rNEbA#WtKRK&p(IdXIpw`^$K z1cscr`S4wJUS`a@YblZ7?JMy=E z%$)|!le{?2- zGdMUJ)KlX*Qg~Q{3k0&3_2fLpebS0Bi7NX)M&6LM_W4LqjwDDVIN&Zf#dLOHBU-?j z>A>SKPszvrJc@(Q?LbP=c5yyGa=CYf7TDxP^p9YWuU88M#eN=Sg?Ug=Rr48@;H_Vi zaZ(lISEkRaXSzNeL!tfINj7{@gD2ldMAB(*QlHkWe#sw^goYWz)fgmrE1H-s-rr-F zBnf*uVV;O5J6Eo-$CPk~Kns5>R4s?3Y|9rBAqWzif>Fo|YuwJF*6!}48TAuYXuS?v zzX3+H)<;V(MH5GO?qx(v9e9ntw2RR~$qLv-$!h%0QCxXWSp$|4Wh&2K*266D)~;H^ zzJ$1?r*?-W)Bai)zSewsnKXGwrI}^pVKhK2ym<@!;At6>1q5FmI}+9vbx7ccQ@|B? zQ0TxrL!{d^qERAm`z4e^g3IqFDCa?iPv?MlZUQp&ynJzrw{~j3;qK#pE9Iz^$fTxK zOXpD#w9;Ixr*pU|n|VaVg5tneu^X?aZblK@0GXqf6AG3L*mFz2osBfMp(CQR&c62z z??06LrhjB#%LR=knvD{Henv)sNpxwP|BPc`@Sdj$WR3aqDlcFh=vgM)FX`S;evCa+ ztk{QMEJy-=9gw3qvcZc&VgmVXDfpH{t%?6li_#a}eGO!WK(86=lc5e9cG<@_q6qI9 zW8%0mm)f@6-9{hdc`@Oz$b9L0Q?|Lbn9w(VJ$iv34=1*pt*yw4bVYd6{z3_Hz9GdG zPMk2WEU+DFjyK}L{jJ!!e5l{~6cpDu;H9%Bv?(TMY9qneynL1YD&Y;I1l$z`T#bAx zSK&Uld0a=a7Icq;fUACGFdjF{8ye5p#c~ejFK4HwhvE%?M4>s!e4zZ|6=(P}EA!a9 z0&Ck0GJt^gi8->KMtfQlt*5Ozt?>)=p8TPYR+<^9!D2bQh6T`uv+ z?G$m@3ojM$Z&otL6sb6AV*)5HMep#X%Dd2#Bu{2nhTC4goc+ zTrI`S&CN_)|1Tc6#|hwpm2U);xtI9n!GVI3cJ4GpyUc1$O{+vrZ?-Wk&&G@vS)&v0 z56jkmgzJfPtKAL3Rd2hz`+!UJCzc|l+ z_zL)VEM1URbZT`NHQz9FY=0ELoiTj9|DIMjl6vL4PeO35mzv6J*%JH91MiZO26bL+ zI9{yqJe`t75l$U&vd8~K4WjAWOnR==rGWbeQ@gibKG+$iO%7yjN|R>ML&gQ~*5 z+vj%94@~oj_pL*Pb~us08R3K*>GQHZ^J?}aMJ~)K#Fc2+kU4}_jz94yj;$!iL#nvG z?o2rO?MEKxn%$6Ni%`?nmIJ<+fhZlF_!3URpHUT=YHrH%OW#BL4||J?oSv`7NMjG= z{s;h&43{*0!uTEqV3Kc$f0^VhTX*!T#v}aKM4?=!YwpzMAZ(D&ccf!8Ji+kRG=Qa5 zKl--Z+&HOY3Wml3{UJJoRLNFtkl73$5n2+#%#j91*YV?9mzlKq4=dQsNsO&O4qJY? z<0S3JQKjJbKC^E79(OWxtI+aEUn!-Xld|~TyNWHfkeQIK8{rF(NFZn=uKnK~TLmCQ ziwyWLM)o>7S&c>OK?%t{U=3Vo5LUn>*~%i|H9o=-6P}J4j;M6oj*00k-`_v!5ehL4 z?+bY{kTPdDpO*XV>UCcS1?yX;v()PEzqDVnrXzbcTECb?Jk9yMXYG^vuO&>9gBZ28 zeDB`r0;P_<_fZf6ND+a;fO$x{IrH`E3E=HUl!k`CoDvZZ3lhi1JR+secAjORcdI>O zp&v$L4xkNt)J^bMuZ&l^qUZnUf$F-V6bDLrC~6gs1e|~_ZNMv3sC`4Z3QP)F zjXVm@UaBZ{U!9J&zQnn#Z{B~Gvy|zJAMRi`K8ReKrMUOfkp6cn3H6ss+VIcGmQ=cs z;K#8#S6sbw1Yn&n`C7qsB_I#Ez_K4n?jVh)SxRcEF4T@`Awi_e24=#(Q5k+g?3WD> zbqDmDB;BZ}s5bqjlmlu_0m<>spV}moY{hEa;-_paOPf|`;x_~I2i%I#h$c4h-$*A) z4QmDq14w>g>ex6!@bjeQLMCKIW^3OW#}|E5tzH$X$ZyP;9?GQRT5+K@Hw6&1nr`qK zb4?qe5o}k17X#2luogCmh`IjdYSp7abMRg;te2U9^TOt}@Jk!U>Ey9D_+lB99usl9 z{8?TVYuViLUrjqsECUuo%!2`469TxvnLj!}r9Q0SF7M_(y6O zq>v;80E>D?!?RQN;r#sE0f523^#{OFD#FKz)J%k^#T#*Rc%=oE6?}$xsEb zPR64D*VGdL_W;sUZvHpv*)0ENo{IVazinWmt`d5ptbd3t%fDOlzw71)8!yy*hh4p%hH&2T)%zOq zV3YmG9BY#k&L7BCexDf3{?=+(F1m6M0P({mdAS9y>_T}@jo_{iMNFx!Um0N8*fTaW z;#*T{mXR`B39l<46s4bGW^9a7Gzt$$W^=m?kg+};8NyMwka*6bsv75QXQ(2Xd~56g z*L$PNNsvJBy;VXGFKdE6jkRXzV$Z}ej- zBzQA)JBs7KpyW$pjfx-l|Adlyu2;cqT_!t4Ukfj2HF~@`V^!Z%Fpz7LHF(RNr=G+U zsDm|7))_IznZ(DhLZL>G+aI%5kCVp)ZI4>Sm|QZ6+6 zy74N;Z_k<7z;?b7yv;OlY)Va7Nd%gEF=)an3&qvj5c)J$;^Strj|}SPshgzYFwQ9= zB#ZV(DYNEA+++m@tGGkCwmq+-x*p;dk>Xx<6N-|PH36*XU2R8cT=HHB6knUg?^CI& zYp~(En|l>y9xZ0`>KfWuYHm;16!OrbDc*-lWPsxxRK*hE?!f^f2e z`w7hlI%nO!USqu6C!m5z_jTlV7#Pt=6qNhL*qm_!ahP$16vIJNFNMCLg7@l>g9<{l zh1MrNv_5Tw^dNX>cVca&Ufi z{T|1vST@+aJ)LTzZbYVYVUN1%yz<4Y7GWM#0+k zqF+^`0kRlyw;ixvL-qR^6Yzkb8)6th3bIQ134*1ELWb`KCwrNAF=D~K@^W*S**s@{* zOvwkoFgBT{hte|qXB_3CNKO8PQ24?6G%`gN!6e*#Mp@Us=2vsN;LmA5G7jv*cQrws zH1LhYu*?PrG-2H|A0#hJ%K{T@IOTokvYFAm02NH0c;`mxN~AmXnG>FJMEeF&H}m9L zp$@??&a*fK9=Pl=%VqxPEs@ln?q}3lB0giE7TpoF{HH%UJ91@SH@SaTj3SMzt4(77 zSN~I3X@p`%R;|WjT=&9yjQ6)%v?~xpfZl5>*JxlJblb~f^T~d|k`HbOYNNyLZO`GL zA%vN9wv{_~kiFuchE%D77C&$p1@wOZiC{k=gKE^D)o;; z1{g_+I@eF|BnQXpZ#X>a06(9L_;GIX}DlYC@2`EMC-~5^q}& zRoQOFsy55vUa$Nn-nRK=i%JZBRO__O^wGHQl^8~3lBD2UkR{P~%v)kWUN5O~iV5>7 zpn^~H2~Wk1$Z={(HE7vWpw``9WToz@nM0kVcFEhx>nP)VOQ2~Jjg_oe8|i#ys9?|N z-6!<9$e?TnyOnHg&gWh!pTk}ywE&jVUoFx)oZ_B@Lsl^0E?abNiD0bq+(>V!^t80r ze8Od8tp-V4?QFV}?9IFwR$XxU490xLOZylR`{ONCu@^`wBcoEvyFF(IC2&}%>F+dT z-=S5K`3RAO50aY;UK)iUkbU3)n<=lOX0lNAYIv&Kzl6*`sOCo&m*P`^C^07ld~l7| z%@0OII_nU2ARuC$V54?GFy;6q!(E%w3vJUkLQTYLgP_Awc_AftPNA3r)WcU2 zv^61yZXmnpFbD(jfPJb2w(ww|8i zK;WX9w$o$=IH9~hl`0;5)C%JVF?rE>*6!@LKmi7%eHng2jW$qiB4YR}<=c5UF~;P& z3b0|-VzV2g%AWj>pD}0gpB}fJdP5lzuyUodc?hK&Oyz8`a0jqeK8ImOXm*!s<^8p@ z1Qv?1dP`a_J4p*xtGUJ(rZLTE8_CI9;G2=5(n*e2wL3BVvnIK8sPLZ8x&8wwt7oxA zl!N(p7g)jXAV*5-e{|=eqzlE2nvQj?Ff-g_&_Hy1IU2g^Y=3E0OONN=Mo+2?e3a5m zR#>KG=#S7>=`xkv+v<~+B|)pvAQB`fLMFpKNxi~66xc1E7KL#p&b3ENJrKP^nVn)Z zMW)}4ZWw{Ozg)^8)iFc6x@{7~rf2mNB0PfLl{tf^ZL#qcyMwL?FNUY|qCbTGkQ zEUK;A&Uc6{rdZ(*JhesrTV%xQM`c{Kg!trf3R}3Yjz%z<3;ReXADeI$$B~iRPRw(% zniLcE#iKb$h&{Eaz)m2@) z<;_k=ZeCafi3zzYBbe9I%J;=MOVO!_xTvFfjw!|AT@F55orH%ryFt5v^YFWMm?f%t z0)F{;=!^Lto+7>nvI$7CX}YoP6KJ^0_$6bE_f9CANU@B!OXhs(`AsP9dDP%C-r%UH zcn@#k*wjFyWO@Zdk5f*%f!WEK9Y?NK^LzgS%YJT7pO@V$2z4^6Vh?5aF+ZAl#JiDPsUJsrp3XF`S@uM>6al*Ac?7#GNCO8f&pzO2fj5T$i(71nDCa{D&XS-#IT`t z{qj0MuSL=90|8!(nr&PAX`E|;0evy_XBGWn)~$cs0uAuA_^r+1ImfL^)zD0L=MQf| zweqHx{CseL7n#>?&N0wVMkFLNvBQh<1)B18z%d+HDSfMU0Xd{r?!Zd?=JT6J0g0>O zE;1z*lYUbymaPGmKAS*3h+wpoWlrvV{Sryb7McvD$E;t=f)18H10#pnT#68Z^PaSd z)LJpxsFOr)U0|3UH@P?SKLSApt=Fn>v^%Iy*SJFc>*H{pS zoe`-E<5&Qy<9D)ZYdw6F&~E-nfgPNt)D-Q{#7JdQA!hN7x+~=iE}y#Da`L&Z?r)cpds`hB*2gEhe)>L=bHJVN*I)-DUR{kC$Hq)~FuaBq&uAyppes(&fYIk>A}fzw?^t7> zy+gqL-g1rDU`Fk}z$hhmK`?`#%nhv8IXeL_oKH0+^R0|M!7m;^6#`W%>Ud)=4!@f!+e#SmgjapYuzAHsQ-6f zq-JAX+Ax5}$^*p6d>E8?lyonWonTSb`8{a~b7@LYdnGC5fRInB)N%S4(JQO?Fs98b zG}&yo7?jR?xvEqQ{33{qaGEJFCrl8mZV*unW)Pl{f_sdm%&4UVl}4o{6y}hkAauVa z?kmxj34FQo*XoQa!VfYI94n8tIG>S8OP%u>n@Ju+y=DJRhvE9W@aKoi#|o{VzeDe$ zK*p5CO$OwEwW6LheCDg381hTyJOb$y!3R~Tb*vQSrs;R9_4`X}(dJj5z3x3(q~71G za&@O262sRkIIzg5_`$fGATp`xWBr!Z&nS&%!Ds(W@!vy2vai{i1svsc1UX#tOMXMZ zE}(A_j;*-3?&Y;n*~sju>bn1(KMmo8)YZ-w|C(cGSGXbnNH9Fk z3$u58o9-lGnAVDe8?bl|`JZNZX(57XQ^4#V&jSPm*m(MvL#T(DvC4n*2|d@5aad=B z>qcA&fbw;qJFUsL3amY5%=a-obN9e4V=~tXyBHq#|G=cUSYrdl&PT-ajI`4-CiVN2 zOh}HC_fHwJ%wV&-tdar?r^Pl?JGJm~V~gxI$R${@TyU3SlYucXOR`M)IXil@&LQ#9 zHeI^iSUZq;0ac=U(I!hVTX=Trgxh*TOq29Dv#b@$aMVqegg}s0)h3&nxBMVA+uce?uWZeBuG>TZ?rlwBNxK~JuT59X1sv5O5Y?|*z7)hQ`eYz zj`6gMNAA<#FSaOBC2j8Bo;(jti(1`-9OK1;hJ~Jb7-g5lSsolE=Pma({y$fgd{558 z-4y(mUvBf9&nHi+wZ0^tTIE82NN6^E@I_t^^k#8OIYABhox;XTk}c5;G_y=s5z-CtAS z%*7p!3WYB&MV~|bMFPiry%X*vozU(5>*10;p;Nx(tz&%r-NXGdYkv62ZVB#){l@V0 z)a7A+f9N_HE%d6#*E=3@<$el~6-eMe-d-@ILZN5ifPmh6|C{HMy_=n}nKQsq`|rx@ zTyN5TUmT^Iq5jGcYQ$;y9aReJ1`LJlLY@(aHc{(5Bh@l1LJ|heZpdeXUlyMz&9AJh zU%g2x!}RM$!9-3mjZ>sywDy$xQDgDp?!u!-w6p4nkS|2amuGg{CaH>Wi*%jQzb)te z?Cv#(r=8o>zw5z63U@)qbRFa5u-mh)aSvThZ0{fsdlSKPEc)8`ol+?v%xlf?B=73^&^RBw+=BrInU z3e|TiiDEeP?5DYeann0AaHrIs8*X@a#&A-8-mo_f=2w1rNnhHsds>n`uC70#s9Ni<*S23dmM?TSL>v7M)1L^noGzQ% zD}N3$;o@@LwVtW|M_XqC4%Pa{@v$$1q^u!h%{s;wZkLcOQwoVOCR>wzh{2G$mO+G) zwQSkqX35{u*s?DX$p|;w$krf|eXIUQ`Tu2ZXP)zRCw;=_E`x-%S0BELkGlM;NpSi4cG;G}P*x5PE^OX0OgznvcbJT8)r7`o6` z?ybSFIgpD`v&x$s*CE6haT6NFqjo3IONBj+&^%IIFDc{N+SjK6U2>H@E#O#N0T!*^3$hWM&BwsEE-sYKYUdPErw%Pkgro)@f(w}omemFpS88nCZc z3h;9mwbu}EZQl->puF8piO+I(0 zEAQ2maeUa3`x9%5SPS`5nQ7`dj2qRK=%b4d&+d*x5WWv{CLF(zVZ(PV9^V0m4!#FFil! zkrs!>>Mi)f2w3vz$MqW@&FO0D2>Z^mRRW$okvOAyOiem-Yg%7YH;MZdkslF>=mhn=ww2T+?7bb0L_DLechBEEZfh+J zXR1ytxk6P(dXRhkgS8Oc3k$s=N%M_l^5qXpp7Vto#BkyyyZOZ6^?LWECX8hA6j{w`#b2W{mcFM4L?>1fWlDR~1OHZR3Hj=%Q zxxic50wFECPQp)`1y<#qNzOm-nc7G8Yi$!3b+h#Hq6?apW0+3$ z%IQqjJ%L-xU3JBEq8+W=8NLEu6!>Z@eA~sH>h~wA&1j{SirEHL#UIaTD=mVzi79*x z-xoPjbaZ?R(!K1bjf$q5_`+OR2bD%DPA5%R>M4GjHi6oOxWFnoSaudyFBo8rymc1% z1CiVAUr~%-+C?8gmX5sNW#7(#%u;0;XR~WR`EK+g)-XO~!+&Syff>dMkMy@zT+XcW ziLAV~Dayiz(N2cj^;FrCIAUF9oeP--nns2rltiy^hRd935^(R+O@`}`s&6N;&paGq zji{%##XQaV;;W+Cyzy10ZMR*52fdvy=0eEM8$~b6Kf+VOr22c2>5FGa z3F`qfYUyQJUYn+kRvspGS!0=gF5I@uSxD|B*aXT>OrMn+JI_pXP)8<{2Nv>fk_XHz zfHkp2VWacv)!sW!BZHFz6}+`ByovLw%Ylx{W6E4%wp}-tJ;C>;iD{24kH$yi2#ov= zb4o&E-ObF?Z;rFr+qjadGb3zSwB3(w`|jXU-qshqRbBnetjzYc=C%@00fDc6R+kw= z`AK&V+-Pp%836Y@uD+2TX-V>t{x+Jcf_n7W3~wSdrdx}YmLV=+IlsuQ$mUB6PM|(4 z-op`kfXY1c=3U=VzHl7jej8*AtyC;B=8dSWxn}v)O@EU2y4YIktajN|FHFPYcz$1^ zlS5>!oy^}1?Oa7M=A2P25B)E6w3CKt6Quu%q=TNnM0^v1Z|&#xZ)YEr<{$=?Y*#$( zAE+2$ZJiML$Pohp+}!N2lC8nq*=4{(`J#GEWN<-r&`vf1TB7+fEu^(*8A>b(S$~i( zPH#EC)`d;WBCFKrq^k#?BbXOdd^|oI+ONUId4JnEv+<&?b*#S^o5AH7^H?5LpO#gd z;lczh<8Iex#@Rc)_Q^-{?+$*7o`H#Y=tu8-aM~nmIqdqaDN3(C$!2&-bg`>!%VbFF zt&9;|EuA};D>8az(9J>ac>u&KbN*h%d|@h;a&|5%X~;X>bn_I$*4v=g)YP#$<$#=) z7xQQGgnXW4q+G&~V&qIbtK4RjmzkJ78MZUFrq*S5#l#4xL3Pfm=19m&$HM%Jgone$ z*=fNeL3fZERmZEmH%#Ci(=Te~rMhTtKMU}bWIOR_#AkHrc)=fUNgWbN=Ov;pU}}u~ zq&&m7gtw+lE-NWiji~seLj7!PM;=;jBEJwNQ8@KsoV#;PwVM<16jjBM9+f1o(Xz-H zKI)U#da=Hb^rTo^UTu)RSE!{GZRc+%?mo+)dZEURSB{MjZcKfy@kNV==C#FX@4u+q z8koN_@z4zGO}-7u0|wVPlX6T}m$Se^ol5qU>+=;!&H+`jui@I-JJq-Ei``8JU!+x_ zX#cbRXV#0WGtAZP9Um5&`l26A_6}7jKCU?dhR6g zhpd`DKx_F&5;m<2batPjF5gI?HY;Y&prz-X0}~x&=LLu2;#TcBwqO~;m=QFe#+iW= zW99~SL>%^X5=2N0TG1^L(ds#$E^2@-MA@LD`E>~h4KHK|vl9hxOdtGbcXWFCWwivNs(+=i> zb~ZUU`Wt2&^vl~h9uF7B;%rR9ONy>%tHJ8gu)c|BE(jiGw`v+*CR3z}i%E&M&GOv` zMWZ6lHKnU8y+CdWYZ2UeqBOp#1{_ZeGLUzFWx@=FKFFmx<~9cW7LHvLf-{J()I#8r zEp_J-+2B0>I*IGuhUz;pn(~sf_e#qPA{y80J^5e1<5sMB9+COn%D1?iLDUz{y}A+i z*W3=Ps!6)R_l{!3jS$b8(AV#CD-F%b1E;;MnmVrrO)$$uiPLW;6r_`4mr9IIh=nL5 zfiJH;k&iJ0-8v^dzMd7H`J|KeF%MqPDp4x6Mmtwi6W-gx=q}-{azs|`o_HHsM)#OK zHZdy#rVec23Cb;uprR@QwSK725tLfHWBx`>0|QS@mk4O|sEp%Rc^B5pue>PF*C52B z*X&<4>3Qs&d=x$0BV4Odn)xZNFGo*d_ol*fep>5E2|oe1!M2l$NJr{r$6@d{RbHec zEv>JWpsp|uWh@f)hmlHm))Kw1)tEYBRU@MO)zu@S5sZQxx8=FNlyYj0o}bzhCfT*mP12R;Q1L!cZ+-0=Q4 zLgfH)a5~73>PY4TU6BI}%EO49w0#8D5$%SC{-}Q$5C?~IOoL$@1N6pTIgI!#=igB% z{4NSg_qc<875cP~_|;2}a!gVBu^h-**Y@Ry+*v5~lolBW`s$7UHUEFZ3`#NO)cON) zJ(&7uKmK&vpqOY+$vJ#W?0^CST@s=OQQjb8w!+Br; From 85656d085c10be67972b8ff5e26e06098f540137 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Wed, 5 Oct 2016 14:45:18 +0900 Subject: [PATCH 08/10] #14 Test on multiple Node versions. --- .travis.yml | 6 +++++- test/CUBRIDConnection.query.js | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e46cbde..ad0ce12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,11 @@ sudo: required language: node_js node_js: - - 4 + - 4.4 + - 4.5 + - 4.6 + - 5 + - 6 services: - docker diff --git a/test/CUBRIDConnection.query.js b/test/CUBRIDConnection.query.js index c17384f..7254bc9 100644 --- a/test/CUBRIDConnection.query.js +++ b/test/CUBRIDConnection.query.js @@ -1130,7 +1130,9 @@ describe('CUBRIDConnection', function () { }) .catch(err => { expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.equal('This socket is closed.'); + // Node `v6` reports an error that has no `.` at the end of the + // error message, while previous versions included the `.`. + expect(err.message).to.contain('This socket is closed'); }); }); }); From 084bc553e59b98378c0a8431ee3e9c2a3725dabd Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Wed, 5 Oct 2016 15:09:17 +0900 Subject: [PATCH 09/10] #14 Node >=4.5 uses `Buffer.from()` to create a new Buffer object. --- src/CUBRIDConnection.js | 2 +- src/utils/Helpers.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/CUBRIDConnection.js b/src/CUBRIDConnection.js index e2cc807..43d7374 100644 --- a/src/CUBRIDConnection.js +++ b/src/CUBRIDConnection.js @@ -1753,7 +1753,7 @@ function _lobNew(lobType) { * Write data to a LOB object * @param lobObject * @param offset - * @param dataBuffer + * @param data * @param callback */ CUBRIDConnection.prototype.lobWrite = function (lobObject, offset, data, callback) { diff --git a/src/utils/Helpers.js b/src/utils/Helpers.js index 00d5dbd..af4676f 100644 --- a/src/utils/Helpers.js +++ b/src/utils/Helpers.js @@ -236,8 +236,7 @@ exports._getExpectedResponseLength = function (buffer) { }; exports.getBufferFromString = function (str, encoding) { - if (typeof Buffer.from === 'function') { - // Node v6. + if (process.version >= 'v4.5.0') { return Buffer.from(str, encoding); } From 750f0bf5964414948930eb95badd580f2bd81c32 Mon Sep 17 00:00:00 2001 From: Esen Sagynov Date: Wed, 5 Oct 2016 15:11:30 +0900 Subject: [PATCH 10/10] #14 Push code coverage report to coveralls.io. Applicable to Travis CI builds only. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d026a7..7b106fa 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,13 @@ }, "scripts": { "clean": "rm -rf coverage", - "coverage": "./node_modules/istanbul/lib/cli.js cover node_modules/mocha/bin/_mocha -- -R spec test", + "coverage": "./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec test && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage", "lint": "./node_modules/eslint/bin/eslint.js .", "test": "npm run lint && ./node_modules/mocha/bin/mocha test" }, "devDependencies": { "chai": "3.5.0", + "coveralls": "2.11.14", "eslint": "3.6.1", "istanbul": "0.4.5", "mocha": "3.0.2"

    SOMW<#aA0vQUhrl& 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 diff --git a/tutorials/Introduction to CUBRID Node.js driver - Part II.docx b/tutorials/Introduction to CUBRID Node.js driver - Part II.docx deleted file mode 100644 index 5bb5e5f9ae2e90bdd496ced61e245486603a25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146549 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