package org.vertexium.cypher.executor; import org.vertexium.cypher.VertexiumCypherQueryContext; import org.vertexium.cypher.VertexiumCypherScope; import org.vertexium.cypher.ast.model.CypherAllLiteral; import org.vertexium.cypher.ast.model.CypherAstBase; import org.vertexium.cypher.ast.model.CypherReturnItem; import org.vertexium.cypher.ast.model.CypherWithClause; import org.vertexium.cypher.exceptions.VertexiumCypherNotImplemented; import org.vertexium.util.VertexiumLogger; import org.vertexium.util.VertexiumLoggerFactory; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class WithClauseExecutor { private static final VertexiumLogger LOGGER = VertexiumLoggerFactory.getLogger(WithClauseExecutor.class); public VertexiumCypherScope execute(VertexiumCypherQueryContext ctx, CypherWithClause clause, VertexiumCypherScope scope) { LOGGER.debug("execute: %s", clause); VertexiumCypherScope results = ctx.getReturnClauseExecutor().execute(ctx, clause.isDistinct(), clause.getReturnBody(), scope); Stream<VertexiumCypherScope.Item> rows = results.stream(); if (clause.getWhere() != null) { rows = ctx.getExpressionExecutor().applyWhereToResults(ctx, rows, clause.getWhere()); } return VertexiumCypherScope.newFromItems(rows, results.getColumnNames(), null); } }