/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.datastore.neo4j.utils;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel;
import org.hibernate.ogm.datastore.neo4j.test.dsl.NodeForGraphAssertions;
import org.hibernate.ogm.datastore.neo4j.test.dsl.RelationshipsChainForGraphAssertions;
import org.hibernate.ogm.datastore.spi.DatastoreProvider;
import org.hibernate.ogm.dialect.spi.GridDialect;
/**
* Groups together the operations needed by the {@link Neo4jTestHelper} that are different for each Neo4j backend.
*
* @author Davide D'Alto
*/
public interface Neo4jTestHelperDelegate {
/**
* Query for counting all entities. This takes embedded nodes into account.
*/
String ENTITY_COUNT_QUERY = "MATCH (n) WHERE n:" + NodeLabel.ENTITY.name() + " OR n:" + NodeLabel.EMBEDDED.name()
+ " RETURN COUNT(n) as count";
String ASSOCIATION_COUNT_QUERY = "MATCH (n) -[r]-> () WITH n as e, count(distinct(type(r))) as c RETURN count(*) as count";
String DELETE_ALL = "MATCH (n) OPTIONAL MATCH (n) -[r]-> () DELETE n,r";
long getNumberOfEntities(Session session, DatastoreProvider provider);
long getNumberOfAssociations(Session session, DatastoreProvider provider);
GridDialect getDialect(DatastoreProvider datastoreProvider);
void deleteAllElements(DatastoreProvider datastoreProvider);
void dropDatabase(DatastoreProvider provider);
Long executeCountQuery(DatastoreProvider datastoreProvider, String queryString);
void executeCypherQuery(DatastoreProvider datastoreProvider, String query, Map<String, Object> parameters);
Object findNode(DatastoreProvider datastoreProvider, NodeForGraphAssertions node);
Map<String, Object> findProperties(DatastoreProvider datastoreProvider, NodeForGraphAssertions node);
Object findRelationshipStartNode(DatastoreProvider datastoreProvider, RelationshipsChainForGraphAssertions relationship);
}