use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Enumeration in project legend-engine by finos.
the class TestExecutionPlan method testTDSWithEnum.
@Test
public void testTDSWithEnum() throws Exception {
// executionPlan(|meta::relational::tests::mapping::enumeration::model::domain::Employee.all()->project(a|$a.type, 'xx'), meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping, meta::relational::tests::mapping::enumeration::enumTestRuntime())->meta::alloy::protocol::vX_X_X::transformation::fromPureGraph::executionPlan::transformPlan()->toJSON([], 1000, config(false, false, true, true));
String plan = "{\n" + " \"rootExecutionNode\": {\n" + " \"sqlQuery\": \"select \\\"root\\\".type as \\\"xx\\\" from employeeTable as \\\"root\\\"\",\n" + " \"resultColumns\": [\n" + " {\n" + " \"label\": \"\\\"xx\\\"\",\n" + " \"dataType\": \"VARCHAR(20)\"\n" + " }\n" + " ],\n" + " \"connection\": {\n" + " \"_type\": \"RelationalDatabaseConnection\",\n" + " \"type\": \"H2\",\n" + " \"authenticationStrategy\" : {\n" + " \"_type\" : \"test\"\n" + " },\n" + " \"datasourceSpecification\" : {\n" + " \"_type\" : \"static\",\n" + " \"databaseName\" : \"testDB\",\n" + " \"host\":\"127.0.0.1\",\n" + " \"port\" : \"" + serverPort + "\"\n" + " }\n" + " }," + " \"_type\": \"relational\",\n" + " \"resultType\": {\n" + " \"tdsColumns\": [\n" + " {\n" + " \"name\": \"xx\",\n" + " \"type\": \"EmployeeType\",\n" + " \"relationalType\": \"VARCHAR(20)\",\n" + " \"enumMapping\": {\n" + " \"CONTRACT\": [\n" + " \"FTC\",\n" + " \"FTO\"\n" + " ],\n" + " \"FULL_TIME\": [\n" + " \"FTE\"\n" + " ]\n" + " }\n" + " }\n" + " ],\n" + " \"_type\": \"tds\"\n" + " }\n" + " }\n" + "}";
SingleExecutionPlan executionPlan = objectMapper.readValue(plan, SingleExecutionPlan.class);
RelationalResult result = (RelationalResult) executionPlan.rootExecutionNode.accept(new ExecutionNodeExecutor(null, new ExecutionState(Maps.mutable.empty(), Lists.mutable.withAll(executionPlan.templateFunctions), Lists.mutable.with(new RelationalStoreExecutionState(new RelationalStoreState(serverPort))))));
Assert.assertEquals("{\"builder\": {\"_type\":\"tdsBuilder\",\"columns\":[{\"name\":\"xx\",\"type\":\"EmployeeType\",\"relationalType\":\"VARCHAR(20)\"}]}, \"activities\": [{\"_type\":\"relational\",\"sql\":\"select \\\"root\\\".type as \\\"xx\\\" from employeeTable as \\\"root\\\"\"}], \"result\" : {\"columns\" : [\"xx\"], \"rows\" : [{\"values\": [\"CONTRACT\"]},{\"values\": [\"FULL_TIME\"]},{\"values\": [\"CONTRACT\"]}]}}", result.flush(new RelationalResultToJsonDefaultSerializer(result)));
}
use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Enumeration in project legend-engine by finos.
the class TestExecutionPlan method testClassWithEnum.
@Test
public void testClassWithEnum() throws Exception {
// executionPlan(|meta::relational::tests::mapping::enumeration::model::domain::Employee.all(), meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping, meta::relational::tests::mapping::enumeration::enumTestRuntime())->meta::alloy::protocol::vX_X_X::transformation::fromPureGraph::executionPlan::transformPlan()->toJSON([], 1000, config(false, false, true, true));
String plan = "{\n" + " \"rootExecutionNode\": {\n" + " \"sqlQuery\": \"select \\\"root\\\".id as \\\"pk_0\\\", \\\"root\\\".id as \\\"id\\\", \\\"root\\\".name as \\\"name\\\", \\\"root\\\".doh as \\\"dateOfHire\\\", \\\"root\\\".type as \\\"type\\\", \\\"root\\\".active as \\\"active\\\" from employeeTable as \\\"root\\\"\",\n" + " \"resultColumns\": [\n" + " {\n" + " \"label\": \"\\\"pk_0\\\"\",\n" + " \"dataType\": \"INTEGER\"\n" + " },\n" + " {\n" + " \"label\": \"\\\"id\\\"\",\n" + " \"dataType\": \"INTEGER\"\n" + " },\n" + " {\n" + " \"label\": \"\\\"name\\\"\",\n" + " \"dataType\": \"VARCHAR(200)\"\n" + " },\n" + " {\n" + " \"label\": \"\\\"dateOfHire\\\"\",\n" + " \"dataType\": \"DATE\"\n" + " },\n" + " {\n" + " \"label\": \"\\\"type\\\"\",\n" + " \"dataType\": \"VARCHAR(20)\"\n" + " },\n" + " {\n" + " \"label\": \"\\\"active\\\"\",\n" + " \"dataType\": \"INTEGER\"\n" + " }\n" + " ],\n" + " \"connection\": {\n" + " \"_type\": \"RelationalDatabaseConnection\",\n" + " \"type\": \"H2\",\n" + " \"authenticationStrategy\" : {\n" + " \"_type\" : \"test\"\n" + " },\n" + " \"datasourceSpecification\" : {\n" + " \"_type\" : \"static\",\n" + " \"databaseName\" : \"testDB\",\n" + " \"host\":\"127.0.0.1\",\n" + " \"port\" : \"" + serverPort + "\"\n" + " }\n" + " }," + " \"_type\": \"relational\",\n" + " \"resultType\": {\n" + " \"class\": \"meta::relational::tests::mapping::enumeration::model::domain::Employee\",\n" + " \"setImplementations\": [\n" + " {\n" + " \"class\": \"meta::relational::tests::mapping::enumeration::model::domain::Employee\",\n" + " \"mapping\": \"meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping\",\n" + " \"id\": \"meta_relational_tests_mapping_enumeration_model_domain_Employee\",\n" + " \"propertyMappings\": [\n" + " {\n" + " \"property\": \"id\",\n" + " \"type\": \"Integer\"\n" + " },\n" + " {\n" + " \"property\": \"name\",\n" + " \"type\": \"String\"\n" + " },\n" + " {\n" + " \"property\": \"dateOfHire\",\n" + " \"type\": \"Date\"\n" + " },\n" + " {\n" + " \"property\": \"type\",\n" + " \"type\": \"meta::relational::tests::mapping::enumeration::model::domain::EmployeeType\",\n" + " \"enumMapping\": {\n" + " \"CONTRACT\": [\n" + " \"FTC\",\n" + " \"FTO\"\n" + " ],\n" + " \"FULL_TIME\": [\n" + " \"FTE\"\n" + " ]\n" + " }\n" + " },\n" + " {\n" + " \"property\": \"active\",\n" + " \"type\": \"meta::relational::tests::mapping::enumeration::model::domain::YesNo\",\n" + " \"enumMapping\": {\n" + " \"YES\": [\n" + " \"1\"\n" + " ],\n" + " \"NO\": [\n" + " \"0\"\n" + " ]\n" + " }\n" + " }\n" + " ]\n" + " }\n" + " ],\n" + " \"_type\": \"class\"\n" + " }\n" + " }\n" + "}";
SingleExecutionPlan executionPlan = objectMapper.readValue(plan, SingleExecutionPlan.class);
RelationalResult result = (RelationalResult) executionPlan.rootExecutionNode.accept(new ExecutionNodeExecutor(null, new ExecutionState(Maps.mutable.empty(), Lists.mutable.withAll(executionPlan.templateFunctions), Lists.mutable.with(new RelationalStoreExecutionState(new RelationalStoreState(serverPort))))));
Assert.assertEquals("{\"builder\": {\"_type\":\"classBuilder\",\"mapping\":\"meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping\",\"classMappings\":[{\"setImplementationId\":\"meta_relational_tests_mapping_enumeration_model_domain_Employee\",\"properties\":[{\"property\":\"id\",\"type\":\"Integer\"},{\"property\":\"name\",\"type\":\"String\"},{\"property\":\"dateOfHire\",\"type\":\"Date\"},{\"property\":\"type\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::EmployeeType\"},{\"property\":\"active\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::YesNo\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}, \"activities\": [{\"_type\":\"relational\",\"sql\":\"select \\\"root\\\".id as \\\"pk_0\\\", \\\"root\\\".id as \\\"id\\\", \\\"root\\\".name as \\\"name\\\", \\\"root\\\".doh as \\\"dateOfHire\\\", \\\"root\\\".type as \\\"type\\\", \\\"root\\\".active as \\\"active\\\" from employeeTable as \\\"root\\\"\"}], \"result\" : {\"columns\" : [\"pk_0\",\"id\",\"name\",\"dateOfHire\",\"type\",\"active\"], \"rows\" : [{\"values\": [1,1,\"Alice\",\"1983-03-15T00:00:00.000000000+0000\",\"CONTRACT\",\"YES\"]},{\"values\": [2,2,\"Bob\",\"2003-07-19T00:00:00.000000000+0000\",\"FULL_TIME\",\"NO\"]},{\"values\": [3,3,\"Curtis\",\"2012-08-25T00:00:00.000000000+0000\",\"CONTRACT\",null]}]}}", result.flush(new RelationalResultToJsonDefaultSerializer(result)));
}
use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Enumeration in project legend-engine by finos.
the class TestPlanExecutionWithAuthenticationFlow method testPlanExecutionWithSnowflakeKeyPair.
@Ignore
public // TODO - fix this test. For now it registers a fake key just to verify just to verify credential resolution
void testPlanExecutionWithSnowflakeKeyPair() throws Exception {
String connectionSpec = "\"connection\": {\n" + " \"_type\": \"RelationalDatabaseConnection\",\n" + " \"type\": \"Snowflake\",\n" + " \"authenticationStrategy\" : {\n" + " \"_type\" : \"snowflakePublic\",\n" + " \"publicUserName\" : \"fakeUser1\",\n" + " \"privateKeyVaultReference\" : \"fakePrivateKeyRef1\",\n" + " \"passPhraseVaultReference\" : \"fakePassphraseRef1\"\n" + " },\n" + " \"datasourceSpecification\" : {\n" + " \"_type\" : \"snowflake\",\n" + " \"accountName\" : \"ki79827\",\n" + " \"region\" : \"us-east-2\",\n" + " \"warehouseName\" : \"LEGENDRO_WH\",\n" + " \"databaseName\" : \"KNOEMA_RENEWABLES_DATA_ATLAS\",\n" + " \"cloudType\" : \"aws\"\n" + " }\n" + " }";
InMemoryVaultForTesting inMemoryVault = new InMemoryVaultForTesting();
inMemoryVault.setValue("fakePrivateKeyRef1", "notused");
inMemoryVault.setValue("fakePassphraseRef1", "notused");
Vault.INSTANCE.registerImplementation(inMemoryVault);
String plan = this.buildPlan(connectionSpec);
try {
SingleExecutionPlan executionPlan = objectMapper.readValue(plan, SingleExecutionPlan.class);
RelationalResult result = (RelationalResult) executionPlan.rootExecutionNode.accept(new ExecutionNodeExecutor(null, new ExecutionState(Maps.mutable.empty(), Lists.mutable.withAll(executionPlan.templateFunctions), Lists.mutable.with(new RelationalStoreExecutionState(new RelationalStoreState(port))))));
Assert.assertEquals("{\"builder\": {\"_type\":\"classBuilder\",\"mapping\":\"meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping\",\"classMappings\":[{\"setImplementationId\":\"meta_relational_tests_mapping_enumeration_model_domain_Employee\",\"properties\":[{\"property\":\"id\",\"type\":\"Integer\"},{\"property\":\"name\",\"type\":\"String\"},{\"property\":\"dateOfHire\",\"type\":\"Date\"},{\"property\":\"type\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::EmployeeType\"},{\"property\":\"active\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::YesNo\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}, \"activities\": [{\"_type\":\"relational\",\"sql\":\"select \\\"root\\\".id as \\\"pk_0\\\", \\\"root\\\".id as \\\"id\\\", \\\"root\\\".name as \\\"name\\\", \\\"root\\\".doh as \\\"dateOfHire\\\", \\\"root\\\".type as \\\"type\\\", \\\"root\\\".active as \\\"active\\\" from employeeTable as \\\"root\\\"\"}], \"result\" : {\"columns\" : [\"pk_0\",\"id\",\"name\",\"dateOfHire\",\"type\",\"active\"], \"rows\" : [{\"values\": [1,1,\"Alice\",\"1983-03-15T00:00:00.000000000+0000\",\"CONTRACT\",\"YES\"]},{\"values\": [2,2,\"Bob\",\"2003-07-19T00:00:00.000000000+0000\",\"FULL_TIME\",\"NO\"]},{\"values\": [3,3,\"Curtis\",\"2012-08-25T00:00:00.000000000+0000\",\"CONTRACT\",null]}]}}", result.flush(new RelationalResultToJsonDefaultSerializer(result)));
} catch (Exception e) {
assertTrue(e.getMessage().contains("Failed to initialize pool: net.snowflake.client.jdbc.SnowflakeSQLLoggedException: Private key provided is invalid or not supported: Use java.security.interfaces.RSAPrivateCrtKey.class for the private key"));
}
}
use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Enumeration in project legend-engine by finos.
the class TestPlanExecutionWithAuthenticationFlow method testPlanExecutionWithLocalH2.
@Test
public void testPlanExecutionWithLocalH2() throws Exception {
Connection connection = setupH2Connection();
String connectionSpec = "\"connection\": {\n" + " \"_type\": \"RelationalDatabaseConnection\",\n" + " \"type\": \"H2\",\n" + " \"authenticationStrategy\" : {\n" + " \"_type\" : \"test\"\n" + " },\n" + " \"datasourceSpecification\" : {\n" + " \"_type\" : \"h2Local\"\n" + " }\n" + " }";
String plan = this.buildPlan(connectionSpec);
SingleExecutionPlan executionPlan = objectMapper.readValue(plan, SingleExecutionPlan.class);
RelationalResult result = (RelationalResult) executionPlan.rootExecutionNode.accept(new ExecutionNodeExecutor(null, new ExecutionState(Maps.mutable.empty(), Lists.mutable.withAll(executionPlan.templateFunctions), Lists.mutable.with(new RelationalStoreExecutionState(new RelationalStoreState(port))))));
Assert.assertEquals("{\"builder\": {\"_type\":\"classBuilder\",\"mapping\":\"meta::relational::tests::mapping::enumeration::model::mapping::employeeTestMapping\",\"classMappings\":[{\"setImplementationId\":\"meta_relational_tests_mapping_enumeration_model_domain_Employee\",\"properties\":[{\"property\":\"id\",\"type\":\"Integer\"},{\"property\":\"name\",\"type\":\"String\"},{\"property\":\"dateOfHire\",\"type\":\"Date\"},{\"property\":\"type\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::EmployeeType\"},{\"property\":\"active\",\"type\":\"meta::relational::tests::mapping::enumeration::model::domain::YesNo\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}],\"class\":\"meta::relational::tests::mapping::enumeration::model::domain::Employee\"}, \"activities\": [{\"_type\":\"relational\",\"sql\":\"select \\\"root\\\".id as \\\"pk_0\\\", \\\"root\\\".id as \\\"id\\\", \\\"root\\\".name as \\\"name\\\", \\\"root\\\".doh as \\\"dateOfHire\\\", \\\"root\\\".type as \\\"type\\\", \\\"root\\\".active as \\\"active\\\" from employeeTable as \\\"root\\\"\"}], \"result\" : {\"columns\" : [\"pk_0\",\"id\",\"name\",\"dateOfHire\",\"type\",\"active\"], \"rows\" : [{\"values\": [1,1,\"Alice\",\"1983-03-15T00:00:00.000000000+0000\",\"CONTRACT\",\"YES\"]},{\"values\": [2,2,\"Bob\",\"2003-07-19T00:00:00.000000000+0000\",\"FULL_TIME\",\"NO\"]},{\"values\": [3,3,\"Curtis\",\"2012-08-25T00:00:00.000000000+0000\",\"CONTRACT\",null]}]}}", result.flush(new RelationalResultToJsonDefaultSerializer(result)));
closeConnection(connection);
}
use of org.finos.legend.engine.protocol.pure.v1.model.packageableElement.domain.Enumeration in project legend-engine by finos.
the class HelperRelationalBuilder method processRelationalPropertyMapping.
private static PropertyMapping processRelationalPropertyMapping(RelationalPropertyMapping propertyMapping, CompileContext context, PropertyMappingsImplementation immediateParent, InstanceSetImplementation topParent, MutableList<EmbeddedRelationalInstanceSetImplementation> embeddedRelationalPropertyMappings, RichIterable<EnumerationMapping<Object>> allEnumerationMappings, MutableMap<String, TableAlias> aliasMap) {
org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping rpm = new Root_meta_relational_mapping_RelationalPropertyMapping_Impl("");
Property property = resolvePropertyForRelationalPropertyMapping(propertyMapping, immediateParent, context);
if (propertyMapping.bindingTransformer != null) {
return buildSemiStructuredPropertyMapping(property, propertyMapping, immediateParent, (RootRelationalInstanceSetImplementation) topParent, embeddedRelationalPropertyMappings, aliasMap, context);
}
org.finos.legend.pure.m3.coreinstance.meta.relational.mapping.RelationalPropertyMapping res = rpm._property(property)._localMappingProperty(propertyMapping.localMappingProperty != null)._relationalOperationElement(processRelationalOperationElement(propertyMapping.relationalOperation, context, aliasMap, FastList.newList()))._sourceSetImplementationId(HelperRelationalBuilder.getPropertyMappingSourceId(propertyMapping, immediateParent, property, context))._targetSetImplementationId(HelperRelationalBuilder.getPropertyMappingTargetId(propertyMapping, immediateParent, property, context))._owner(immediateParent);
rpm.setSourceInformation(SourceInformationHelper.toM3SourceInformation(propertyMapping.sourceInformation));
if (propertyMapping.enumMappingId != null) {
EnumerationMapping<Object> eMap = allEnumerationMappings.select(e -> e._name().equals(propertyMapping.enumMappingId)).getFirst();
Assert.assertTrue(eMap != null, () -> "Can't find enumeration mapping '" + propertyMapping.enumMappingId + "'");
res = res._transformer(eMap);
}
return res;
}
Aggregations