@Override
 protected void closeDo() {
   boolean close = true;
   if (this.closed || this.recordStore == null) {
     close = false;
   } else {
     this.closed = true;
   }
   if (close) {
     synchronized (this) {
       if (this.recordDefinition != null) {
         this.recordDefinition = null;
         try {
           try {
             if (this.rows != null) {
               this.rows.close();
             }
           } finally {
             this.recordStore.releaseTable(this.catalogPath);
           }
         } catch (final Throwable e) {
           Logs.error(this, "Error closing query: " + this.catalogPath, e);
         } finally {
           this.boundingBox = null;
           this.recordStore = null;
           this.fields = null;
           this.rows = null;
           this.sql = null;
           this.table = null;
         }
       }
     }
   }
 }
 @Override
 public void renderSelectedRecord(
     final Viewport2D viewport, final AbstractLayer layer, final LayerRecord object) {
   final AbstractRecordLayerRenderer renderer = getRenderer(viewport);
   if (renderer != null) {
     if (isVisible(object)) {
       try {
         renderer.renderSelectedRecord(viewport, layer, object);
       } catch (final Throwable e) {
         Logs.error(
             this, "Unabled to render " + layer.getName() + " #" + object.getIdentifier(), e);
       }
     }
   }
 }
 public void setError(final Throwable e) {
   if (!this.hasError) {
     this.hasError = true;
     Logs.error(this, "Unable to get map tiles", e);
   }
 }