use of org.finos.legend.engine.plan.execution.result.StreamingResult in project legend-sdlc by finos.
the class LegendPureV1TestCase method getResultAsJson.
private JsonNode getResultAsJson(Result result) {
if (result instanceof StreamingResult) {
try {
Serializer serializer = ((StreamingResult) result).getSerializer(SerializationFormat.DEFAULT);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(1024);
serializer.stream(byteStream);
return objectMapper.readTree(byteStream.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (result instanceof ConstantResult) {
Object value = ((ConstantResult) result).getValue();
return objectMapper.valueToTree(value);
}
throw new RuntimeException("Unhandled result type: " + result.getClass().getSimpleName());
}
use of org.finos.legend.engine.plan.execution.result.StreamingResult in project legend-engine by finos.
the class MappingTestRunner method getResultAsJson.
private JsonNode getResultAsJson(Result result) {
if (result instanceof StreamingResult) {
try {
Serializer serializer = ((StreamingResult) result).getSerializer(SerializationFormat.DEFAULT);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(1024);
serializer.stream(byteStream);
return objectMapper.readTree(byteStream.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (result instanceof ConstantResult) {
Object value = ((ConstantResult) result).getValue();
return objectMapper.valueToTree(value);
}
throw new RuntimeException("Unhandled result type: " + result.getClass().getSimpleName());
}
use of org.finos.legend.engine.plan.execution.result.StreamingResult in project legend-engine by finos.
the class RelationalExecutor method prepareForSQLExecution.
private void prepareForSQLExecution(ExecutionNode node, Connection connection, String databaseTimeZone, String databaseTypeName, List<String> tempTableList, MutableList<CommonProfile> profiles, ExecutionState executionState) {
String sqlQuery;
sqlQuery = node instanceof RelationalExecutionNode ? ((RelationalExecutionNode) node).sqlQuery() : ((SQLExecutionNode) node).sqlQuery();
DatabaseManager databaseManager = DatabaseManager.fromString(databaseTypeName);
for (Map.Entry<String, Result> var : executionState.getResults().entrySet()) {
if (var.getValue() instanceof StreamingResult && sqlQuery.contains("(${" + var.getKey() + "})")) {
String tableName = databaseManager.relationalDatabaseSupport().processTempTableName(var.getKey());
this.prepareTempTable(connection, (StreamingResult) var.getValue(), tableName, databaseTypeName, databaseTimeZone, tempTableList);
tempTableList.add(tableName);
sqlQuery = sqlQuery.replace("(${" + var.getKey() + "})", tableName);
} else if (var.getValue() instanceof PreparedTempTableResult && sqlQuery.contains("(${" + var.getKey() + "})")) {
sqlQuery = sqlQuery.replace("(${" + var.getKey() + "})", ((PreparedTempTableResult) var.getValue()).getTempTableName());
}
}
if (sqlQuery == null) {
throw new RuntimeException("Relational execution not supported on external server");
}
try {
sqlQuery = FreeMarkerExecutor.process(sqlQuery, executionState, databaseTypeName, databaseTimeZone);
Span span = GlobalTracer.get().activeSpan();
if (span != null) {
span.setTag("generatedSQL", sqlQuery);
}
} catch (Exception e) {
throw new IllegalStateException("Reprocessing sql failed with vars " + executionState.getResults().keySet(), e);
}
LOGGER.info(new LogInfo(profiles, LoggingEventType.EXECUTION_RELATIONAL_REPROCESS_SQL, "Reprocessing sql with vars " + executionState.getResults().keySet() + ": " + sqlQuery).toString());
executionState.activities.add(new RelationalExecutionActivity(sqlQuery));
}
use of org.finos.legend.engine.plan.execution.result.StreamingResult in project legend-engine by finos.
the class TestExternalFormatQueries method runTest.
protected String runTest(PureModelContextData generated, String grammar, String query, String mappingPath, String runtimePath, InputStream input) {
try {
PureModelContextData parsed = PureGrammarParser.newInstance().parseModel(grammar);
PureModelContextData modelData = generated == null ? parsed : parsed.combine(generated);
ObjectMapper objectMapper = ObjectMapperFactory.getNewStandardObjectMapperWithPureProtocolExtensionSupports();
String json = objectMapper.writeValueAsString(modelData);
modelData = objectMapper.readValue(json, PureModelContextData.class);
PureModel model = Compiler.compile(modelData, DeploymentMode.TEST, null);
PureGrammarParser parser = PureGrammarParser.newInstance();
Lambda lambdaProtocol = parser.parseLambda(query, "query", true);
LambdaFunction<?> lambda = HelperValueSpecificationBuilder.buildLambda(lambdaProtocol.body, Lists.fixedSize.<Variable>empty(), model.getContext());
ExecutionContext context = new Root_meta_pure_runtime_ExecutionContext_Impl(" ")._enableConstraints(true);
RichIterable<Root_meta_external_shared_format_ExternalFormatExtension> planGenerationExtensions = LazyIterate.collect(ExternalFormatPlanGenerationExtensionLoader.extensions().values(), ext -> ext.getPureExtension(model.getExecutionSupport()));
RichIterable<? extends Root_meta_pure_router_extension_RouterExtension> extensions = core_external_shared_extension.Root_meta_external_shared_format_routerExtensions_String_1__ExternalFormatExtension_MANY__RouterExtension_MANY_("externalFormat", planGenerationExtensions, model.getExecutionSupport());
Mapping mapping = model.getMapping(mappingPath);
Runtime runtime = model.getRuntime(runtimePath);
String plan = PlanGenerator.generateExecutionPlanAsString(lambda, mapping, runtime, context, model, "vX_X_X", PlanPlatform.JAVA, "test", extensions, LegendPlanTransformers.transformers);
PlanExecutor executor = PlanExecutor.newPlanExecutorWithAvailableStoreExecutors(true);
Result result = executor.execute(plan, input);
StreamingResult streamingResult = (StreamingResult) result;
return streamingResult.flush(streamingResult.getSerializer(SerializationFormat.DEFAULT));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Aggregations