@Test public void queryThatModifyDataAndSeeUnstableSnapshotThrowException() { try { database.execute( "MATCH (n:toRetry) CREATE () RETURN n.c" ); } catch ( QueryExecutionException e ) { assertEquals( "Unable to get clean data snapshot for query " + "'MATCH (n:toRetry) CREATE () RETURN n.c' that perform updates.", e.getMessage() ); } }
@Test public void creatingNormalIndexWithFulltextProviderMustThrow() { db = createDatabase(); assertThat( FulltextIndexProviderFactory.DESCRIPTOR.name(), is( "fulltext-1.0" ) ); // Sanity check that this test is up to date. try ( Transaction tx = db.beginTx() ) { db.execute( "call db.createIndex( \":User(searchableString)\", \"" + FulltextIndexProviderFactory.DESCRIPTOR.name() + "\" );" ).close(); tx.success(); } catch ( QueryExecutionException e ) { assertThat( e.getMessage(), containsString( "only supports fulltext index descriptors" ) ); } try ( Transaction tx = db.beginTx() ) { long indexCount = db.execute( DB_INDEXES ).stream().count(); assertThat( indexCount, is( 0L ) ); tx.success(); } }
@Test public void testMergeWithEmptyIdentityPropertiesShouldFail() { for (String idProps: new String[]{"null", "{}"}) { try { testCall(db, "CALL apoc.merge.node(['Person']," + idProps +", {name:'John'}) YIELD node RETURN node", row -> assertTrue(row.get("node") instanceof Node)); fail(); } catch (QueryExecutionException e) { assertTrue(e.getMessage().contains("you need to supply at least one identifying property for a merge")); } } }
@Test public void testLoadBrokenHeader() throws Exception { BiFunction<String,Boolean,Long> query = (sheet,header) -> db.execute("CALL apoc.load.xls({url},{sheet},{header:{header}}) yield map return count(*) as c", map("header",header,"sheet",sheet,"url", brokenHeader)).<Long>columnAs("c").next(); try { query.apply("temp",true); fail("Should fail with Header Error"); } catch(QueryExecutionException qee) { assertEquals("Failed to invoke procedure `apoc.load.xls`: Caused by: java.lang.IllegalStateException: Header at position 4 doesn't have a value", qee.getMessage()); } try { query.apply("foo",false); fail("Should fail with Sheet Error"); } catch(QueryExecutionException qee) { assertEquals("Failed to invoke procedure `apoc.load.xls`: Caused by: java.lang.IllegalStateException: Sheet foo not found", qee.getMessage()); } assertEquals(2L, (long)query.apply("temp",false)); } @Test public void testLoadXlsMany() throws Exception {
private Result executeRequest(Statement request) { try { Map<String, Object> parameterMap = parameterConversion.convertParameters(request.getParameters()); String cypher = cypherModification.apply(request.getStatement()); if(LOGGER.isDebugEnabled()) { LOGGER.debug("Request: {} with params {}", cypher, parameterMap); } return graphDatabaseService.execute(cypher, parameterMap); } catch (QueryExecutionException qee) { throw new CypherException(qee.getStatusCode(), qee.getMessage(), qee); } catch (Exception e) { throw new RuntimeException(e); } } }
private Result executeRequest(Statement request) { try { Map<String, Object> parameterMap = this.parameterConversion.convertParameters(request.getParameters()); String cypher = cypherModification.apply(request.getStatement()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Request: {} with params {}", cypher, parameterMap); } return graphDatabaseService.execute(cypher, parameterMap); } catch (QueryExecutionException qee) { throw new CypherException(qee.getStatusCode(), qee.getMessage(), qee); } catch (Exception e) { throw new RuntimeException(e); } } }
@Override public ClosableIterator<Tuple> callStoredProcedure(String storedProcedureName, ProcedureQueryParameters queryParameters, TupleContext tupleContext) { Map.Entry<String, Map<String, Object>> queryAndParams = buildProcedureQueryWithParams( storedProcedureName, queryParameters ); try { Result result = dataBase.execute( queryAndParams.getKey(), queryAndParams.getValue() ); return new EmbeddedNeo4jBackendQueryResultIterator( result, null, tupleContext ); } catch (QueryExecutionException e) { switch ( e.getStatusCode() ) { case BaseNeo4jDialect.PROCEDURE_CALL_FAILED_CODE: throw log.cannotExecuteStoredProcedure( storedProcedureName, e ); case BaseNeo4jDialect.PROCEDURE_NOT_FOUND_CODE: throw log.procedureWithResolvedNameDoesNotExist( storedProcedureName, e ); default: throw new HibernateException( e.getMessage() ); } } }
@Override public int executeBackendUpdateQuery(BackendQuery<String> backendQuery, QueryParameters queryParameters, TupleContext tupleContext) { Map<String, Object> parameters = getParameters( queryParameters ); String nativeQuery = buildNativeQuery( backendQuery, queryParameters ); try { Result result = dataBase.execute( nativeQuery, parameters ); return summaryUpdates( result ); } catch (QueryExecutionException qe) { throw log.nativeQueryException( qe.getStatusCode(), qe.getMessage(), qe ); } }
@Override public ClosableIterator<Tuple> executeBackendQuery(BackendQuery<String> backendQuery, QueryParameters queryParameters, TupleContext tupleContext) { Map<String, Object> parameters = getParameters( queryParameters ); String nativeQuery = buildNativeQuery( backendQuery, queryParameters ); try { Result result = dataBase.execute( nativeQuery, parameters ); EntityMetadataInformation entityMetadataInformation = backendQuery.getSingleEntityMetadataInformationOrNull(); return new EmbeddedNeo4jBackendQueryResultIterator( result, entityMetadataInformation, tupleContext ); } catch (QueryExecutionException qe) { throw log.nativeQueryException( qe.getStatusCode(), qe.getMessage(), qe ); } }