From 970330575dc10bba84b2ca1e86e7018e350f788c Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 18 Nov 2011 17:45:01 -0800 Subject: [PATCH 01/11] update to node v06 compatible deps --- lib/mbtiles.js | 8 ++++---- package.json | 7 +++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index b5080d5..d07db48 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -2,7 +2,7 @@ var _ = require('underscore'), fs = require('fs'), Step = require('step'), crypto = require('crypto'), - zlib = require('zlib'), + _zlib = require('_zlib'), path = require('path'), url = require('url'), qs = require('querystring'), @@ -216,7 +216,7 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { if (err) return callback(err); try { - var grid = zlib.inflate( + var grid = _zlib.inflate( !Buffer.isBuffer(row.grid) ? new Buffer(row.grid, 'binary') : row.grid @@ -227,7 +227,7 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { }, {}); var result = _(JSON.parse(grid)).extend({ data: data }); } catch (err) { - return callback(new Error('Grid is invalid')); + return callback(new Error('Grid is invalid:' + err.message)); } callback(null, result); @@ -565,7 +565,7 @@ MBTiles.prototype.putGrid = function(z, x, y, data, callback) { var id = crypto.createHash('md5').update(json).digest('hex'); if (!this._gridCache[id]) { // This corresponds to the grid_utfgrid table. - this._gridCache[id] = zlib.deflate(new Buffer(json, 'utf8')); + this._gridCache[id] = _zlib.deflate(new Buffer(json, 'utf8')); // This corresponds to the grid_key table. this._keyCache[id] = Object.keys(data.data || {}); diff --git a/package.json b/package.json index 435fd32..405ac9d 100644 --- a/package.json +++ b/package.json @@ -30,11 +30,14 @@ ], "dependencies": { "optimist": "0.2.x", - "sqlite3": "~2.0.17", + "sqlite3": "~2.1.1", "step": "0.0.x", "sphericalmercator": "1.0.x", "underscore": "1.1.x", - "zlib": "1.0.x" + "zlib": "https://github.com/springmeyer/node-zlib/tarball/master" + }, + "devDependencies": { + "expresso": "~0.9.0" }, "engines": { "node": ">= 0.4.0" From cf427905fdf3e45024ef37dde7120472dbcf59c3 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 18 Nov 2011 17:45:15 -0800 Subject: [PATCH 02/11] update tests --- test/info.test.js | 5 +- test/list.test.js | 7 +- test/read.test.js | 149 ++++++++++++++++++++------------------- test/reloading.test.js | 3 +- test/write.test.js | 2 +- test/write_grids.test.js | 3 +- 6 files changed, 84 insertions(+), 85 deletions(-) diff --git a/test/info.test.js b/test/info.test.js index 2c269d7..1dd19a3 100644 --- a/test/info.test.js +++ b/test/info.test.js @@ -2,7 +2,6 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); var Step = require('step'); -var assert = require('assert'); var MBTiles = require('..'); var fixtures = { @@ -13,7 +12,7 @@ var fixtures = { try { fs.unlink(fixtures.empty); } catch (err) {} -exports['get metadata'] = function(beforeExit) { +exports['get metadata'] = function(beforeExit, assert) { var completed = false; new MBTiles(fixtures.plain_1, function(err, mbtiles) { @@ -48,7 +47,7 @@ exports['get metadata'] = function(beforeExit) { }); }; -exports['get/put metadata from empty file'] = function(beforeExit) { +exports['get/put metadata from empty file'] = function(beforeExit, assert) { var completion = {}; new MBTiles(fixtures.empty, function(err, mbtiles) { diff --git a/test/list.test.js b/test/list.test.js index 0722a17..3a3523f 100644 --- a/test/list.test.js +++ b/test/list.test.js @@ -2,7 +2,6 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); var Step = require('step'); -var assert = require('assert'); var MBTiles = require('..'); var fixtures = { @@ -12,17 +11,17 @@ var fixtures = { try { fs.unlink(fixtures.doesnotexist); } catch (err) {} -exports['list'] = function(beforeExit) { +exports['list'] = function(beforeExit, assert) { var completed = false; beforeExit(function() { assert.ok(completed); }); MBTiles.list(fixtures.doesnotexist, function(err, list) { assert.ok(err); - assert.equal(err.message, 'ENOENT, No such file or directory'); + assert.ok(err.code.match(/^ENOENT/)); MBTiles.list(fixtures.doesnotexist, function(err, list) { completed = true; assert.ok(err); - assert.equal(err.message, 'ENOENT, No such file or directory'); + assert.ok(err.code.match(/^ENOENT/)); }); }); }; diff --git a/test/read.test.js b/test/read.test.js index 3ecddc0..22aa685 100644 --- a/test/read.test.js +++ b/test/read.test.js @@ -1,7 +1,6 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); -var assert = require('assert'); var MBTiles = require('..'); @@ -16,15 +15,17 @@ var fixtures = { try { fs.unlink(fixtures.non_existent); } catch (err) {} -function yieldsError(status, error, msg) { +function yieldsError(assert, status, error, msg) { return function(err) { assert.ok(err); - assert.equal(err.message, msg); + var re = new RegExp( "^" + msg, "i"); + assert.ok(err.message.match(re)); status[error]++; }; } -exports['get tiles'] = function(beforeExit) { + +exports['get tiles'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -45,13 +46,13 @@ exports['get tiles'] = function(beforeExit) { } }); - mbtiles.getTile(0, 1, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(-1, 0, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(0, 0, 1, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 1, -1, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(2, -3, 3, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(18, 2, 262140, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 15, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 1, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(-1, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 0, 1, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(3, 1, -1, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(2, -3, 3, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(18, 2, 262140, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 0, 15, yieldsError(assert, status, 'error', 'Tile does not exist')); }); @@ -61,7 +62,7 @@ exports['get tiles'] = function(beforeExit) { }); }; -exports['get grids'] = function(beforeExit) { +exports['get grids'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -82,13 +83,13 @@ exports['get grids'] = function(beforeExit) { } }); - mbtiles.getGrid(0, 1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, 1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 262140, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 15, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 1, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, -3, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(18, 2, 262140, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 15, yieldsError(assert, status, 'error', 'Grid does not exist')); }); @@ -99,7 +100,7 @@ exports['get grids'] = function(beforeExit) { }; -exports['get grids from file without interaction'] = function(beforeExit) { +exports['get grids from file without interaction'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -107,20 +108,20 @@ exports['get grids from file without interaction'] = function(beforeExit) { new MBTiles(fixtures.plain_1, function(err, mbtiles) { if (err) throw err; - mbtiles.getGrid(0, 1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 3, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 4, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 5, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 13, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 14, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 0, 7, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 6, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 1, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, -3, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(18, 2, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 3, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 4, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 5, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 13, 4, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 14, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 0, 7, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 6, 2, yieldsError(assert, status, 'error', 'Grid does not exist')); }); beforeExit(function() { @@ -129,7 +130,7 @@ exports['get grids from file without interaction'] = function(beforeExit) { }); }; -exports['get grids with different schema'] = function(beforeExit) { +exports['get grids with different schema'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -150,13 +151,13 @@ exports['get grids with different schema'] = function(beforeExit) { } }); - mbtiles.getGrid(0, 1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, 1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 262140, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 15, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 1, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, -3, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(18, 2, 262140, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 15, yieldsError(assert, status, 'error', 'Grid does not exist')); }); beforeExit(function() { @@ -166,7 +167,7 @@ exports['get grids with different schema'] = function(beforeExit) { }; -exports['get grids from file without interaction'] = function(beforeExit) { +exports['get grids from file without interaction'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -174,20 +175,20 @@ exports['get grids from file without interaction'] = function(beforeExit) { new MBTiles(fixtures.plain_1, function(err, mbtiles) { if (err) throw err; - mbtiles.getGrid(0, 1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 3, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 4, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 5, 8, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 13, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 14, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 0, 7, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 6, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 1, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, -3, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(18, 2, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 3, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 4, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 5, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 13, 4, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 0, 14, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 0, 7, yieldsError(assert, status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 6, 2, yieldsError(assert, status, 'error', 'Grid does not exist')); }); beforeExit(function() { @@ -196,7 +197,7 @@ exports['get grids from file without interaction'] = function(beforeExit) { }); }; -exports['get tiles from non-existent file'] = function(beforeExit) { +exports['get tiles from non-existent file'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -204,20 +205,20 @@ exports['get tiles from non-existent file'] = function(beforeExit) { new MBTiles(fixtures.non_existent, function(err, mbtiles) { if (err) throw err; - mbtiles.getTile(0, 1, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(-1, 0, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(0, 0, -1, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 1, 8, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(2, -3, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(18, 2, 3, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 3, 8, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 4, 8, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 5, 8, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 13, 4, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 14, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 0, 7, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 6, 2, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 1, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(-1, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 0, -1, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(3, 1, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(2, -3, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(18, 2, 3, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 3, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 4, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 5, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 13, 4, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(4, 0, 14, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(3, 0, 7, yieldsError(assert, status, 'error', 'Tile does not exist')); + mbtiles.getTile(3, 6, 2, yieldsError(assert, status, 'error', 'Tile does not exist')); }); beforeExit(function() { @@ -226,7 +227,7 @@ exports['get tiles from non-existent file'] = function(beforeExit) { }); }; -exports['get tiles from corrupt file'] = function(beforeExit) { +exports['get tiles from corrupt file'] = function(beforeExit, assert) { var status = { success: 0, error: 0 @@ -245,3 +246,5 @@ exports['get tiles from corrupt file'] = function(beforeExit) { ); }); }; + + diff --git a/test/reloading.test.js b/test/reloading.test.js index aaef635..ae46856 100644 --- a/test/reloading.test.js +++ b/test/reloading.test.js @@ -1,7 +1,6 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); -var assert = require('assert'); var MBTiles = require('..'); var fixtureDir = __dirname + '/fixtures/output'; @@ -17,7 +16,7 @@ var file = fs.readFileSync(fixtures.source); try { fs.unlinkSync(fixtures.destination); } catch(err) {} try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} -exports['test file reloading during copying'] = function(beforeExit) { +exports['test file reloading during copying'] = function(beforeExit, assert) { var completed = false; var status = { success: 0, diff --git a/test/write.test.js b/test/write.test.js index 11b6b3b..c3b0e3d 100644 --- a/test/write.test.js +++ b/test/write.test.js @@ -10,7 +10,7 @@ var fixtureDir = __dirname + '/fixtures/output'; try { fs.unlinkSync(fixtureDir + '/write_1.mbtiles'); } catch(err) {} try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} -exports['test mbtiles file creation'] = function(beforeExit) { +exports['test mbtiles file creation'] = function(beforeExit, assert) { var completed = { written: 0, read: 0 }; new MBTiles(fixtureDir + '/write_1.mbtiles', function(err, mbtiles) { completed.open = true; diff --git a/test/write_grids.test.js b/test/write_grids.test.js index 4d30c1e..d22c7a3 100644 --- a/test/write_grids.test.js +++ b/test/write_grids.test.js @@ -1,7 +1,6 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); -var assert = require('assert'); var MBTiles = require('..'); var fixtureDir = __dirname + '/fixtures/output'; @@ -10,7 +9,7 @@ var fixtureDir = __dirname + '/fixtures/output'; try { fs.unlinkSync(fixtureDir + '/write_2.mbtiles'); } catch(err) {} try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} -exports['test mbtiles file creation'] = function(beforeExit) { +exports['test mbtiles file creation'] = function(beforeExit, assert) { var completed = { written: 0, read: 0 }; new MBTiles(fixtureDir + '/write_2.mbtiles', function(err, mbtiles) { completed.open = true; From fbcdc07d0626dca76f991c85afcc6f1f8837f09a Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 18 Nov 2011 18:09:59 -0800 Subject: [PATCH 03/11] refer to renamed zlib module --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 405ac9d..36b8b31 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "step": "0.0.x", "sphericalmercator": "1.0.x", "underscore": "1.1.x", - "zlib": "https://github.com/springmeyer/node-zlib/tarball/master" + "_zlib": "https://github.com/springmeyer/node-zlib/tarball/master" }, "devDependencies": { "expresso": "~0.9.0" From 90b35f65ef474905460b64a2fff1c9c1c06a0e3f Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 1 Dec 2011 14:43:32 -0800 Subject: [PATCH 04/11] switch to using native zlib, inflate works, odd test failures for deflate --- lib/mbtiles.js | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index d07db48..1bfa462 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -2,7 +2,7 @@ var _ = require('underscore'), fs = require('fs'), Step = require('step'), crypto = require('crypto'), - _zlib = require('_zlib'), + zlib = require('zlib'), path = require('path'), url = require('url'), qs = require('querystring'), @@ -215,8 +215,9 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { } if (err) return callback(err); + /* try { - var grid = _zlib.inflate( + var grid = zlib.inflate( !Buffer.isBuffer(row.grid) ? new Buffer(row.grid, 'binary') : row.grid @@ -231,6 +232,24 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { } callback(null, result); + */ + + zlib.inflate(!Buffer.isBuffer(row.grid) + ? new Buffer(row.grid, 'binary') + : row.grid + , function(err,buffer) { + if (err) { + return callback(new Error('Grid is invalid:' + err.message)); + } + var data = rows.reduce(function(memo, r) { + memo[r.key_name] = JSON.parse(r.key_json); + return memo; + }, {}); + var result = _(JSON.parse(buffer.toString())).extend({ data: data }); + + callback(null, result); + }); + } ); }; @@ -565,13 +584,23 @@ MBTiles.prototype.putGrid = function(z, x, y, data, callback) { var id = crypto.createHash('md5').update(json).digest('hex'); if (!this._gridCache[id]) { // This corresponds to the grid_utfgrid table. - this._gridCache[id] = _zlib.deflate(new Buffer(json, 'utf8')); - // This corresponds to the grid_key table. - this._keyCache[id] = Object.keys(data.data || {}); - - // This corresponds to the keymap table. - _(this._dataCache).extend(data.data || {}); + /* + this._gridCache[id] = zlib.deflate(new Buffer(json, 'utf8')); + */ + + Step(function() { + zlib.deflate(new Buffer(json, 'utf8'),this); + }, function(err,buffer) { + if (err) return callback(err); + this._gridCache[id] = buffer; + // This corresponds to the grid_key table. + this._keyCache[id] = Object.keys(data.data || {}); + + // This corresponds to the keymap table. + _(this._dataCache).extend(data.data || {}); + } + ); } // This corresponds to the map table. From 1fa4501765a71f202586cd22cccb621b32a65943 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 3 Jan 2012 16:20:34 -0800 Subject: [PATCH 05/11] fix silly scope issue --- lib/mbtiles.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 1bfa462..41f1255 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -588,17 +588,17 @@ MBTiles.prototype.putGrid = function(z, x, y, data, callback) { /* this._gridCache[id] = zlib.deflate(new Buffer(json, 'utf8')); */ - + var that = this; Step(function() { zlib.deflate(new Buffer(json, 'utf8'),this); }, function(err,buffer) { if (err) return callback(err); - this._gridCache[id] = buffer; + that._gridCache[id] = buffer; // This corresponds to the grid_key table. - this._keyCache[id] = Object.keys(data.data || {}); + that._keyCache[id] = Object.keys(data.data || {}); // This corresponds to the keymap table. - _(this._dataCache).extend(data.data || {}); + _(that._dataCache).extend(data.data || {}); } ); } From 6f24e083c56b4f7bdba7b25d488de604bb6c9af8 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 3 Jan 2012 16:35:46 -0800 Subject: [PATCH 06/11] remove commented old zlib code --- lib/mbtiles.js | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 41f1255..59ad15c 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -215,25 +215,6 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { } if (err) return callback(err); - /* - try { - var grid = zlib.inflate( - !Buffer.isBuffer(row.grid) - ? new Buffer(row.grid, 'binary') - : row.grid - ).toString(); - var data = rows.reduce(function(memo, r) { - memo[r.key_name] = JSON.parse(r.key_json); - return memo; - }, {}); - var result = _(JSON.parse(grid)).extend({ data: data }); - } catch (err) { - return callback(new Error('Grid is invalid:' + err.message)); - } - - callback(null, result); - */ - zlib.inflate(!Buffer.isBuffer(row.grid) ? new Buffer(row.grid, 'binary') : row.grid @@ -584,10 +565,6 @@ MBTiles.prototype.putGrid = function(z, x, y, data, callback) { var id = crypto.createHash('md5').update(json).digest('hex'); if (!this._gridCache[id]) { // This corresponds to the grid_utfgrid table. - - /* - this._gridCache[id] = zlib.deflate(new Buffer(json, 'utf8')); - */ var that = this; Step(function() { zlib.deflate(new Buffer(json, 'utf8'),this); From c06cd890aeb47624c264add82ad95039fa5263a3 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 5 Jan 2012 14:02:30 -0800 Subject: [PATCH 07/11] no need for custom zlib modules anymore --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 36b8b31..eea4e9d 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "step": "0.0.x", "sphericalmercator": "1.0.x", "underscore": "1.1.x", - "_zlib": "https://github.com/springmeyer/node-zlib/tarball/master" }, "devDependencies": { "expresso": "~0.9.0" From 0ad267eff7c12148779c9ab9705ebb50fda854dc Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 6 Jan 2012 10:28:47 -0800 Subject: [PATCH 08/11] remove excess comma - thanks @calvinmetcalf for catching - closes #16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eea4e9d..723f10c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "sqlite3": "~2.1.1", "step": "0.0.x", "sphericalmercator": "1.0.x", - "underscore": "1.1.x", + "underscore": "1.1.x" }, "devDependencies": { "expresso": "~0.9.0" From cca4271aa33d206b3af4edfb72fec7a564671319 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Fri, 24 Feb 2012 17:15:50 -0500 Subject: [PATCH 09/11] Move setup step to #startWriting method. --- lib/mbtiles.js | 31 +++++++++++++++++-------------- test/info.test.js | 4 ++-- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 2bd53b5..e8d8c71 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -55,9 +55,6 @@ function MBTiles(uri, callback) { this._batchSize = +uri.query.batch; Step(function() { mbtiles._db = new sqlite3.Database(mbtiles.filename, this); - }, function(err) { - if (err) throw err; - mbtiles._setup(this); }, function(err) { if (err) throw err; fs.stat(mbtiles.filename, this); @@ -389,18 +386,24 @@ MBTiles.prototype.startWriting = function(callback) { if (typeof callback !== 'function') throw new Error('Callback needed'); if (!this.open) return callback(new Error('MBTiles not yet loaded')); - // Sets the synchronous flag to OFF for (much) faster inserts. - // See http://www.sqlite3.org/pragma.html#pragma_synchronous - var mbtiles = this; - if (!this._isWritable) { - this._isWritable = 1; - this._clearCaches(); - this._db.run('PRAGMA synchronous=OFF', callback); - } else { - this._isWritable++; - return callback(null); - } + Step(function() { + mbtiles._setup(this); + }, function(err) { + if (err) throw err; + // Sets the synchronous flag to OFF for (much) faster inserts. + // See http://www.sqlite3.org/pragma.html#pragma_synchronous + if (!mbtiles._isWritable) { + mbtiles._isWritable = 1; + mbtiles._clearCaches(); + mbtiles._db.run('PRAGMA synchronous=OFF', this); + } else { + mbtiles._isWritable++; + this(); + } + }, function(err) { + return callback(err); + }); }; MBTiles.prototype._clearCaches = function() { diff --git a/test/info.test.js b/test/info.test.js index 2c269d7..475343d 100644 --- a/test/info.test.js +++ b/test/info.test.js @@ -61,7 +61,7 @@ exports['get/put metadata from empty file'] = function(beforeExit) { assert.deepEqual({ basename: "empty.mbtiles", - filesize: 16384, + filesize: 0, id: "empty", scheme: "tms" }, data); @@ -89,7 +89,7 @@ exports['get/put metadata from empty file'] = function(beforeExit) { assert.deepEqual({ basename: "empty.mbtiles", - filesize: 16384, + filesize: 0, id: "empty", scheme: "tms", version: "1.0.0" From aa63292fdcfd9aab616c93194d1f3ecc33fc6e01 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 7 Mar 2012 04:35:56 -0500 Subject: [PATCH 10/11] Use readFileSync to avoid errors on low ulimit setups. --- test/write_grids.test.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/test/write_grids.test.js b/test/write_grids.test.js index 4d30c1e..affd2a4 100644 --- a/test/write_grids.test.js +++ b/test/write_grids.test.js @@ -30,20 +30,17 @@ exports['test mbtiles file creation'] = function(beforeExit) { // Flip Y coordinate because file names are TMS, but .putGrid() expects XYZ. coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - fs.readFile(__dirname + '/fixtures/grids/' + file, 'utf8', function(err, grid) { + var grid = fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'); + mbtiles.putGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, JSON.parse(grid), function(err) { if (err) throw err; - - mbtiles.putGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, JSON.parse(grid), function(err) { - if (err) throw err; - completed.written++; - if (completed.written === 241) { - mbtiles.stopWriting(function(err) { - completed.stopped = true; - if (err) throw err; - verifyWritten(); - }); - } - }); + completed.written++; + if (completed.written === 241) { + mbtiles.stopWriting(function(err) { + completed.stopped = true; + if (err) throw err; + verifyWritten(); + }); + } }); } From 10f41ef2d1957971a82ab35ebb3fc1d7b1e3f69c Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Wed, 7 Mar 2012 04:41:01 -0500 Subject: [PATCH 11/11] Same fix for write.test.js. --- test/write.test.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/test/write.test.js b/test/write.test.js index 11b6b3b..958faed 100644 --- a/test/write.test.js +++ b/test/write.test.js @@ -30,20 +30,17 @@ exports['test mbtiles file creation'] = function(beforeExit) { // Flip Y coordinate because file names are TMS, but .putTile() expects XYZ. coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - fs.readFile(__dirname + '/fixtures/images/' + file, function(err, tile) { + var tile = fs.readFileSync(__dirname + '/fixtures/images/' + file); + mbtiles.putTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, tile, function(err) { if (err) throw err; - - mbtiles.putTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, tile, function(err) { - if (err) throw err; - completed.written++; - if (completed.written === 285) { - mbtiles.stopWriting(function(err) { - completed.stopped = true; - if (err) throw err; - verifyWritten(); - }); - } - }); + completed.written++; + if (completed.written === 285) { + mbtiles.stopWriting(function(err) { + completed.stopped = true; + if (err) throw err; + verifyWritten(); + }); + } }); }