From 59bc834c920d4747fb6afa64a772f1abb8505897 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 19 Apr 2010 12:14:06 +0000 Subject: [PATCH 01/18] Updated for Node >= 0.1.90 --- README.md | 71 +++++++++++++++++++++++++++++------------------------ dbslayer.js | 51 +++++++++++++++++++++----------------- test.js | 37 ++++++++++++++-------------- 3 files changed, 86 insertions(+), 73 deletions(-) mode change 100644 => 100755 dbslayer.js diff --git a/README.md b/README.md index d927fd5..e467304 100644 --- a/README.md +++ b/README.md @@ -17,35 +17,41 @@ Requirements How to Use ---------- - + From your node.js script, require the `dbslayer` package - var db = require('dbslayer'); + var db = require('dbslayer'); Initialize a connection - var connection = db.Server('localhost', 9090); - + var connection = db.Server('localhost', 9090); + and then perform a query: - connection.query("SELECT * FROM table"); - -To be truly non-blocking, `Server::fetch` has to return a promise and not the result immediately. This means that in order to be able to perform queries in a designated order or access the result, you'll have to use callbacks: - - connection.query("SELECT * FROM TABLE").addCallback(function(result){ - for (var i = 0, l = result.ROWS.length; i < l; i++){ - var row = result.ROWS[i]; - // do something with the data - } - }); - + connection.query("SELECT * FROM table"); + +To be truly non-blocking, you must use listeners. This means that in order to be able to perform queries in a designated order or access the result, you'll have to use callbacks: + + connection.query("SELECT * FROM TABLE"); + connection.addListener('result', function(result) { + for (var i = 0, l = result.ROWS.length; i < l; i++){ + var row = result.ROWS[i]; + // do something with the data + } + + connection.removeListener('result', arguments.callee); + }); + +You **must** remember to remove your listener, otherwise it will be called along with any new listeners you create. + If you want to capture MySQL errors, subscribe to the 'error' event - connection.query("SELECT * FROM inexistent_table").addErrback(function(error, errno){ - alert('mysql error! + ' error); - }); - -Aside from query, the commands `stat`, `client_info`, `host_info`, `server_version` and `client_version` are available, which provide the respective information about the server. + connection.query("SELECT * FROM inexistent_table") + connection.addListener('error', function(error, errno){ + alert('mysql error! + ' error); + }); + +Aside from query, the commands `stat`, `client_info`, `host_info`, `server_version` and `client_version` are available, which provide the respective information about the server. In order to preserve somewhat backwards compatibility, these have seperate events per function. Installing DBSlayer ------------------- @@ -54,23 +60,24 @@ Compile it according to the instructions [here](http://code.nytimes.com/projects Then create a /etc/dbslayer.conf file defining a database. Here I'm defining the `cool` server which connects to my `mysql` database - [cool] - database=mysql - host=localhost - user=root - pass=1234 - + [cool] + database=mysql + host=localhost + user=root + pass=1234 + Then run DBSlayer for that connection: - dbslayer -c /etc/dbslayer.conf -s cool - + dbslayer -c /etc/dbslayer.conf -s cool + Test it by running test.js like this: - node test.js "SELECT * FROM help_category" - + node test.js "SELECT * FROM help_category" + If you get a bunch of entries like in this [screenshot](http://cld.ly/9aosh) then dbslayer (and node.dbslayer.js) work! -Author +Authors ------ -Guillermo Rauch <[http://devthought.com](http://devthought.com)> \ No newline at end of file +Guillermo Rauch <[http://devthought.com](http://devthought.com)> +Robin Duckett <[http://www.twitter.com/robinduckett](http://www.twitter.com/robinduckett)> \ No newline at end of file diff --git a/dbslayer.js b/dbslayer.js old mode 100644 new mode 100755 index 706b6ad..607141c --- a/dbslayer.js +++ b/dbslayer.js @@ -5,46 +5,49 @@ name: dbslayer.js description: Interface to DBSlayer for Node.JS author: [Guillermo Rauch](http://devthought.com) +updaters: [Robin Duckett](http://www.twitter.com/robinduckett) ... */ var sys = require('sys'), http = require('http'), - - booleanCommands = ['STAT', 'CLIENT_INFO', 'HOST_INFO', 'SERVER_VERSION', 'CLIENT_VERSION'], + events = require('events'), + booleanCommands = ['STAT', 'CLIENT_INFO', 'HOST_INFO', 'SERVER_VERSION', 'CLIENT_VERSION']; -Server = this.Server = function(host, port, timeout){ +var Server = function(host, port, timeout) { this.host = host || 'localhost'; this.port = port || 9090; this.timeout = timeout; }; -Server.prototype.fetch = function(object, key){ - var connection = http.createClient(this.port, this.host), - request = connection[connection.get ? 'get' : 'request']('/db?' + escape(JSON.stringify(object)), {'host': this.host}), - promise = new process.Promise(); +sys.inherits(Server, events.EventEmitter); + +Server.prototype.fetch = function(object, key) { - promise.timeout(this.timeout); + var connection = http.createClient(this.port, this.host); + var request = connection.request('GET', '/db?' + escape(JSON.stringify(object)), {'host': this.host}); + var server = this; - request.finish(function(response){ - response.addListener('body', function(data){ + request.addListener('response', function(response) { + response.setEncoding('utf8'); + response.addListener('data', function(data) { try { var object = JSON.parse(data); - } catch(e){ - return promise.emitError(e); - } - - if (object.MYSQL_ERROR !== undefined){ - promise.emitError(object.MYSQL_ERROR, object.MYSQL_ERRNO); - } else if (object.ERROR !== undefined){ - promise.emitError(object.ERROR); + } catch(e) { + server.emit('error', e); + } + + if (object.MYSQL_ERROR !== undefined) { + thiso.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); + } else if (object.ERROR !== undefined) { + server.emit('error', object.ERROR); } else { - promise.emitSuccess(key ? object[key] : object); - } + server.emit(key.toLowerCase(), key ? object[key] : object); + } }); }); - - return promise; + + request.end(); }; Server.prototype.query = function(query){ @@ -59,4 +62,6 @@ for (var i = 0, l = booleanCommands.length; i < l; i++){ return this.fetch(obj, command); }; })(booleanCommands[i]); -} \ No newline at end of file +} + +exports.Server = Server; diff --git a/test.js b/test.js index 8ab8c6e..6285d68 100644 --- a/test.js +++ b/test.js @@ -20,24 +20,25 @@ if (!sql){ return; } -db.query(sql) - // on success - .addCallback(function(result){ - sys.puts('-------------------------'); - for (var i = 0, l = result.ROWS.length; i < l; i++){ - sys.puts('Row ' + i + ': ' + result.ROWS[i].join(' ')); - } - }) - - // on error :( - .addErrback(function(error, errno){ - sys.puts('-------------------------'); - sys.puts('MySQL error (' + (errno || '') + '): ' + error); - }); +db.addListener('result', function(result) { + sys.puts('-------------------------'); + for (var i = 0, l = result.ROWS.length; i < l; i++){ + sys.puts('Row ' + i + ': ' + result.ROWS[i].join(' ')); + } +}); + +db.addListener('error', function(error, errno) { + sys.puts('-------------------------'); + sys.puts('MySQL error (' + (errno || '') + '): ' + error); +}); -['stat', 'client_info', 'host_info', 'server_version', 'client_version'].forEach(function(command){ - db[command]().addCallback(function(result){ - sys.puts('-------------------------'); +db.query(sql); + +['stat', 'client_info', 'host_info', 'server_version', 'client_version'].forEach(function(command) { + db.addListener(command, function(result) { + sys.puts('-------------------------'); sys.puts(command.toUpperCase() + ' ' + result); }); -}); \ No newline at end of file + db[command](); +}); + From acd7978db88a5f9bf00215cf8872376cbd5437b4 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Mon, 19 Apr 2010 12:18:15 +0000 Subject: [PATCH 02/18] Updated for Node >= 0.1.90 --- README.md | 4 ++-- dbslayer.js | 1 + test.js | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) mode change 100755 => 100644 dbslayer.js diff --git a/README.md b/README.md index e467304..ce9357e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ DBSlayer benefits include: Requirements ------------ -* [Node.js](http://nodejs.org/) (tested with v0.1.21) +* [Node.js](http://nodejs.org/) (tested with v0.1.90) * [DBSlayer](http://code.nytimes.com/projects/dbslayer/) (tested with beta-12) How to Use @@ -48,7 +48,7 @@ If you want to capture MySQL errors, subscribe to the 'error' event connection.query("SELECT * FROM inexistent_table") connection.addListener('error', function(error, errno){ - alert('mysql error! + ' error); + sys.puts('mysql error! + ' error); }); Aside from query, the commands `stat`, `client_info`, `host_info`, `server_version` and `client_version` are available, which provide the respective information about the server. In order to preserve somewhat backwards compatibility, these have seperate events per function. diff --git a/dbslayer.js b/dbslayer.js old mode 100755 new mode 100644 index 607141c..cc24d8f --- a/dbslayer.js +++ b/dbslayer.js @@ -3,6 +3,7 @@ name: dbslayer.js description: Interface to DBSlayer for Node.JS +version: 0.2 author: [Guillermo Rauch](http://devthought.com) updaters: [Robin Duckett](http://www.twitter.com/robinduckett) diff --git a/test.js b/test.js index 6285d68..28f9303 100644 --- a/test.js +++ b/test.js @@ -7,6 +7,7 @@ description: < It takes three parameters from the SQL query, a host author: [Guillermo Rauch](http://devthought.com) +updaters: [Robin Duckett](http://www.twitter.com/robinduckett) ... */ From d4a086c788b438efea215e92db3e5b59dc2a01e0 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Mon, 19 Apr 2010 12:24:29 +0000 Subject: [PATCH 03/18] Fixed a small variable naming bug --- dbslayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbslayer.js b/dbslayer.js index cc24d8f..05c5d88 100644 --- a/dbslayer.js +++ b/dbslayer.js @@ -39,7 +39,7 @@ Server.prototype.fetch = function(object, key) { } if (object.MYSQL_ERROR !== undefined) { - thiso.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); + server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); } else if (object.ERROR !== undefined) { server.emit('error', object.ERROR); } else { From 5af64a36ce35e1306b9eac65f78a68f428b10d51 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 1 May 2010 15:14:15 +0100 Subject: [PATCH 04/18] Oooh. Upgrades. --- README.md | 50 +++++++++++++++++++++++++++++++++++++++----------- dbslayer.js | 51 +++++++++++++++++++++++++++++++++++++++++---------- test.js | 0 3 files changed, 80 insertions(+), 21 deletions(-) mode change 100644 => 100755 README.md mode change 100644 => 100755 dbslayer.js mode change 100644 => 100755 test.js diff --git a/README.md b/README.md old mode 100644 new mode 100755 index ce9357e..942067d --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ node.dbslayer.js ================= -node.dbslayer.js is a very basic and easy-to-use library to connect to a DBSlayer server, which effectively provides non-blocking and scalable MySQL support for Node.JS. +node.dbslayer.js is a very basic and easy-to-use library to connect to a DBSlayer server, which effectively provides non-blocking and scalable MySQL support for Node.JS. DBSlayer benefits include: @@ -17,7 +17,7 @@ Requirements How to Use ---------- - + From your node.js script, require the `dbslayer` package var db = require('dbslayer'); @@ -25,11 +25,11 @@ From your node.js script, require the `dbslayer` package Initialize a connection var connection = db.Server('localhost', 9090); - + and then perform a query: connection.query("SELECT * FROM table"); - + To be truly non-blocking, you must use listeners. This means that in order to be able to perform queries in a designated order or access the result, you'll have to use callbacks: connection.query("SELECT * FROM TABLE"); @@ -38,21 +38,48 @@ To be truly non-blocking, you must use listeners. This means that in order to be var row = result.ROWS[i]; // do something with the data } - + connection.removeListener('result', arguments.callee); }); - + You **must** remember to remove your listener, otherwise it will be called along with any new listeners you create. - + If you want to capture MySQL errors, subscribe to the 'error' event connection.query("SELECT * FROM inexistent_table") connection.addListener('error', function(error, errno){ sys.puts('mysql error! + ' error); }); - + Aside from query, the commands `stat`, `client_info`, `host_info`, `server_version` and `client_version` are available, which provide the respective information about the server. In order to preserve somewhat backwards compatibility, these have seperate events per function. +More Examples +------------- + + mysql.addListener('result', function(result) { + this.fetch_object(result, function(obj) { + node.log(obj.Field); + }); + }).query('DESCRIBE `stock`;'); + +You can use the fetch_object, fetch_array or fetch_args functions as shorthand to return either an object, an array or function callback arguments to retrieve your data. + + mysql.addListener('result', function(result) { + this.fetch_array(result, function(arr) { + node.log(arr[0]); + }); + }).query('DESCRIBE `stock`;'); + +Or + + mysql.addListener('result', function(result) { + this.fetch_args(result, function(field, type) { + node.log(field); + }); + }).query('DESCRIBE `stock`;'); + +Will produce the same output as the first example. + Installing DBSlayer ------------------- @@ -65,19 +92,20 @@ Then create a /etc/dbslayer.conf file defining a database. Here I'm defining the host=localhost user=root pass=1234 - + Then run DBSlayer for that connection: dbslayer -c /etc/dbslayer.conf -s cool - + Test it by running test.js like this: node test.js "SELECT * FROM help_category" - + If you get a bunch of entries like in this [screenshot](http://cld.ly/9aosh) then dbslayer (and node.dbslayer.js) work! Authors ------ Guillermo Rauch <[http://devthought.com](http://devthought.com)> + Robin Duckett <[http://www.twitter.com/robinduckett](http://www.twitter.com/robinduckett)> \ No newline at end of file diff --git a/dbslayer.js b/dbslayer.js old mode 100644 new mode 100755 index 05c5d88..a51a7e1 --- a/dbslayer.js +++ b/dbslayer.js @@ -1,15 +1,12 @@ /* --- name: dbslayer.js - description: Interface to DBSlayer for Node.JS version: 0.2 - author: [Guillermo Rauch](http://devthought.com) updaters: [Robin Duckett](http://www.twitter.com/robinduckett) ... */ - var sys = require('sys'), http = require('http'), events = require('events'), @@ -22,13 +19,10 @@ var Server = function(host, port, timeout) { }; sys.inherits(Server, events.EventEmitter); - Server.prototype.fetch = function(object, key) { - var connection = http.createClient(this.port, this.host); var request = connection.request('GET', '/db?' + escape(JSON.stringify(object)), {'host': this.host}); var server = this; - request.addListener('response', function(response) { response.setEncoding('utf8'); response.addListener('data', function(data) { @@ -37,7 +31,6 @@ Server.prototype.fetch = function(object, key) { } catch(e) { server.emit('error', e); } - if (object.MYSQL_ERROR !== undefined) { server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); } else if (object.ERROR !== undefined) { @@ -47,12 +40,12 @@ Server.prototype.fetch = function(object, key) { } }); }); - request.end(); }; Server.prototype.query = function(query){ - return this.fetch({SQL: query}, 'RESULT'); + this.fetch({SQL: query}, 'RESULT') + return this; }; for (var i = 0, l = booleanCommands.length; i < l; i++){ @@ -64,5 +57,43 @@ for (var i = 0, l = booleanCommands.length; i < l; i++){ }; })(booleanCommands[i]); } +Server.prototype.fetch_object = function(res, callback) { + for (var row, i = 0; i < res.ROWS.length; row = res.ROWS[i], i++) { + var ret = {}; + if (typeof row !== "undefined") { + for (var j = 0; j < res.HEADER.length; j ++) { + ret[res.HEADER[j]] = row[j]; + } + + callback.apply(this, [ret]); + } + } +}; + +Server.prototype.fetch_array = function(res, callback) { + for (var row, i = 0; i < res.ROWS.length; row = res.ROWS[i], i++) { + var ret = []; + if (typeof row !== "undefined") { + for (var j = 0; j < res.HEADER.length; j ++) { + ret[j] = row[j]; + } + + callback.apply(this, [ret]); + } + } +}; + +Server.prototype.fetch_args = function(res, callback) { + for (var row, i = 0; i < res.ROWS.length; row = res.ROWS[i], i++) { + var ret = []; + if (typeof row !== "undefined") { + for (var j = 0; j < res.HEADER.length; j ++) { + ret[j] = row[j]; + } + + callback.apply(this, ret); + } + } +}; -exports.Server = Server; +exports.Server = Server; \ No newline at end of file diff --git a/test.js b/test.js old mode 100644 new mode 100755 From e382bc6175200ac968900ee6af2a4ee4639bc26a Mon Sep 17 00:00:00 2001 From: Barry Ezell Date: Fri, 7 May 2010 15:11:05 -0400 Subject: [PATCH 05/18] added data buffer to handle larger queries --- dbslayer.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/dbslayer.js b/dbslayer.js index a51a7e1..1177997 100755 --- a/dbslayer.js +++ b/dbslayer.js @@ -4,7 +4,7 @@ name: dbslayer.js description: Interface to DBSlayer for Node.JS version: 0.2 author: [Guillermo Rauch](http://devthought.com) -updaters: [Robin Duckett](http://www.twitter.com/robinduckett) +updaters: [Robin Duckett](http://www.twitter.com/robinduckett),[Barry Ezell](http://twitter.com/barryezl) ... */ var sys = require('sys'), @@ -23,24 +23,34 @@ Server.prototype.fetch = function(object, key) { var connection = http.createClient(this.port, this.host); var request = connection.request('GET', '/db?' + escape(JSON.stringify(object)), {'host': this.host}); var server = this; + request.addListener('response', function(response) { + var allData = ""; response.setEncoding('utf8'); response.addListener('data', function(data) { + allData += data; + }); + + response.addListener('end', function() { try { - var object = JSON.parse(data); + var object = JSON.parse(allData); } catch(e) { server.emit('error', e); } - if (object.MYSQL_ERROR !== undefined) { - server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); - } else if (object.ERROR !== undefined) { - server.emit('error', object.ERROR); - } else { - server.emit(key.toLowerCase(), key ? object[key] : object); - } - }); + + if (object !== undefined) { + if (object.MYSQL_ERROR !== undefined) { + server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); + } else if (object.ERROR !== undefined) { + server.emit('error', object.ERROR); + } else { + server.emit(key.toLowerCase(), key ? object[key] : object); + } + } + }); }); - request.end(); + + request.close(); }; Server.prototype.query = function(query){ From ade180cf9daae392da7c8a76f77f67504ff5ceba Mon Sep 17 00:00:00 2001 From: Barry Ezell Date: Fri, 7 May 2010 15:14:33 -0400 Subject: [PATCH 06/18] cleaning up tab inconsistencies --- dbslayer.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/dbslayer.js b/dbslayer.js index 1177997..c960462 100755 --- a/dbslayer.js +++ b/dbslayer.js @@ -31,25 +31,25 @@ Server.prototype.fetch = function(object, key) { allData += data; }); - response.addListener('end', function() { + response.addListener('end', function() { try { - var object = JSON.parse(allData); + var object = JSON.parse(allData); } catch(e) { server.emit('error', e); } - if (object !== undefined) { - if (object.MYSQL_ERROR !== undefined) { - server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); - } else if (object.ERROR !== undefined) { - server.emit('error', object.ERROR); - } else { - server.emit(key.toLowerCase(), key ? object[key] : object); - } - } - }); + if (object !== undefined) { + if (object.MYSQL_ERROR !== undefined) { + server.emit('error', object.MYSQL_ERROR, object.MYSQL_ERRNO); + } else if (object.ERROR !== undefined) { + server.emit('error', object.ERROR); + } else { + server.emit(key.toLowerCase(), key ? object[key] : object); + } + } + }); }); - + request.close(); }; From 64edb51b8e00cdf20d7345a52836a24b01f4136b Mon Sep 17 00:00:00 2001 From: Barry Ezell Date: Fri, 7 May 2010 15:53:11 -0400 Subject: [PATCH 07/18] renamed request.close() to end() --- dbslayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbslayer.js b/dbslayer.js index c960462..72edf76 100755 --- a/dbslayer.js +++ b/dbslayer.js @@ -50,7 +50,7 @@ Server.prototype.fetch = function(object, key) { }); }); - request.close(); + request.end(); }; Server.prototype.query = function(query){ From c11da188aef0f3bd081aebdb79c47722085daded Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Sat, 8 May 2010 11:48:26 +0100 Subject: [PATCH 08/18] Updating authors --- README.md | 4 +++- dbslayer.js | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 942067d..617c2f2 100755 --- a/README.md +++ b/README.md @@ -108,4 +108,6 @@ Authors Guillermo Rauch <[http://devthought.com](http://devthought.com)> -Robin Duckett <[http://www.twitter.com/robinduckett](http://www.twitter.com/robinduckett)> \ No newline at end of file +Robin Duckett <[http://www.twitter.com/robinduckett](http://www.twitter.com/robinduckett)> + +Barry Ezell <[http://twitter.com/barryezl](http://twitter.com/barryezl)> diff --git a/dbslayer.js b/dbslayer.js index 72edf76..1510c8c 100755 --- a/dbslayer.js +++ b/dbslayer.js @@ -4,7 +4,8 @@ name: dbslayer.js description: Interface to DBSlayer for Node.JS version: 0.2 author: [Guillermo Rauch](http://devthought.com) -updaters: [Robin Duckett](http://www.twitter.com/robinduckett),[Barry Ezell](http://twitter.com/barryezl) +updaters: [Robin Duckett](http://www.twitter.com/robinduckett), + [Barry Ezell](http://twitter.com/barryezl) ... */ var sys = require('sys'), @@ -106,4 +107,4 @@ Server.prototype.fetch_args = function(res, callback) { } }; -exports.Server = Server; \ No newline at end of file +exports.Server = Server; From ecb89778ef5458d7036f5b71f9a09e0b0d6a2069 Mon Sep 17 00:00:00 2001 From: Craig Condon Date: Tue, 8 Nov 2011 15:58:02 -0600 Subject: [PATCH 09/18] added package.json --- .cupboard | 5 +++++ package.json | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .cupboard create mode 100644 package.json diff --git a/.cupboard b/.cupboard new file mode 100644 index 0000000..73d6ec5 --- /dev/null +++ b/.cupboard @@ -0,0 +1,5 @@ +[project] +name = dbslayer +[commands] +publish = git add ., git commit -m "$@", git push origin master +ignore = echo $@ >> .gitignore diff --git a/package.json b/package.json new file mode 100644 index 0000000..e14be3d --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "author": "Craig Condon", + "name": "dbslayer", + "description": "mysql api for node.js", + "version": "0.0.0", + "repository": { + "type": "git", + "url": "git://github.com/spiceapps/node.dbslayer.js.git" + }, + "engines": { + "node": "~0.4.12" + }, + "dependencies": {}, + "devDependencies": {} +} From 496527075cf08c68463399097288c5c086d62d0a Mon Sep 17 00:00:00 2001 From: Craig Condon Date: Tue, 8 Nov 2011 15:59:46 -0600 Subject: [PATCH 10/18] removed author --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index e14be3d..ee0adc6 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,4 @@ { - "author": "Craig Condon", "name": "dbslayer", "description": "mysql api for node.js", "version": "0.0.0", From b16281acb1a450809e61c1ae1ec0799346a52b66 Mon Sep 17 00:00:00 2001 From: Craig Condon Date: Tue, 8 Nov 2011 16:02:25 -0600 Subject: [PATCH 11/18] removed repo info --- package.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/package.json b/package.json index ee0adc6..f4ca927 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,6 @@ "name": "dbslayer", "description": "mysql api for node.js", "version": "0.0.0", - "repository": { - "type": "git", - "url": "git://github.com/spiceapps/node.dbslayer.js.git" - }, - "engines": { - "node": "~0.4.12" - }, "dependencies": {}, "devDependencies": {} } From d0c1232a0b31f1d22afe306a1954df32b7fa0377 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:12:19 +0100 Subject: [PATCH 12/18] Gave it a version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f4ca927..32ec959 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dbslayer", "description": "mysql api for node.js", - "version": "0.0.0", + "version": "0.0.1", "dependencies": {}, "devDependencies": {} } From e880f48b1654420c02c8664421da99e641f4fc76 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:16:36 +0100 Subject: [PATCH 13/18] Package JSON updates --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 32ec959..5238875 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "dbslayer", "description": "mysql api for node.js", "version": "0.0.1", + "main": "./dbslayer.js", "dependencies": {}, "devDependencies": {} } From 596e4cc04c23244ead8453f8a6a0e3b119a28d28 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:37:36 +0100 Subject: [PATCH 14/18] Updated for node versions > 0.4 --- dbslayer.js | 11 ++++++----- package.json | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dbslayer.js b/dbslayer.js index 1510c8c..6445632 100755 --- a/dbslayer.js +++ b/dbslayer.js @@ -8,7 +8,7 @@ updaters: [Robin Duckett](http://www.twitter.com/robinduckett), [Barry Ezell](http://twitter.com/barryezl) ... */ -var sys = require('sys'), +var util = require('util'), http = require('http'), events = require('events'), booleanCommands = ['STAT', 'CLIENT_INFO', 'HOST_INFO', 'SERVER_VERSION', 'CLIENT_VERSION']; @@ -19,20 +19,20 @@ var Server = function(host, port, timeout) { this.timeout = timeout; }; -sys.inherits(Server, events.EventEmitter); +util.inherits(Server, events.EventEmitter); Server.prototype.fetch = function(object, key) { var connection = http.createClient(this.port, this.host); var request = connection.request('GET', '/db?' + escape(JSON.stringify(object)), {'host': this.host}); var server = this; - request.addListener('response', function(response) { + request.on('response', function(response) { var allData = ""; response.setEncoding('utf8'); - response.addListener('data', function(data) { + response.on('data', function(data) { allData += data; }); - response.addListener('end', function() { + response.on('end', function() { try { var object = JSON.parse(allData); } catch(e) { @@ -68,6 +68,7 @@ for (var i = 0, l = booleanCommands.length; i < l; i++){ }; })(booleanCommands[i]); } + Server.prototype.fetch_object = function(res, callback) { for (var row, i = 0; i < res.ROWS.length; row = res.ROWS[i], i++) { var ret = {}; diff --git a/package.json b/package.json index 5238875..ba36a9e 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "dbslayer", "description": "mysql api for node.js", - "version": "0.0.1", - "main": "./dbslayer.js", + "version": "0.2.0", + "main": "dbslayer.js", "dependencies": {}, "devDependencies": {} } From defa4f09ad32410b72e8d3bda0d6d0a02609b3e1 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:40:49 +0000 Subject: [PATCH 15/18] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 617c2f2..97ca712 100755 --- a/README.md +++ b/README.md @@ -15,6 +15,13 @@ Requirements * [Node.js](http://nodejs.org/) (tested with v0.1.90) * [DBSlayer](http://code.nytimes.com/projects/dbslayer/) (tested with beta-12) +How to Install ![New!](http://i.imgur.com/XSqxQ.jpg) +-------------- + +From your npm equipped command line: + + npm install dbslayer + How to Use ---------- From 4991a70eea30c9939cf8e3daa08164a82ceece54 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:41:21 +0000 Subject: [PATCH 16/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97ca712..c333116 100755 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Requirements * [Node.js](http://nodejs.org/) (tested with v0.1.90) * [DBSlayer](http://code.nytimes.com/projects/dbslayer/) (tested with beta-12) -How to Install ![New!](http://i.imgur.com/XSqxQ.jpg) +How to Install ![New!](http://i.imgur.com/XSqxQs.jpg) -------------- From your npm equipped command line: From 52b2d02dda93d36d164356745c54182c737d2d5d Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 01:50:10 +0100 Subject: [PATCH 17/18] Updating readme to reflect code changes. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c333116..c8f233f 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ and then perform a query: To be truly non-blocking, you must use listeners. This means that in order to be able to perform queries in a designated order or access the result, you'll have to use callbacks: connection.query("SELECT * FROM TABLE"); - connection.addListener('result', function(result) { + connection.on('result', function(result) { for (var i = 0, l = result.ROWS.length; i < l; i++){ var row = result.ROWS[i]; // do something with the data @@ -54,7 +54,7 @@ You **must** remember to remove your listener, otherwise it will be called along If you want to capture MySQL errors, subscribe to the 'error' event connection.query("SELECT * FROM inexistent_table") - connection.addListener('error', function(error, errno){ + connection.on('error', function(error, errno){ sys.puts('mysql error! + ' error); }); @@ -63,7 +63,7 @@ Aside from query, the commands `stat`, `client_info`, `host_info`, `server_versi More Examples ------------- - mysql.addListener('result', function(result) { + mysql.on('result', function(result) { this.fetch_object(result, function(obj) { node.log(obj.Field); }); @@ -71,7 +71,7 @@ More Examples You can use the fetch_object, fetch_array or fetch_args functions as shorthand to return either an object, an array or function callback arguments to retrieve your data. - mysql.addListener('result', function(result) { + mysql.on('result', function(result) { this.fetch_array(result, function(arr) { node.log(arr[0]); }); @@ -79,7 +79,7 @@ You can use the fetch_object, fetch_array or fetch_args functions as shorthand t Or - mysql.addListener('result', function(result) { + mysql.on('result', function(result) { this.fetch_args(result, function(field, type) { node.log(field); }); From 2edeeac77686d156a8b1234b8224350b1bb99432 Mon Sep 17 00:00:00 2001 From: Robin Duckett Date: Wed, 9 Nov 2011 10:28:40 +0000 Subject: [PATCH 18/18] Adding Craig to contributors list --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c8f233f..f12f193 100755 --- a/README.md +++ b/README.md @@ -111,10 +111,15 @@ Test it by running test.js like this: If you get a bunch of entries like in this [screenshot](http://cld.ly/9aosh) then dbslayer (and node.dbslayer.js) work! Authors ------- +------- Guillermo Rauch <[http://devthought.com](http://devthought.com)> Robin Duckett <[http://www.twitter.com/robinduckett](http://www.twitter.com/robinduckett)> Barry Ezell <[http://twitter.com/barryezl](http://twitter.com/barryezl)> + +Contributors +------------ + +Craig Condon <[http://spiceapps.com](http://spiceapps.com)> \ No newline at end of file