@Override public AnyValue apply(org.neo4j.kernel.api.proc.Context ctx, AnyValue[] input) throws ProcedureException { Map<String, Object> params = functionParams(input, inputs, defaultValueMapper); try (Result result = api.execute(statement, params)) { // resourceTracker.registerCloseableResource(result); // TODO if (!result.hasNext()) return null; if (output.isEmpty()) { return ValueUtils.of(result.stream().collect(Collectors.toList())); } List<String> cols = result.columns(); if (cols.isEmpty()) return null; if (!forceSingle && outType instanceof ListType) { ListType listType = (ListType) outType; AnyType innerType = listType.innerType(); if (innerType instanceof MapType) return ValueUtils.of(result.stream().collect(Collectors.toList())); if (cols.size() == 1) return ValueUtils.of(result.stream().map(row -> row.get(cols.get(0))).collect(Collectors.toList())); } else { Map<String, Object> row = result.next(); if (outType instanceof MapType) return ValueUtils.of(row); if (cols.size() == 1) return ValueUtils.of(row.get(cols.get(0))); } throw new IllegalStateException("Result mismatch " + cols + " output type is " + output); } } }, true);
public static ListType NTList( AnyType innerType ) { return new ListType( innerType ); }
private static Neo4jTypes.AnyType nextInner( Neo4jTypes.AnyType type ) { if ( type instanceof Neo4jTypes.ListType ) { return ((Neo4jTypes.ListType) type).innerType(); } else { return type; } }
public static ListType NTList( AnyType innerType ) { return new ListType( innerType ); }
private static Neo4jTypes.AnyType nextInner( Neo4jTypes.AnyType type ) { if ( type instanceof Neo4jTypes.ListType ) { return ((Neo4jTypes.ListType) type).innerType(); } else { return type; } }