docs: function( key, geojson, layerId, callback ){
      var self = this; 
      var info = {},
        count = 0;
        error = null;
        
        info.name = geojson.name ;
        info.updated_at = geojson.updated_at;
        info.expires_at = geojson.expires_at;
        info.retrieved_at = geojson.retrieved_at;
        info.status = geojson.status;
        info.format = geojson.format;
        info.sha = geojson.sha;
        info.info = geojson.info;
     
        var table = key+':'+layerId;
  
        var feature = (geojson[0]) ? geojson[0].features[0] : geojson.features[0];
        
        var types = {
          'esriGeometryPolyline': 'LineString',
          'esriGeometryPoint': 'Point',
          'esriGeometryPolygon': 'Polygon'
        };
  
        if (!feature){
          feature = { geometry: { type: geojson.geomType || types[geojson.info.geometryType] } };
        }
  
        self._createTable( table, self._buildSchemaFromFeature(feature), true, function(err, result){
          if (err){
            callback(err, false);
            return;
          }
  
          // insert each feature
          if ( geojson.length ){
            geojson = geojson[0];
          }
          geojson.features.forEach(function(feature, i){
            self._query(self._insertFeature(table, feature, i), function(err){ 
              if (err) {
                self.log.error(err); 
              }
            });
          });
  
          // TODO Why not use an update query here? 
          self._query( 'delete from "'+self.infoTable+'" where id=\''+table+':info\'', function(err,res){
            self._query( 'insert into "'+self.infoTable+'" values (\''+table+':info\',\''+JSON.stringify(info).replace(/'/g,'')+'\')', function(err, result){
              callback(err, true);
            });
          });
        });     
      
    }