Merge pull request #60 from mapbox/geocoder-err-handling

Handle table not found error in getGeocoderData
This commit is contained in:
Young Hahn
2015-10-29 16:10:41 -04:00
2 changed files with 29 additions and 13 deletions

View File

@@ -600,6 +600,7 @@ MBTiles.prototype.putInfo = function(data, callback) {
// Implements carmen#getGeocoderData method.
MBTiles.prototype.getGeocoderData = function(type, shard, callback) {
return this._db.get('SELECT data FROM geocoder_data WHERE type = ? AND shard = ?', type, shard, function(err, row) {
if (err && err.code === 'SQLITE_ERROR' && err.errno === 1) return callback();
if (err) return callback(err);
if (!row) return callback();
zlib.inflate(row.data, callback);

View File

@@ -13,12 +13,16 @@ var expected = {
};
var tmp = require('os').tmpdir() + '/mbtiles-test-' + (+new Date).toString(16);
var tilesOnly;
var index;
var from;
var to;
try { fs.mkdirSync(tmp); } catch(err) { throw err; }
tape('setup', function(assert) {
tilesOnly = new MBTiles(tmp + '/tilesOnly.mbtiles', assert.end);
});
tape('setup', function(assert) {
index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', assert.end);
});
@@ -37,6 +41,22 @@ tape('getGeocoderData', function(assert) {
});
});
tape('getGeocoderData (nodata)', function(assert) {
index.getGeocoderData('term', 1e6, function(err, buffer) {
assert.ifError(err);
assert.equal(buffer, undefined);
assert.end();
});
});
tape('getGeocoderData (no table)', function(assert) {
tilesOnly.getGeocoderData('term', 0, function(err, buffer) {
assert.ifError(err);
assert.equal(buffer, undefined);
assert.end();
});
});
tape('putGeocoderData', function(assert) {
to.startWriting(function(err) {
assert.ifError(err);
@@ -144,19 +164,14 @@ tape('geocoderCentroid USA', function(assert) {
});
});
tape('cleanup', function(assert) { tilesOnly.close(assert.end); });
tape('cleanup', function(assert) { index.close(assert.end); });
tape('cleanup', function(assert) { from.close(assert.end); });
tape('cleanup', function(assert) { to.close(assert.end); });
tape('cleanup', function(assert) {
index.close(function(err) {
if (err) throw err;
from.close(function(err) {
if (err) throw err;
to.close(function(err) {
if (err) throw err;
try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; }
try { fs.rmdirSync(tmp); } catch(err) { throw err; }
assert.end();
});
});
});
try { fs.unlinkSync(tmp + '/tilesOnly.mbtiles'); } catch(err) { throw err; }
try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; }
try { fs.rmdirSync(tmp); } catch(err) { throw err; }
assert.end();
});