Add the support to switch between result output formats (JSON/ADM).
git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization_result_distribution@1235 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
index ae70eb6..4062392 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
@@ -332,7 +332,16 @@
builder.setHashFunctionFactoryProvider(format.getBinaryHashFunctionFactoryProvider());
builder.setHashFunctionFamilyProvider(format.getBinaryHashFunctionFamilyProvider());
builder.setNullWriterFactory(format.getNullWriterFactory());
- builder.setPrinterProvider(format.getPrinterFactoryProvider());
+
+ switch (pdf) {
+ case JSON:
+ builder.setPrinterProvider(format.getJSONPrinterFactoryProvider());
+ break;
+ default:
+ builder.setPrinterProvider(format.getPrinterFactoryProvider());
+ break;
+ }
+
builder.setSerializerDeserializerProvider(format.getSerdeProvider());
builder.setTypeTraitProvider(format.getTypeTraitProvider());
builder.setNormalizedKeyComputerFactoryProvider(format.getNormalizedKeyComputerFactoryProvider());
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
index 9915f7c..2122ada 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
@@ -306,6 +306,13 @@
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ DisplayFormat format = DisplayFormat.HTML;
+ if (request.getContentType().equals("application/json")) {
+ format = DisplayFormat.JSON;
+ } else if (request.getContentType().equals("text/plain")) {
+ format = DisplayFormat.TEXT;
+ }
+
String query = request.getParameter("query");
String printExprParam = request.getParameter("print-expr-tree");
String printRewrittenExprParam = request.getParameter("print-rewritten-expr-tree");
@@ -336,7 +343,7 @@
isSet(printRewrittenExprParam), isSet(printLogicalPlanParam),
isSet(printOptimizedLogicalPlanParam), false, true, isSet(printJob));
MetadataManager.INSTANCE.init();
- AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, DisplayFormat.HTML);
+ AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, format);
double duration = 0;
long startTime = System.currentTimeMillis();
aqlTranslator.compileAndExecute(hcc, false);
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
index abf89f0..dfd6e7e 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
@@ -47,6 +47,13 @@
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
+ DisplayFormat format = DisplayFormat.HTML;
+ if (request.getContentType().equals("application/json")) {
+ format = DisplayFormat.JSON;
+ } else if (request.getContentType().equals("text/plain")) {
+ format = DisplayFormat.TEXT;
+ }
+
String query = getQueryParameter(request);
boolean asyncResults = isAsync(request);
@@ -75,7 +82,7 @@
MetadataManager.INSTANCE.init();
- AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, DisplayFormat.JSON);
+ AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, format);
aqlTranslator.compileAndExecute(hcc, asyncResults);
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
index 813c3a0..11f65dc 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
@@ -41,6 +41,8 @@
public IPrinterFactoryProvider getPrinterFactoryProvider();
+ public IPrinterFactoryProvider getJSONPrinterFactoryProvider();
+
public INullWriterFactory getNullWriterFactory();
public Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory(
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
index a334893..5db5252 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -19,6 +19,7 @@
import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFactoryProvider;
import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFamilyProvider;
import edu.uci.ics.asterix.formats.nontagged.AqlBinaryIntegerInspector;
+import edu.uci.ics.asterix.formats.nontagged.AqlJSONPrinterFactoryProvider;
import edu.uci.ics.asterix.formats.nontagged.AqlNormalizedKeyComputerFactoryProvider;
import edu.uci.ics.asterix.formats.nontagged.AqlPrinterFactoryProvider;
import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
@@ -315,6 +316,8 @@
temp.add(AndDescriptor.FACTORY);
temp.add(OrDescriptor.FACTORY);
temp.add(LikeDescriptor.FACTORY);
+
+ temp.add(YearDescriptor.FACTORY);
temp.add(ScanCollectionDescriptor.FACTORY);
temp.add(AnyCollectionMemberDescriptor.FACTORY);
temp.add(ClosedRecordConstructorDescriptor.FACTORY);
@@ -784,6 +787,11 @@
return AqlPrinterFactoryProvider.INSTANCE;
}
+ @Override
+ public IPrinterFactoryProvider getJSONPrinterFactoryProvider() {
+ return AqlJSONPrinterFactoryProvider.INSTANCE;
+ }
+
@SuppressWarnings("unchecked")
@Override
public ICopyEvaluatorFactory getConstantEvalFactory(
@@ -938,5 +946,4 @@
public IBinaryHashFunctionFamilyProvider getBinaryHashFunctionFamilyProvider() {
return AqlBinaryHashFunctionFamilyProvider.INSTANCE;
}
-
}