@Override public void onEnd(ODatabaseDocument database) { tx.close(); } }
@Override public List<DocumentEntity> sql(String query, Map<String, Object> params) { requireNonNull(query, "query is required"); requireNonNull(params, "params is required"); try (ODatabaseSession tx = pool.acquire(); OResultSet resultSet = tx.command(query, params)) { return OrientDBConverter.convert(resultSet); } }
@Override public void live(String query, OrientDBLiveCallback<DocumentEntity> callbacks, Object... params) { requireNonNull(query, "query is required"); requireNonNull(callbacks, "callbacks is required"); ODatabaseSession tx = pool.acquire(); tx.live(query, new LiveQueryListener(callbacks, tx)); }
@Override public DocumentEntity insert(DocumentEntity entity) { requireNonNull(entity, "Entity is required"); try (ODatabaseSession tx = pool.acquire()) { ODocument document = new ODocument(entity.getName()); toMap(entity).forEach(document::field); try { tx.save(document); } catch (ONeedRetryException e) { document = tx.reload(document, OFetchHelper.DEFAULT, false); Map<String, Object> entityValues = toMap(entity); entityValues.put(OrientDBConverter.VERSION_FIELD, document.getVersion()); entityValues.forEach(document::field); tx.save(document); } updateEntity(entity, document); return entity; } }
@Override public void delete(DocumentDeleteQuery query) { requireNonNull(query, "query is required"); DocumentQuery selectQuery = new OrientDBDocumentQuery(query); QueryOSQLFactory.QueryResult orientQuery = QueryOSQLFactory.to(selectQuery); try (ODatabaseSession tx = pool.acquire(); OResultSet resultSet = tx.command(orientQuery.getQuery(), orientQuery.getParams())) { while (resultSet.hasNext()) { OResult next = resultSet.next(); tx.delete(next.toElement().getIdentity()); } } }
public void repair(final ODatabaseSession graph, final OCommandOutputListener outputListener, final Map<String, List<String>> options) { message(outputListener, "Repair of graph '" + graph.getURL() + "' is started ...\n"); final long beginTime = System.currentTimeMillis(); final ORepairStats stats = new ORepairStats(); // SCAN AND CLEAN ALL THE EDGES FIRST (IF ANY) repairEdges(graph, stats, outputListener, options, false); // SCAN ALL THE VERTICES repairVertices(graph, stats, outputListener, options, false); message(outputListener, "Repair of graph '" + graph.getURL() + "' completed in " + ((System.currentTimeMillis() - beginTime) / 1000) + " secs\n"); message(outputListener, " scannedEdges.....: " + stats.scannedEdges + "\n"); message(outputListener, " removedEdges.....: " + stats.removedEdges + "\n"); message(outputListener, " scannedVertices..: " + stats.scannedVertices + "\n"); message(outputListener, " scannedLinks.....: " + stats.scannedLinks + "\n"); message(outputListener, " removedLinks.....: " + stats.removedLinks + "\n"); message(outputListener, " repairedVertices.: " + stats.repairedVertices + "\n"); }
private static Object convertToType(Object item, OClass linkedClass, OCommandContext ctx) { if (item instanceof OElement) { OClass currentType = ((OElement) item).getSchemaType().orElse(null); if (currentType == null || !currentType.isSubClassOf(linkedClass)) { OElement result = ((ODatabaseSession) ctx.getDatabase()).newElement(linkedClass.getName()); for (String prop : ((OElement) item).getPropertyNames()) { result.setProperty(prop, ((OElement) item).getProperty(prop)); } return result; } else { return item; } } else if (item instanceof Map) { OElement result = ((ODatabaseSession) ctx.getDatabase()).newElement(linkedClass.getName()); ((Map<String, Object>) item).entrySet().stream().forEach(x -> result.setProperty(x.getKey(), x.getValue())); return result; } return item; }
@Override public void insert(DocumentEntity entity, Consumer<DocumentEntity> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException { requireNonNull(entity, "Entity is required"); requireNonNull(callBack, "Callback is required"); ODatabaseSession tx = pool.acquire(); ODocument document = new ODocument(entity.getName()); Map<String, Object> entityValues = entity.toMap(); entityValues.keySet().stream().forEach(k -> document.field(k, entityValues.get(k))); ORecordCallback<Number> createCallBack = (rid, clusterPosition) -> { entity.add(Document.of(RID_FIELD, rid.toString())); callBack.accept(entity); }; ORecordCallback<Integer> updateCallback = (rid, version) -> { entity.add(Document.of(RID_FIELD, rid.toString())); entity.add(Document.of(VERSION_FIELD, version)); callBack.accept(entity); }; tx.save(document, null, ASYNCHRONOUS, false, createCallBack, updateCallback); }
public void check(final ODatabaseSession graph, final OCommandOutputListener outputListener, final Map<String, List<String>> options) { message(outputListener, "Check of graph '" + graph.getURL() + "' is started...\n"); final long beginTime = System.currentTimeMillis(); final ORepairStats stats = new ORepairStats(); // SCAN AND CLEAN ALL THE EDGES FIRST (IF ANY) repairEdges(graph, stats, outputListener, options, true); // SCAN ALL THE VERTICES repairVertices(graph, stats, outputListener, options, true); message(outputListener, "Check of graph '" + graph.getURL() + "' completed in " + ((System.currentTimeMillis() - beginTime) / 1000) + " secs\n"); message(outputListener, " scannedEdges.....: " + stats.scannedEdges + "\n"); message(outputListener, " edgesToRemove....: " + stats.removedEdges + "\n"); message(outputListener, " scannedVertices..: " + stats.scannedVertices + "\n"); message(outputListener, " scannedLinks.....: " + stats.scannedLinks + "\n"); message(outputListener, " linksToRemove....: " + stats.removedLinks + "\n"); message(outputListener, " verticesToRepair.: " + stats.repairedVertices + "\n"); }
@Override public long count(String documentCollection) { requireNonNull(documentCollection, "query is required"); try (ODatabaseSession tx = pool.acquire()) { String query = "select count(*) from ".concat(documentCollection); OResultSet command = tx.command(query); OResult next = command.next(); Object count = next.getProperty("count(*)"); return Number.class.cast(count).longValue(); } }
@Override public void start(final String database) { this.database = database; pool = new ODatabasePool(orientDB.get(), database, userManager.getUser(), userManager.getPassword()); // check database connection pool.acquire().close(); logger.debug("Pool {} started for database '{}'", getType(), this.database); }
@Override public void live(DocumentQuery query, OrientDBLiveCallback<DocumentEntity> callbacks) { requireNonNull(query, "query is required"); requireNonNull(callbacks, "callbacks is required"); ODatabaseSession tx = pool.acquire(); QueryOSQLFactory.QueryResult queryResult = QueryOSQLFactory.toLive(query, callbacks); tx.live(queryResult.getQuery(), new LiveQueryListener(callbacks, tx)); }
@Override public List<DocumentEntity> sql(String query, Object... params) { requireNonNull(query, "query is required"); try (ODatabaseSession tx = pool.acquire(); OResultSet resultSet = tx.command(query, params)) { return OrientDBConverter.convert(resultSet); } }
@Override public void sql(String query, Consumer<List<DocumentEntity>> callBack, Map<String, Object> params) throws NullPointerException { requireNonNull(query, "query is required"); requireNonNull(callBack, "callBack is required"); requireNonNull(params, "params is required"); ODatabaseSession tx = pool.acquire(); QueryOSQLFactory.QueryResultAsync orientQuery = toAsync(query, l -> callBack.accept(l.stream() .map(OrientDBConverter::convert) .collect(toList())), params); tx.command(orientQuery.getQuery()).execute(orientQuery.getParams()); }
@Override public void sql(String query, Consumer<List<DocumentEntity>> callBack, Object... params) throws NullPointerException { requireNonNull(query, "query is required"); requireNonNull(callBack, "callBack is required"); ODatabaseSession tx = pool.acquire(); QueryOSQLFactory.QueryResultAsync orientQuery = toAsync(query, l -> callBack.accept(l.stream() .map(OrientDBConverter::convert) .collect(toList())), params); tx.command(orientQuery.getQuery()).execute(orientQuery.getParams()); }
@Override public void select(DocumentQuery query, Consumer<List<DocumentEntity>> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException { requireNonNull(query, "query is required"); requireNonNull(callBack, "callBack is required"); ODatabaseSession tx = pool.acquire(); QueryOSQLFactory.QueryResultAsync orientQuery = toAsync(query, l -> callBack.accept(l.stream() .map(OrientDBConverter::convert) .collect(toList()))); tx.command(orientQuery.getQuery()).execute(orientQuery.getParams()); }
@Override public void count(String documentCollection, Consumer<Long> callback) { requireNonNull(documentCollection, "query is required"); requireNonNull(callback, "callBack is required"); ODatabaseSession tx = pool.acquire(); String query = "select count(*) from ".concat(documentCollection); Consumer<List<ODocument>> orientCallback = l -> callback.accept(l.stream() .findFirst() .map(e -> e.field("count")) .map(n -> Number.class.cast(n).longValue()) .orElse(0L)); QueryOSQLFactory.QueryResultAsync orientQuery = toAsync(query, orientCallback); tx.command(orientQuery.getQuery()).execute(orientQuery.getParams()); }
@Override public void delete(DocumentDeleteQuery query, Consumer<Void> callBack) throws ExecuteAsyncQueryException, UnsupportedOperationException { requireNonNull(query, "query is required"); requireNonNull(callBack, "callBack is required"); ODatabaseSession tx = pool.acquire(); DocumentQuery selectQuery = new OrientDBDocumentQuery(query); QueryOSQLFactory.QueryResultAsync orientQuery = toAsync(selectQuery, l -> { l.forEach(ORecordAbstract::delete); callBack.accept(null); }); tx.command(orientQuery.getQuery()).execute(orientQuery.getParams()); }
@Override public List<DocumentEntity> select(DocumentQuery query) { requireNonNull(query, "query is required"); QueryOSQLFactory.QueryResult orientQuery = QueryOSQLFactory.to(query); try (ODatabaseSession tx = pool.acquire()) { List<DocumentEntity> entities = new ArrayList<>(); if (orientQuery.isRunQuery()) { try (OResultSet resultSet = tx.command(orientQuery.getQuery(), orientQuery.getParams())) { entities.addAll(OrientDBConverter.convert(resultSet)); } } if (orientQuery.isLoad()) { orientQuery.getIds().stream().map(tx::load) .map(o -> OrientDBConverter.convert((ODocument) o)) .forEach(entities::add); } return entities; } }