Skip to content

Commit 814bbbd

Browse files
authored
perf: Optimise Bolt values unpacking (#1629)
perf: Optimise Bolt values unpacking This update optimises Bolt values unpacking by implementing specific type mappings in `ValueFactory`.
1 parent 61cd40b commit 814bbbd

File tree

3 files changed

+145
-1
lines changed

3 files changed

+145
-1
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ venv
3030
testkit-backend/bin/
3131
testkit/CAs/
3232
testkit/CustomCAs/
33+
bolt-connection

driver/src/main/java/org/neo4j/driver/internal/value/BoltValueFactory.java

+143
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
package org.neo4j.driver.internal.value;
1818

1919
import java.time.DateTimeException;
20+
import java.time.Duration;
21+
import java.time.LocalDate;
22+
import java.time.LocalDateTime;
23+
import java.time.LocalTime;
24+
import java.time.OffsetDateTime;
25+
import java.time.OffsetTime;
26+
import java.time.Period;
27+
import java.time.ZonedDateTime;
2028
import java.util.Collection;
2129
import java.util.Collections;
2230
import java.util.HashMap;
@@ -47,6 +55,141 @@ public Value value(Object value) {
4755
return ((InternalValue) Values.value(value)).asBoltValue();
4856
}
4957

58+
@Override
59+
public Value value(boolean value) {
60+
return ((InternalValue) Values.value(value)).asBoltValue();
61+
}
62+
63+
@Override
64+
public Value value(long value) {
65+
return ((InternalValue) Values.value(value)).asBoltValue();
66+
}
67+
68+
@Override
69+
public Value value(double value) {
70+
return ((InternalValue) Values.value(value)).asBoltValue();
71+
}
72+
73+
@Override
74+
public Value value(byte[] values) {
75+
if (values == null) {
76+
return value((Object) null);
77+
}
78+
return ((InternalValue) Values.value(values)).asBoltValue();
79+
}
80+
81+
@Override
82+
public Value value(String value) {
83+
if (value == null) {
84+
return value((Object) null);
85+
}
86+
return ((InternalValue) Values.value(value)).asBoltValue();
87+
}
88+
89+
@Override
90+
public Value value(Map<String, Value> stringToValue) {
91+
if (stringToValue == null) {
92+
return value((Object) null);
93+
}
94+
return ((InternalValue) Values.value(stringToValue)).asBoltValue();
95+
}
96+
97+
@Override
98+
public Value value(Value[] values) {
99+
if (values == null) {
100+
return value((Object) null);
101+
}
102+
return ((InternalValue) Values.value(values)).asBoltValue();
103+
}
104+
105+
@Override
106+
public Value value(Node node) {
107+
if (node == null) {
108+
return value((Object) null);
109+
}
110+
return ((InternalValue) Values.value(node)).asBoltValue();
111+
}
112+
113+
@Override
114+
public Value value(Relationship relationship) {
115+
if (relationship == null) {
116+
return value((Object) null);
117+
}
118+
return ((InternalValue) Values.value(relationship)).asBoltValue();
119+
}
120+
121+
@Override
122+
public Value value(Path path) {
123+
if (path == null) {
124+
return value((Object) null);
125+
}
126+
return ((InternalValue) Values.value(path)).asBoltValue();
127+
}
128+
129+
@Override
130+
public Value value(LocalDate localDate) {
131+
if (localDate == null) {
132+
return value((Object) null);
133+
}
134+
return ((InternalValue) Values.value(localDate)).asBoltValue();
135+
}
136+
137+
@Override
138+
public Value value(OffsetTime offsetTime) {
139+
if (offsetTime == null) {
140+
return value((Object) null);
141+
}
142+
return ((InternalValue) Values.value(offsetTime)).asBoltValue();
143+
}
144+
145+
@Override
146+
public Value value(LocalTime localTime) {
147+
if (localTime == null) {
148+
return value((Object) null);
149+
}
150+
return ((InternalValue) Values.value(localTime)).asBoltValue();
151+
}
152+
153+
@Override
154+
public Value value(LocalDateTime localDateTime) {
155+
if (localDateTime == null) {
156+
return value((Object) null);
157+
}
158+
return ((InternalValue) Values.value(localDateTime)).asBoltValue();
159+
}
160+
161+
@Override
162+
public Value value(OffsetDateTime offsetDateTime) {
163+
if (offsetDateTime == null) {
164+
return value((Object) null);
165+
}
166+
return ((InternalValue) Values.value(offsetDateTime)).asBoltValue();
167+
}
168+
169+
@Override
170+
public Value value(ZonedDateTime zonedDateTime) {
171+
if (zonedDateTime == null) {
172+
return value((Object) null);
173+
}
174+
return ((InternalValue) Values.value(zonedDateTime)).asBoltValue();
175+
}
176+
177+
@Override
178+
public Value value(Period period) {
179+
if (period == null) {
180+
return value((Object) null);
181+
}
182+
return ((InternalValue) Values.value(period)).asBoltValue();
183+
}
184+
185+
@Override
186+
public Value value(Duration duration) {
187+
if (duration == null) {
188+
return value((Object) null);
189+
}
190+
return ((InternalValue) Values.value(duration)).asBoltValue();
191+
}
192+
50193
@Override
51194
public Node node(long id, String elementId, Collection<String> labels, Map<String, Value> properties) {
52195
return new InternalNode(id, elementId, labels, toDriverMap(properties));

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<maven.deploy.skip>true</maven.deploy.skip>
3333

3434
<!-- Versions -->
35-
<neo4j-bolt-connection-bom.version>1.0.0</neo4j-bolt-connection-bom.version>
35+
<neo4j-bolt-connection-bom.version>1.1.0</neo4j-bolt-connection-bom.version>
3636
<reactive-streams.version>1.0.4</reactive-streams.version>
3737
<!-- Please note that when updating this dependency -->
3838
<!-- (i.e. due to a security vulnerability or bug) that the -->

0 commit comments

Comments
 (0)