diff --git a/engine/src/main/java/com/arcadedb/query/sql/executor/DeleteStep.java b/engine/src/main/java/com/arcadedb/query/sql/executor/DeleteStep.java index 91b657abb..f5c8dd73e 100644 --- a/engine/src/main/java/com/arcadedb/query/sql/executor/DeleteStep.java +++ b/engine/src/main/java/com/arcadedb/query/sql/executor/DeleteStep.java @@ -69,9 +69,9 @@ public String prettyPrint(final int depth, final int indent) { final StringBuilder result = new StringBuilder(); result.append(spaces); result.append("+ DELETE"); - if (profilingEnabled) { + if (profilingEnabled) result.append(" (").append(getCostFormatted()).append(")"); - } + return result.toString(); } diff --git a/engine/src/main/java/com/arcadedb/query/sql/executor/LetExpressionStep.java b/engine/src/main/java/com/arcadedb/query/sql/executor/LetExpressionStep.java index f033848da..e112e7601 100755 --- a/engine/src/main/java/com/arcadedb/query/sql/executor/LetExpressionStep.java +++ b/engine/src/main/java/com/arcadedb/query/sql/executor/LetExpressionStep.java @@ -39,6 +39,8 @@ public LetExpressionStep(final Identifier varName, final Expression expression, public ResultSet syncPull(final CommandContext context, final int nRecords) throws TimeoutException { checkForPrevious("Cannot execute a local LET on a query without a target"); + cost = 0L; + return new ResultSet() { final ResultSet source = getPrev().syncPull(context, nRecords); @@ -49,10 +51,12 @@ public boolean hasNext() { @Override public Result next() { + final long beginTime = System.nanoTime(); final ResultInternal result = (ResultInternal) source.next(); final Object value = expression.execute(result, context); result.setMetadata(varName.getStringValue(), value); context.setVariable(varName.getStringValue(), value); + cost += System.nanoTime() - beginTime; return result; } @@ -66,6 +70,11 @@ public void close() { @Override public String prettyPrint(final int depth, final int indent) { final String spaces = ExecutionStepInternal.getIndent(depth, indent); - return spaces + "+ LET (for each record)\n" + spaces + " " + varName + " = " + expression; + + final StringBuilder result = new StringBuilder(); + result.append(spaces).append("+ LET (for each record)\n").append(spaces).append(" ").append(varName).append(" = (").append(expression).append(")"); + if (profilingEnabled) + result.append(" (").append(getCostFormatted()).append(")"); + return result.toString(); } } diff --git a/engine/src/main/java/com/arcadedb/query/sql/executor/LetQueryStep.java b/engine/src/main/java/com/arcadedb/query/sql/executor/LetQueryStep.java index 98a17adb1..db1de4416 100644 --- a/engine/src/main/java/com/arcadedb/query/sql/executor/LetQueryStep.java +++ b/engine/src/main/java/com/arcadedb/query/sql/executor/LetQueryStep.java @@ -60,6 +60,8 @@ public Result next() { } private void calculate(final ResultInternal result, final CommandContext context) { + final long beginTime = System.nanoTime(); + final BasicCommandContext subCtx = new BasicCommandContext(); subCtx.setDatabase(context.getDatabase()); subCtx.setParentWithoutOverridingChild(context); @@ -67,6 +69,8 @@ private void calculate(final ResultInternal result, final CommandContext context final List value = toList(new LocalResultSet(subExecutionPlan)); result.setMetadata(varName.getStringValue(), value); context.setVariable(varName.getStringValue(), value); + + cost = System.nanoTime() - beginTime; } private List toList(final LocalResultSet oLocalResultSet) { @@ -82,13 +86,17 @@ private List toList(final LocalResultSet oLocalResultSet) { public void close() { source.close(); } - }; } @Override public String prettyPrint(final int depth, final int indent) { final String spaces = ExecutionStepInternal.getIndent(depth, indent); - return spaces + "+ LET (for each record)\n" + spaces + " " + varName + " = (" + query + ")"; + + final StringBuilder result = new StringBuilder(); + result.append(spaces).append("+ LET (for each record)\n").append(spaces).append(" ").append(varName).append(" = (").append(query).append(")"); + if (profilingEnabled) + result.append(" (").append(getCostFormatted()).append(")"); + return result.toString(); } }