Skip to content

Commit e86fd2e

Browse files
committed
Migrate LoadCSVIT to CALL {} IN TRANSACTIONS for newer server
This applies to server versions above 4.4.
1 parent 350435c commit e86fd2e

File tree

2 files changed

+36
-18
lines changed

2 files changed

+36
-18
lines changed

driver/src/test/java/org/neo4j/driver/integration/LoadCSVIT.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525

2626
import org.neo4j.driver.Driver;
2727
import org.neo4j.driver.GraphDatabase;
28-
import org.neo4j.driver.Session;
2928
import org.neo4j.driver.Result;
29+
import org.neo4j.driver.Session;
3030
import org.neo4j.driver.util.DatabaseExtension;
3131
import org.neo4j.driver.util.Neo4jSettings;
3232
import org.neo4j.driver.util.ParallelizableIT;
@@ -51,15 +51,25 @@ void shouldLoadCSV() throws Throwable
5151
String csvFileUrl = createLocalIrisData( session );
5252

5353
// When
54-
Result result = session.run(
55-
"USING PERIODIC COMMIT 40\n" +
56-
"LOAD CSV WITH HEADERS FROM $csvFileUrl AS l\n" +
57-
"MATCH (c:Class {name: l.class_name})\n" +
58-
"CREATE (s:Sample {sepal_length: l.sepal_length, sepal_width: l.sepal_width, petal_length: l.petal_length, petal_width: l.petal_width})\n" +
54+
String query = neo4j.isNeo4j44OrEarlier() ?
55+
"USING PERIODIC COMMIT 40\n" +
56+
"LOAD CSV WITH HEADERS FROM $csvFileUrl AS l\n" +
57+
"MATCH (c:Class {name: l.class_name})\n" +
58+
"CREATE (s:Sample {sepal_length: l.sepal_length, sepal_width: l.sepal_width, petal_length: l.petal_length, petal_width: l.petal_width})\n" +
59+
60+
"CREATE (c)<-[:HAS_CLASS]-(s) " +
61+
"RETURN count(*) AS c"
62+
:
63+
"LOAD CSV WITH HEADERS FROM $csvFileUrl AS l\n" +
64+
"CALL {\n" +
65+
"WITH l\n" +
66+
"MATCH (c:Class {name: l.class_name})\n" +
67+
"CREATE (s:Sample {sepal_length: l.sepal_length, sepal_width: l.sepal_width, petal_length: l.petal_length, petal_width: l.petal_width})\n" +
68+
"CREATE (c)<-[:HAS_CLASS]-(s)" +
69+
"} IN TRANSACTIONS\n" +
70+
"RETURN count(*) AS c";
5971

60-
"CREATE (c)<-[:HAS_CLASS]-(s) " +
61-
"RETURN count(*) AS c",
62-
parameters( "csvFileUrl", csvFileUrl ) );
72+
Result result = session.run( query, parameters( "csvFileUrl", csvFileUrl ) );
6373

6474
// Then
6575
assertThat( result.next().get( "c" ).asInt(), equalTo( 150 ) );

driver/src/test/java/org/neo4j/driver/util/DatabaseExtension.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,21 +160,29 @@ public void stopDb()
160160
runner.stopNeo4j();
161161
}
162162

163+
public boolean isNeo4j44OrEarlier()
164+
{
165+
return isNeo4jVersionOrEarlier( 4, 4 );
166+
}
167+
163168
public boolean isNeo4j43OrEarlier()
164169
{
165-
try ( Session session = driver().session() )
166-
{
167-
String neo4jVersion = session.readTransaction( tx -> tx.run( "CALL dbms.components() YIELD versions " +
168-
"RETURN versions[0] AS version" ).single().get( "version" ).asString() );
169-
String[] versions = neo4jVersion.split( "\\." );
170-
int major = parseInt( versions[0] );
171-
int minor = parseInt( versions[1] );
172-
return major <= 4 && minor <= 3;
173-
}
170+
return isNeo4jVersionOrEarlier( 4, 3 );
174171
}
175172

176173
public void dumpLogs()
177174
{
178175
runner.dumpDebugLog();
179176
}
177+
178+
private boolean isNeo4jVersionOrEarlier( int major, int minor )
179+
{
180+
try ( Session session = driver().session() )
181+
{
182+
String neo4jVersion = session.readTransaction( tx -> tx.run( "CALL dbms.components() YIELD versions " +
183+
"RETURN versions[0] AS version" ).single().get( "version" ).asString() );
184+
String[] versions = neo4jVersion.split( "\\." );
185+
return parseInt( versions[0] ) <= major && parseInt( versions[1] ) <= minor;
186+
}
187+
}
180188
}

0 commit comments

Comments
 (0)