Skip to content

Commit f2a27f1

Browse files
committed
Use mapper to extract node ids
1 parent 761e9e4 commit f2a27f1

File tree

1 file changed

+53
-12
lines changed

1 file changed

+53
-12
lines changed

cypher-aggregation/src/main/java/org/neo4j/gds/projection/CypherAggregation.java

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@
6666
import org.neo4j.values.AnyValue;
6767
import org.neo4j.values.SequenceValue;
6868
import org.neo4j.values.storable.BooleanValue;
69+
import org.neo4j.values.storable.ByteValue;
70+
import org.neo4j.values.storable.IntValue;
6971
import org.neo4j.values.storable.IntegralValue;
72+
import org.neo4j.values.storable.LongValue;
7073
import org.neo4j.values.storable.NoValue;
74+
import org.neo4j.values.storable.ShortValue;
7175
import org.neo4j.values.storable.StringArray;
7276
import org.neo4j.values.storable.StringValue;
7377
import org.neo4j.values.storable.TextArray;
@@ -711,18 +715,7 @@ private static RelationshipType typeConfig(
711715
}
712716

713717
private static long extractNodeId(@NotNull AnyValue node) {
714-
// TODO: mapper
715-
if (node instanceof VirtualNodeValue) {
716-
return ((VirtualNodeValue) node).id();
717-
} else if (node instanceof IntegralValue) {
718-
return ((IntegralValue) node).longValue();
719-
} else {
720-
throw invalidNodeType(node);
721-
}
722-
}
723-
724-
private static IllegalArgumentException invalidNodeType(@NotNull AnyValue node) {
725-
return new IllegalArgumentException("The node has to be either a NODE or an INTEGER, but got " + node.getTypeName());
718+
return node.map(ExtractNodeId.INSTANCE);
726719
}
727720
}
728721

@@ -888,4 +881,52 @@ public NodeLabelToken mapStringArray(StringArray value) {
888881
return mapTextArray(value);
889882
}
890883
}
884+
885+
private enum ExtractNodeId implements PartialValueMapper<Long> {
886+
INSTANCE;
887+
888+
@Override
889+
public Long unsupported(AnyValue value) {
890+
throw invalidNodeType(value.getTypeName());
891+
}
892+
893+
@Override
894+
public Long mapNode(VirtualNodeValue value) {
895+
return value.id();
896+
}
897+
898+
@Override
899+
public Long mapSequence(SequenceValue value) {
900+
throw invalidNodeType("List");
901+
}
902+
903+
@Override
904+
public Long mapIntegral(IntegralValue value) {
905+
return value.longValue();
906+
}
907+
908+
@Override
909+
public Long mapByte(ByteValue value) {
910+
return value.longValue();
911+
}
912+
913+
@Override
914+
public Long mapShort(ShortValue value) {
915+
return value.longValue();
916+
}
917+
918+
@Override
919+
public Long mapInt(IntValue value) {
920+
return value.longValue();
921+
}
922+
923+
@Override
924+
public Long mapLong(LongValue value) {
925+
return value.longValue();
926+
}
927+
928+
private static IllegalArgumentException invalidNodeType(String typeName) {
929+
return new IllegalArgumentException("The node has to be either a NODE or an INTEGER, but got " + typeName);
930+
}
931+
}
891932
}

0 commit comments

Comments
 (0)