>From Janhavi Tripurwar <[email protected]>:

Janhavi Tripurwar has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21619?usp=email )

Change subject: [ASTERIXDB-3593]Fix multi-statement response indentation
......................................................................

[ASTERIXDB-3593]Fix multi-statement response indentation

Ext-ref: MB-62708

Co-Authored-By: Claude Opus 5 <[email protected]>
Change-Id: I2cc80e82b2f93fc2feab1c0ba4491773e12414b6
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21619
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>
Reviewed-by: Janhavi Tripurwar <[email protected]>
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/NcStatementsPrinter.java
1 file changed, 35 insertions(+), 10 deletions(-)

Approvals:
  Ali Alsuliman: Looks good to me, approved
  Jenkins: Verified; Verified
  Janhavi Tripurwar: Looks good to me, but someone else must approve




diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/NcStatementsPrinter.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/NcStatementsPrinter.java
index 73f9b02..5b194a4 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/NcStatementsPrinter.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/NcStatementsPrinter.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.app.result.fields;

 import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -69,6 +70,8 @@
     /** Indent of a statement object's fields, one level deeper than the array 
itself. */
     private static final String FIELD_INDENT = "\t\t\t";

+    private static final String NESTED_SHIFT = "\t\t";
+
     /** One field of a statement object. Collected so that the separators 
cannot be got wrong. */
     private interface FieldEmitter {
         void emit(PrintWriter pw) throws HyracksDataException;
@@ -136,32 +139,35 @@
         // a statement that returns rows describes them, as the flat response 
does; the signature is the default one
         // unless the client asked for a typed one, exactly as 
SignaturePrinter.newInstance decides for a request
         if (printSignature && resultSetInfo != null) {
-            fields.add((plans == null ? SignaturePrinter.INSTANCE : 
SignaturePrinter.newInstance(plans))::print);
+            IResponseFieldPrinter signature =
+                    plans == null ? SignaturePrinter.INSTANCE : 
SignaturePrinter.newInstance(plans);
+            fields.add(w -> printNested(w, signature));
         }
         if (resultSetInfo != null) {
             if (delivery == ResultDelivery.IMMEDIATE) {
                 fields.add(w -> printRows(w, rows, resultSetInfo, stats));
             } else if (delivery == ResultDelivery.DEFERRED) {
                 // a handle per statement, each naming that statement's own job
-                fields.add(new ResultHandlePrinter(sessionOutput,
-                        new ResultHandle(resultSetInfo.getJobId(), 
resultSetInfo.getResultSetId(), requestId))::print);
+                fields.add(w -> printNested(w, new 
ResultHandlePrinter(sessionOutput,
+                        new ResultHandle(resultSetInfo.getJobId(), 
resultSetInfo.getResultSetId(), requestId))));
             }
         }
         if (plans != null) {
-            fields.add(new PlansPrinter(plans, 
sessionOutput.config().getPlanFormat())::print);
+            fields.add(w -> printNested(w, new PlansPrinter(plans, 
sessionOutput.config().getPlanFormat())));
         }
         fields.add(w -> printField(w, StatusPrinter.FIELD_NAME,
                 quoted((failed ? ResultStatus.FATAL : 
ResultStatus.SUCCESS).str())));
         if (failed) {
-            fields.add(errorsPrinter(statement.getError())::print);
+            fields.add(w -> printNested(w, 
errorsPrinter(statement.getError())));
         }
         if (!statement.getWarnings().isEmpty()) {
-            fields.add(warningsPrinter(statement.getWarnings())::print);
+            fields.add(w -> printNested(w, 
warningsPrinter(statement.getWarnings())));
         }
         // built when the field is printed, not now: the row count and size 
are only final once the rows are streamed
-        fields.add(w -> new MetricsPrinter(statementMetrics(stats, failed), 
resultCharset, STATEMENT_METRICS).print(w));
+        fields.add(w -> printNested(w,
+                new MetricsPrinter(statementMetrics(stats, failed), 
resultCharset, STATEMENT_METRICS)));
         if (stats.getJobProfile() != null) {
-            fields.add(new ProfilePrinter(stats.getJobProfile())::print);
+            fields.add(w -> printNested(w, new 
ProfilePrinter(stats.getJobProfile())));
         }

         if (separatorBefore) {
@@ -186,9 +192,28 @@
         pw.print(FIELD_INDENT);
         pw.print(quoted(ResultsPrinter.FIELD_NAME));
         pw.print(": ");
+        PrintWriter rows = new PrintWriter(pw) {
+            @Override
+            public void println(String x) {
+                print(x);
+            }
+        };
         // no result decorators: this printer names the field itself, so the 
decorators that name and number it must not
-        SessionOutput undecorated = new SessionOutput(sessionOutput.config(), 
pw);
-        ResultUtil.printResults(appCtx, reader, undecorated, stats, 
resultSetInfo.getRecordType());
+        SessionOutput undecorated = new SessionOutput(sessionOutput.config(), 
rows);
+        try {
+            ResultUtil.printResults(appCtx, reader, undecorated, stats, 
resultSetInfo.getRecordType());
+        } finally {
+            rows.flush();
+        }
+    }
+
+    private static void printNested(PrintWriter pw, IResponseFieldPrinter 
printer) throws HyracksDataException {
+        StringWriter buffer = new StringWriter();
+        PrintWriter bufferedWriter = new PrintWriter(buffer);
+        printer.print(bufferedWriter);
+        bufferedWriter.flush();
+        pw.print(NESTED_SHIFT);
+        pw.print(buffer.toString().replace("\n", "\n" + NESTED_SHIFT));
     }

     /** The errors of a failed statement. Overridable for a deployment that 
represents errors in its own form. */

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21619?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I2cc80e82b2f93fc2feab1c0ba4491773e12414b6
Gerrit-Change-Number: 21619
Gerrit-PatchSet: 3
Gerrit-Owner: Janhavi Tripurwar <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Janhavi Tripurwar <[email protected]>
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Michael Blow <[email protected]>
Gerrit-Reviewer: Murtadha Hubail <[email protected]>

Reply via email to