Skip to content

Commit c76dcf9

Browse files
Fix double to long conversions
1 parent adaeaf7 commit c76dcf9

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

proc/catalog/src/test/java/org/neo4j/gds/catalog/GraphProjectSubgraphProcTest.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
class GraphProjectSubgraphProcTest extends BaseProcTest {
4646

4747
@Neo4jGraph
48-
public static final String DB = "CREATE (a:A)-[:REL { weight: 42.0 }]->(b:B)";
48+
public static final String DB = "CREATE (a:A { prop: 1337 })-[:REL { weight: 42.0 }]->(b:B { prop: 0 })";
4949

5050
@BeforeEach
5151
void setup() throws Exception {
@@ -55,6 +55,7 @@ void setup() throws Exception {
5555
.graphProject()
5656
.withNodeLabel("A")
5757
.withNodeLabel("B")
58+
.withNodeProperty("prop")
5859
.withRelationshipType("REL")
5960
.withRelationshipProperty("weight")
6061
.yields()
@@ -117,7 +118,7 @@ void executeProc() {
117118
"subgraph"
118119
).graphStore();
119120

120-
assertGraphEquals(fromGdl("(:A)"), subgraphStore.getUnion());
121+
assertGraphEquals(fromGdl("(:A { prop: 1337 })"), subgraphStore.getUnion());
121122
}
122123

123124
@Test
@@ -185,4 +186,21 @@ void shouldResolveParameters(String operator, int expectedRelationships) {
185186
var graphStore = GraphStoreCatalog.get("", db.databaseId(), "subgraph").graphStore();
186187
assertThat(graphStore.relationshipCount()).isEqualTo(expectedRelationships);
187188
}
189+
190+
@ParameterizedTest
191+
@CsvSource({
192+
">=, 2",
193+
">, 1"
194+
})
195+
void shouldResolveParametersWhenPassedAsConstants(String operator, int expectedNodes) {
196+
var subGraphQuery = formatWithLocale(
197+
"CALL gds.beta.graph.project.subgraph('subgraph', 'graph', 'n.prop %s $threshold', 'true', { parameters: { threshold: 0 } })",
198+
operator
199+
);
200+
201+
runQuery(subGraphQuery);
202+
203+
var graphStore = GraphStoreCatalog.get("", db.databaseId(), "subgraph").graphStore();
204+
assertThat(graphStore.nodeCount()).isEqualTo(expectedNodes);
205+
}
188206
}

subgraph-filtering/src/main/java/org/neo4j/gds/beta/filter/expression/EvaluationContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ protected EvaluationContext(Map<String, Object> parameterMap) {
3838
this.parameterMap = parameterMap;
3939
}
4040

41-
double resolveParameter(String parameterName) {
42-
return ((Number) this.parameterMap.get(parameterName)).doubleValue();
41+
Number resolveParameter(String parameterName) {
42+
return (Number) this.parameterMap.get(parameterName);
4343
}
4444

4545
abstract double getProperty(String propertyKey, ValueType propertyType);

subgraph-filtering/src/main/java/org/neo4j/gds/beta/filter/expression/Expression.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,19 @@ interface NewParameter extends UnaryExpression {
205205
@Override
206206
LeafExpression.Variable in();
207207

208+
@Override
209+
default ValueType valueType() {
210+
return ValueType.UNKNOWN;
211+
}
212+
208213
@Value.Derived
209214
@Override
210215
default double evaluate(EvaluationContext context) {
211-
return context.resolveParameter(in().name());
216+
var resolvedParameter = context.resolveParameter(in().name());
217+
if (resolvedParameter instanceof Long) {
218+
return resolvedParameter.longValue();
219+
}
220+
return resolvedParameter.doubleValue();
212221
}
213222

214223
@Override
@@ -278,7 +287,10 @@ default double evaluate(EvaluationContext context) {
278287
// It is sufficient to check one of the input types
279288
// as validation made sure that the types are equal.
280289
if (lhs().valueType() == ValueType.LONG) {
281-
return evaluateLong(Double.doubleToRawLongBits(lhsValue), Double.doubleToRawLongBits(rhsValue));
290+
long convertedRhsValue = rhs().valueType() == ValueType.UNKNOWN
291+
? (long) rhsValue
292+
: Double.doubleToRawLongBits(rhsValue);
293+
return evaluateLong(Double.doubleToRawLongBits(lhsValue), convertedRhsValue);
282294
}
283295

284296
return evaluateDouble(lhsValue, rhsValue);

subgraph-filtering/src/main/java/org/neo4j/gds/beta/filter/expression/GdsAstFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Expression.LeafExpression.Variable newVariable(InputPosition p, String na
4646
public Expression newParameter(
4747
InputPosition p, Expression.LeafExpression.Variable v
4848
) {
49-
return ImmutableNewParameter.of(v.valueType(), v);
49+
return ImmutableNewParameter.of(v);
5050
}
5151

5252
@Override

0 commit comments

Comments
 (0)