/*
  * Reset the underlying JDBC database tables
  */
 private Pair<Long, URI> resetDatabaseTables(
     NodeCentricOperationContext connectionContext, boolean hardReset) throws AnzoException {
   try {
     dropTables(connectionContext, hardReset);
     datasource.begin(connectionContext.getConnection(), true, true);
     Long ts = Long.valueOf(0);
     LastTransactionTime.insertFirstTransactionTime(
         connectionContext.getStatementProvider(), connectionContext.getConnection(), ts);
     URI serverUri = UriGenerator.generateServerIdURI();
     Long serverId =
         connectionContext.getNodeLayout().store(serverUri, connectionContext.getConnection(), 1);
     ServerRdbWrapper.setServerId(
         connectionContext.getStatementProvider(), connectionContext.getConnection(), serverId);
     connectionContext
         .getNodeLayout()
         .store(Constants.EVERYONE_ROLE, connectionContext.getConnection(), 1);
     datasource.commit(connectionContext.getConnection(), true, true);
     connectionContext.getNodeLayout().commitReferencedIds(connectionContext.getConnection(), 1);
     return new Pair<Long, URI>(serverId, serverUri);
   } catch (Exception e) {
     log.error(LogUtils.RDB_MARKER, "SQL Error resetting database tables", e);
     datasource.abort(connectionContext.getConnection(), true, true);
     throw new AnzoException(ExceptionConstants.RDB.OPERATION_ERROR, e, e.getMessage());
   }
 }
 void handleStatement(boolean addition, Long graphId, Long subj, Long prop, Long obj)
     throws AnzoException {
   URI graphNode = getValue(graphId);
   Resource subjNode = getValue(subj);
   URI propNode = getValue(prop);
   Value objNode = getValue(obj);
   URI ngURI = graphNode;
   boolean meta = false;
   if (UriGenerator.isMetadataGraphUri(ngURI)) {
     ngURI = UriGenerator.stripEncapsulatedURI(NAMESPACES.METADATAGRAPH_PREFIX, ngURI);
     meta = true;
   }
   NamedGraphRevision ngr = ngs.get(ngURI);
   if (ngr == null) {
     throw new AnzoException(
         ExceptionConstants.DATASOURCE.NAMEDGRAPH.REVISION_NOT_FOUND, "?", ngURI.toString());
   }
   if (meta
       && (!ngr.readMeta
           && !(ngr.readGraph && subjNode.equals(ngURI) && isSpecialMeta(propNode)))) {
     return;
   } else if (!meta && !ngr.readGraph) {
     return;
   }
   if (lastNGRevision == null || !lastNGRevision.namedGraphUri.equals(ngURI)) {
     handler.handleNamedGraph(ngr.namedGraphUri, ngr.uuid, ngr.revision);
     lastNGRevision = ngr;
     if (newGraph.get(ngURI) && lastNGRevision.cache == null) {
       lastNGRevision.cache = new ArrayList<Statement>();
     }
   }
   handler.handleStatement(meta, addition, subjNode, propNode, objNode, graphNode);
   if (addition && lastNGRevision.cache != null) {
     lastNGRevision.cache.add(
         Constants.valueFactory.createStatement(subjNode, propNode, objNode, graphNode));
   }
 }